Contract 0x0b416e5da1f68dd780683b5daef858b0a081c364 1

Contract Overview

Balance:
0 HT

HT Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0b02f8ccbf1298d64f4e86d22684d072519cd086c3ffa6ca1a9efdaad801a70fCancel164154032022-06-25 6:59:0127 secs ago0xa24ad6d351c7e2977693451393a3315e169bef95 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.000405342.5
0x27eb04e09ec8707409dad0988eda72b52dfc9ca1575d8385d4b4737e60842a29Sell164153862022-06-25 6:58:101 min ago0x2614f941015497eff242ad182999dc194ead13ac IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00105013752.5
0xa395f4da57937b2daae0d8b5ea6f539f234ea589699cc25f564a3f8f557ac07eCancel164153822022-06-25 6:57:581 min ago0x2614f941015497eff242ad182999dc194ead13ac IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00039920252.5
0x8a0dd48fca8dde8200867ec2d089c959c2a26ff6774f48e871ad63fcedd15edcBuy164153802022-06-25 6:57:521 min ago0xbf79e8ea72462e75e3670b487420879fe3da31bd IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00130073752.5
0xf77914fb640540caa3076bdfe56adfaa354babca22dbc644340ff4d2f6a8839bSell164153412022-06-25 6:55:553 mins ago0x8a9dafe1955f7486abcc8bf4d168aa741f1c03b8 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00257934252.5
0xd9603f9cf58d8c365960fbffbe00bdfddd28b23d4b50b7338f955a756edd5838Buy ETH164153332022-06-25 6:55:313 mins ago0x4a229df170bf80baee2ff125efd37383fc2cfdc5 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0010555552.5
0xc8de5eb6e1c15e3ff842c157d1108a89660991a6344aeaf6ac5ab662251a7178Cancel164153282022-06-25 6:55:164 mins ago0x8a9dafe1955f7486abcc8bf4d168aa741f1c03b8 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00039920252.5
0x4c63d6d7575a230b2d46838e105b338cbf77e4038546090a3b832cb7cdb39a07Buy164153262022-06-25 6:55:104 mins ago0x64c8719097dd99dffe4896499e1ef44abea07485 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00221199752.5
0xa50356ccb04b2ed145345ab0fcbdb3067f402042a456706277a7dd7c7699aa98Cancel164152972022-06-25 6:53:435 mins ago0x64c8719097dd99dffe4896499e1ef44abea07485 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.000663992.5
0xcd37a3980f6903e691316875d695e38c27b38af5b8a1a0a22e818063fc64ad8fCancel164152892022-06-25 6:53:196 mins ago0x4a229df170bf80baee2ff125efd37383fc2cfdc5 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0004268152.5
0x8fe1de30270def39c08c95d4173c5cf5f3b54ff4ba3c5f804fe3084bb2f9d549Buy164152732022-06-25 6:52:316 mins ago0x8a6c7484328cd5433eaa16bcc231f6c4f7b4eb12 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00194160252.5
0x9ec703f4def46706b82b18714faedfca401041ee507864e8003cdd18143010a7Cancel164152582022-06-25 6:51:467 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0004078752.5
0xd9b54adaf392a489261057578591def8e62163e9e300e968e6c5c8262691096fCancel164152492022-06-25 6:51:198 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0004487252.5
0xdd79668226208c3d089043729fd699e6141bdf3f1697ff064d95527c11fdf582Sell164152272022-06-25 6:50:139 mins ago0xd3f5176b755240330786243d26ef05210e9d1018 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00106307252.5
0x0b1054e17a2791b1a91dbd21cb42f488d70167faa91f884197bf75da3dd2b01eCancel164152162022-06-25 6:49:409 mins ago0x9b3fb7bf18ec05a331af4876b0facea021eb370f IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00056789752.5
0xf79b7532f1fe950bf5ea0feb3ead05f4dddfd12fb97c33b7eee3b9632fef3047Sell164152022022-06-25 6:48:5810 mins ago0x1dbe0f806d5f3190ca0d1c9cee3d2418ca6fa79e IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0010566352.5
0xd6bb6b1294c584b92edc3646d73cb4a00220f5f0c23e754a16ee459567e63d4bCancel164151882022-06-25 6:48:1611 mins ago0x1dbe0f806d5f3190ca0d1c9cee3d2418ca6fa79e IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.000461922.5
0xe9b2ddf588b6893826aa49620ab448ad5ff803af27e20b4cce8b4f092533fc58Buy164151802022-06-25 6:47:5211 mins ago0xd9c4349dff9685e05d3af533cf812673ef027fa9 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00165003252.5
0x578207fba5917e4184febe691cb1fdc5a21a6a05634be8b6af0bd0d6f40ae62dBuy164151122022-06-25 6:44:2815 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.004785412.5
0xb785b968b50369945482e496b30678d805237ac02905e2a276b4bb7d6c36c9efSell164150682022-06-25 6:42:1617 mins ago0x54bc78dbac9cb92d463df1456fd2a2f0611218ad IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.00105013752.5
0x97aa4d6491e9a84187c21172df43f020f4baf191dacc186b3c035caf37ddf2bbBuy164150412022-06-25 6:40:5518 mins ago0xdf6915cc15e4325ccb47fcbabe50e6213330fec5 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0019675152.5
0x56ac0e869c8465fae09f9b6a8da7c6c968c94bed358d95e375c26fab41f74addCancel164150122022-06-25 6:39:2820 mins ago0xdf6915cc15e4325ccb47fcbabe50e6213330fec5 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0005018552.5
0x2f88179efe5f94866a8353bcf3b0e70ed29a326a637a297d6f50cad2ddf4620aBuy164149892022-06-25 6:38:1921 mins ago0xe2f36facc46db2e145782138f4ef1f16da08aa1a IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.003329692.5
0x61dacb27922c7cfdabcd390d9c1d141753cacc268485e9aed11efca4106fe41fSell164149612022-06-25 6:36:5522 mins ago0x237f169e3808e27388da4f242b3628c3c43ffe30 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.0051639852.5
0x6b0b95a63823bd9760a3ed4ccbd87e55ecaefe813e647a174d31f363f1393e97Buy164149312022-06-25 6:35:2524 mins ago0x366436cce2ef003349237bf1ae36969a0b8337a4 IN 0x0b416e5da1f68dd780683b5daef858b0a081c3640 HT0.002206582.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x75e5442700ad57295a04f5477b56998da0356901cd248fcd1f747e7c050912a4163975802022-06-24 16:07:5214 hrs 51 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c13 HT
0xdcf5f239bb8cc2f36274f2b65c2083c712de90c4002b3a937953be2c4049e447163960012022-06-24 14:48:5516 hrs 10 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c0.27 HT
0x1d03b27c3171c0b9fe1840398b52fbf0086b3427c79d46d1ee5a98c0abbe4029163953582022-06-24 14:16:4616 hrs 42 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c5.11 HT
0x2d31734c1425876ef5c4275b334a4f3c9528257e6e280123d1d31a56b94f9b3b163953412022-06-24 14:15:5516 hrs 43 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c6 HT
0x028c276a547c5105ff82d6f2657a27413deae2464aa557615471ea57a4b6e3a9163873742022-06-24 7:37:3423 hrs 21 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c0.195 HT
0xefc3da57dfc740c3d52363b1303f3459e3288c5e442e9ecca5c7781804d6c1f7163873652022-06-24 7:37:0723 hrs 22 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c0.1847 HT
0x8d104b4d0705e39424458a5d41bbd56a2f3564a77f5f4839255848747429875b163613172022-06-23 9:54:431 day 21 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c1 HT
0xe8f04cbbf57228024ced6d6b884cd80640258940e38bc472462575ea3fe2b134163578452022-06-23 7:01:071 day 23 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c64 HT
0x9c37d6581f5668b874efb827a70be4c640563a5a66742b2c8a7140fe61dfc827163566702022-06-23 6:02:222 days 57 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c1.03 HT
0x0209fe37e98a756c0173192ca95cccfb9d95372c71ebfbdc615b8cc06e66fa7d163566602022-06-23 6:01:522 days 57 mins ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c3 HT
0xf269cb1ea2f4dffe2ef47857a03544ddf080c311304c77332d3199a1a460691c163442392022-06-22 19:40:492 days 11 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c24 HT
0xd65b71ca888787c3ba4863a5c376fda67ff4cea8ce5f2800ca3e6d0ae0a8003b163441852022-06-22 19:38:072 days 11 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c31 HT
0x475aa26e094545431b01c8fa7f09b4f0c66c539a8b73c1ae67bb5e5fa9bad70e163354332022-06-22 12:20:312 days 18 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c70.96 HT
0x068e06d9ec562fb80b66ea9d7c42784ae979a6844bba489365b5e318957a0d31163353692022-06-22 12:17:192 days 18 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c2.3 HT
0x794a5fcb2b6a68d433654901df0677456ac3b8c0d0c17adf3442b59556de1be3163352682022-06-22 12:12:162 days 18 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c3 HT
0xd66d52037b1a7e08a0e6e274962168b375e16c35cf81bd7812ac5be36a65b198163352642022-06-22 12:12:042 days 18 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c6 HT
0x49e52dbd87cad0e06a9ad5f75c98cfd28ddad8087a64e071309e5c93553bc1ba163346972022-06-22 11:43:432 days 19 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c5 HT
0x35a64dd37bde50d5ec86b133dac69ed3028be28d791127a5c6f2eb7b7fdae8ed163346922022-06-22 11:43:282 days 19 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c5 HT
0xa0b3521b2c5a9d51014a32c9d536a54c9ef3dcb5929a7818ed6db987303c8a76163346892022-06-22 11:43:192 days 19 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c5 HT
0x421c9977c9a028233dd716540c2a8f52f8182a21f5efedacff313e0633c6d021163272832022-06-22 5:33:013 days 1 hr ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c7 HT
0x50b7122e0735577caf7b038facccede3036d970ffd54bf29f96c7c97463d8c01163253122022-06-22 3:54:273 days 3 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c1.1 HT
0xdeec91f4bdc4b3f30838f05045d3aa44cb7673b7d76143d2df22ab0b3ef4cdba163133592022-06-21 17:56:473 days 13 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c4.01 HT
0x547f163ef8a709a50cb96c4564f84d20bdb98f6055e1ce12263632df2ad69cae163133472022-06-21 17:56:113 days 13 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c7.12 HT
0x9eaa8b37da4e1f5dbf2547781515e0d7ebea280f90f6ef8b5a436a81080abb9e163132252022-06-21 17:50:053 days 13 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c11 HT
0xf926ef77cdb386e5dacbcf73d0239f32bd2b382d017dd6ca4fd64cd46f64098a163112122022-06-21 16:09:263 days 14 hrs ago 0x0b416e5da1f68dd780683b5daef858b0a081c3640x09a28712208bf913b2e79eab446594c9fab2f37c0.5253 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TDEX

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2022-05-20
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.0 <0.9.0;

address constant constant_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

address constant constant_USDT = 0xa71EdC38d189767582C38A3145b5873052c3e47a;
// address constant constant_USDT = 0x881151D0074F439b6529A53969F949A441797974;
uint256 constant decimals_USDT = 18;

uint256 constant PDEC = 1e8;


abstract contract ERC20 {

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >=0 && b>=0, "SafeMath: Cannot have negative numbers");
        if (a <= b) return a;
        return b;
    }
}

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

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

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

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

struct Dish {
    uint256 price;
    uint256 number;
}

enum OrderType { Buy, Sell }
enum OrderStatus { None, Waiting, Finished, Cancelled }

struct Order {
    uint256 orderId;
    uint256 price;
    uint256 tokenTotal;
    uint256 tokenSurplus;
    uint256 tokenFee;
    uint256 usdtSurplus;
    uint256 usdtFee;
    uint256 createnTime;
    uint256 endTime;
    OrderType orderType;
    OrderStatus status;
    address sender;
}

struct Match {
    uint256 matchId;
    uint256 buyOrderId;
    uint256 sellOrderId;
    uint256 price;
    uint256 tokenDeal;
    uint256 usdtDeal;
    uint256 tokenFee;
    uint256 usdtFee;
    uint256 time;
}

interface OrderInterface {

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (Order memory);

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (Match memory);

    function getPrice(address _tokenContract) external view returns (uint256 price);

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId);

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId);

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint);

    function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory);

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory);

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint);

    function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory);

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256);

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256);

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory);

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory);

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint);

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint);

    function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory);

    function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory);
}

interface DexInterface {

    function createOrder(address _tokenContract, address _sender, uint256 _price, uint256 _token, uint256 _usdt, uint8 _type) external returns (uint256 _orderId);

    function removeOrder(address _tokenContract, uint256 _orderId, address _sender) external returns (bool _flag);

    function handleBuyMatchOrder(address _tokenContract, uint256 _orderId) external;

    function handleSellMatchOrder(address _tokenContract, uint256 _orderId) external;

    function orderManager() external view returns (address);

    function books() external view returns (address);

    function mining() external view returns (address);
}

struct Token {
    address tokenContract;
    string symbol;
    string name;
    uint decimals;
}

interface TokenInterface {

    function getToken(address _tokenContract) external view returns (Token memory token);

    function getTokenMapLength() external view returns (uint length);

    function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list);
}

interface __tdexDelegate {

    function __buy(address __tokenContract, address __sender) external;

    function __sell(address __tokenContract, address __sender) external;
}

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract TDEX {

    address private _owner;

    address private _dexInterface = address(0);

    address private _tokenManager = address(0);

    address private _delegate = address(0);

    constructor () {
        _owner = msg.sender;
    }

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

    function mining() external view returns (address)
    {
        return DexInterface(_dexInterface).mining();
    }

    function init(address __dexInterface, address ___tokenManager) external onlyOwner
    {
        require(_dexInterface == address(0), "Can only be assigned once");
        _dexInterface = __dexInterface;
        _tokenManager = ___tokenManager;
    }

    function setDelegate(address __delegate) external onlyOwner
    {
        _delegate = __delegate;
    }

    function getToken(address _tokenContract) external view returns (
        address tokenContract,
        string memory symbol,
        string memory name,
        uint decimals)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);

        tokenContract = token.tokenContract;
        symbol = token.symbol;
        name = token.name;
        decimals = token.decimals;
    }

    function getTokenAddressListLength() external view returns (uint length)
    {
        return TokenInterface(_tokenManager).getTokenMapLength();
    }

    function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list)
    {
        return TokenInterface(_tokenManager).getTokenAddressList(start, end);
    }

    /**********************************************************/

    function _buy(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__buy(_tokenContract, _sender);

        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC);

        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        TransferHelper.safeTransferFrom(constant_USDT, _sender, _dexInterface, _usdt_amount);

        uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 0);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleBuyMatchOrder(_tokenContract, orderId);
        }

        return orderId;
    }

    function Buy(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != constant_ETH, "Does not support ETH");
        return _buy(_tokenContract, _price, _token_amount, msg.sender);
    }

    function BuyETH(uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        return _buy(constant_ETH, _price, _token_amount, msg.sender);
    }

    function _sell(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256)
    {
        if (_delegate != address(0)) __tdexDelegate(_delegate).__sell(_tokenContract, _sender);

        require(_token_amount > 0, "The quantity cannot be 0");

        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");
        require(_price > 0, "No, no price");

        uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC);
        require(_usdt_amount <= 100000 * 10 ** decimals_USDT, "Maximum single transaction amount 100000 USDT");

        if (_tokenContract == constant_ETH)
        {
            TransferHelper.safeTransferETH(_dexInterface, _token_amount);
        }
        else
        {
            TransferHelper.safeTransferFrom(_tokenContract, _sender, _dexInterface, _token_amount);
        }

        uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 1);
        if (orderId > 0)
        {
            DexInterface(_dexInterface).handleSellMatchOrder(_tokenContract, orderId);
        }

        return orderId;
    }

    function Sell(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId)
    {
        require(_tokenContract != constant_ETH, "Does not support ETH");
        return _sell(_tokenContract, _price, _token_amount, msg.sender);
    }

    function SellETH(uint256 _price) external payable returns (uint256 orderId)
    {
        return _sell(constant_ETH, _price, msg.value, msg.sender);
    }

    function Cancel(address _tokenContract, uint256 _orderId) external returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, msg.sender);
    }

    function CancelRoot(address _tokenContract, uint256 _orderId, address _sender) external onlyOwner returns (bool)
    {
        Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract);
        require(token.decimals > 0, "This contract address is not supported");

        return DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, _sender);
    }

    /**********************************************************/

    function balanceOf(address _tokenContract, address _sender) external view returns (uint256)
    {
        uint256 balance;
        if (_tokenContract == constant_ETH)
        {
            balance = _sender.balance;
        }
        else
        {
            balance = IERC20(_tokenContract).balanceOf(_sender);
        }
        return balance;
    }

    function getOrderManager() internal view returns (OrderInterface)
    {
        return OrderInterface(DexInterface(_dexInterface).orderManager());
    }

    function getPrice(address _tokenContract) external view returns (uint256 price)
    {
        return getOrderManager().getPrice(_tokenContract);
    }

    function getLastMatchId(address _tokenContract) external view returns (uint256 matchId)
    {
        return getOrderManager().getLastMatchId(_tokenContract);
    }

    function getLastOrderId(address _tokenContract) external view returns (uint256 orderId)
    {
        return getOrderManager().getLastOrderId(_tokenContract);
    }

    function getOrder(address _tokenContract, uint256 _orderId) external view returns (
        uint256 price,
        uint256 tokenTotal,
        uint256 tokenSurplus,
        uint256 tokenFee,
        uint256 usdtSurplus,
        uint256 usdtFee,
        uint256 createnTime,
        uint256 endTime,
        uint8 orderType,
        uint8 status,
        address sender
    )
    {
        Order memory order = getOrderManager().getOrder(_tokenContract, _orderId);
        price = order.price;
        tokenTotal = order.tokenTotal;
        tokenSurplus = order.tokenSurplus;
        tokenFee = order.tokenFee;
        usdtSurplus = order.usdtSurplus;
        usdtFee = order.usdtFee;
        createnTime = order.createnTime;
        endTime = order.endTime;
        orderType = uint8(order.orderType);
        status = uint8(order.status);
        sender = order.sender;
    }

    function getMatch(address _tokenContract, uint256 _matchId) external view returns (
        uint256 matchId,
        uint256 buyOrderId,
        uint256 sellOrderId,
        uint256 price,
        uint256 tokenDeal,
        uint256 usdtDeal,
        uint256 tokenFee,
        uint256 usdtFee,
        uint256 time
    )
    {
        Match memory _match = getOrderManager().getMatch(_tokenContract, _matchId);

        matchId = _match.matchId;
        buyOrderId = _match.buyOrderId;
        sellOrderId = _match.sellOrderId;
        price = _match.price;
        tokenDeal = _match.tokenDeal;
        usdtDeal = _match.usdtDeal;
        tokenFee = _match.tokenFee;
        usdtFee = _match.usdtFee;
        time = _match.time;
    }

    function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return getOrderManager().getBuyOrderPriceListLength(_tokenContract);
    }

    function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceList(_tokenContract, start, end);
    }

    function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return getOrderManager().getBuyOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceListPublished(_tokenContract, count);
    }

    function getBuyOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list)
    {
        OrderInterface orderManager = getOrderManager();
        uint256[] memory priceList = orderManager.getBuyOrderPriceListPublished(_tokenContract, count);
        list = new Dish[](count);
        for (uint i=0; i<count; i++)
        {
            uint256 price = priceList[i];
            uint256 number = orderManager.getBuyOrderPriceTokenNumber(_tokenContract, price);
            list[i] = Dish(price, number);
        }
    }

    function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return getOrderManager().getBuyOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length)
    {
        return getOrderManager().getSellOrderPriceListLength(_tokenContract);
    }

    function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceList(_tokenContract, start, end);
    }

    function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number)
    {
        return getOrderManager().getSellOrderPriceTokenNumber(_tokenContract, _price);
    }

    function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceListPublished(_tokenContract, count);
    }

    function getSellOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list)
    {
        OrderInterface orderManager = getOrderManager();
        uint256[] memory priceList = orderManager.getSellOrderPriceListPublished(_tokenContract, count);
        list = new Dish[](count);
        for (uint i=0; i<count; i++)
        {
            uint256 price = priceList[i];
            uint256 number = orderManager.getSellOrderPriceTokenNumber(_tokenContract, price);
            list[i] = Dish(price, number);
        }
    }

    function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list)
    {
        return getOrderManager().getSellOrderPriceOrderIdList(_tokenContract, _price);
    }

    function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList)
    {
        return getOrderManager().getOrderMatching(_tokenContract, _orderId);
    }

    function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return getOrderManager().getOrderUnmatchedListLength(_tokenContract, _sender);
    }

    function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length)
    {
        return getOrderManager().getOrderFinishedListLength(_tokenContract, _sender);
    }

    function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getOrderUnmatchedList(_tokenContract, _sender, start, end);
    }

    function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list)
    {
        return getOrderManager().getOrderFinishedList(_tokenContract, _sender, start, end);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Buy","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"BuyETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"Cancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"CancelRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Sell","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"SellETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getBuyOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastMatchId","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastOrderId","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_matchId","type":"uint256"}],"name":"getMatch","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint256","name":"buyOrderId","type":"uint256"},{"internalType":"uint256","name":"sellOrderId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenDeal","type":"uint256"},{"internalType":"uint256","name":"usdtDeal","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrder","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenTotal","type":"uint256"},{"internalType":"uint256","name":"tokenSurplus","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtSurplus","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"createnTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"orderType","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderFinishedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderFinishedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrderMatching","outputs":[{"internalType":"uint256[]","name":"matchingList","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderUnmatchedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderUnmatchedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getSellOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getToken","outputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getTokenAddressList","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddressListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__dexInterface","type":"address"},{"internalType":"address","name":"___tokenManager","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100d657600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e22806101266000396000f3fe6080604052600436106102045760003560e01c80637017689611610118578063e3dddfc8116100a0578063f09a40161161006f578063f09a401614610911578063f248d4bb1461093a578063f3da8edf14610977578063f7888aec146109b4578063f79fde67146109f157610204565b8063e3dddfc814610813578063e501d5f414610850578063ed7a144f1461088d578063edb25841146108ca57610204565b8063b424bd83116100e7578063b424bd83146106f6578063bdda1d1a14610733578063c27b6f2914610770578063ca5eb5e1146107ad578063d4de8ad2146107d657610204565b8063701768961461060f57806394f27d081461063f57806395265e6c1461067c5780639fd95a42146106b957610204565b806341976e091161019b578063594251341161016a57806359425134146104ed578063597704381461052a5780635d4e94071461056a5780635f8e651e146105a7578063662fac39146105e457610204565b806341976e09146103f157806347c3b77d1461042e5780634f9f21f91461046b57806350ab3871146104a857610204565b8063161b71fa116101d7578063161b71fa146102fd5780631cbc5ab11461033a5780631f69ae121461037757806327f83af9146103b457610204565b80630479569f1461020957806305a7b04114610246578063083c6351146102835780630afbe873146102c0575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613346565b610a1c565b60405161023d9190613473565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613495565b610c00565b60405161027a91906134d1565b60405180910390f35b34801561028f57600080fd5b506102aa60048036038101906102a59190613495565b610c8a565b6040516102b791906134d1565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e291906134ec565b610d14565b6040516102f4919061355a565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613346565b610f3c565b6040516103319190613624565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613646565b610fce565b60405161036e91906134d1565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613699565b611067565b6040516103ab9190613797565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190613346565b611114565b6040516103e8919061355a565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190613495565b6112ac565b60405161042591906134d1565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190613646565b611336565b6040516104629190613624565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190613646565b6113cb565b60405161049f9190613624565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613346565b611460565b6040516104e4999897969594939291906137b9565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613495565b611543565b60405161052191906134d1565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613495565b6115cd565b60405161056194939291906138ee565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613346565b61169c565b60405161059e9190613473565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190613941565b611880565b6040516105db91906134d1565b60405180910390f35b3480156105f057600080fd5b506105f961190d565b6040516106069190613981565b60405180910390f35b6106296004803603810190610624919061399c565b6119a5565b60405161063691906134d1565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613346565b6119ce565b6040516106739190613624565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613346565b611a60565b6040516106b091906134d1565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190613346565b611aed565b6040516106ed9190613624565b60405180910390f35b34801561070257600080fd5b5061071d60048036038101906107189190613495565b611b7f565b60405161072a91906134d1565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613346565b611c09565b6040516107679190613624565b60405180910390f35b34801561077c57600080fd5b5061079760048036038101906107929190613941565b611c9b565b6040516107a491906134d1565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf9190613495565b611d28565b005b3480156107e257600080fd5b506107fd60048036038101906107f89190613346565b611dfa565b60405161080a9190613624565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906139c9565b611e8c565b6040516108479190613624565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613346565b611f24565b60405161088491906134d1565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613646565b611fb1565b6040516108c191906134d1565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec9190613346565b61204a565b6040516109089b9a99989796959493929190613a4c565b60405180910390f35b34801561091d57600080fd5b5061093860048036038101906109339190613941565b612168565b005b34801561094657600080fd5b50610961600480360381019061095c91906139c9565b61230d565b60405161096e9190613624565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190613699565b6123a5565b6040516109ab91906134d1565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190613941565b6123cf565b6040516109e891906134d1565b60405180910390f35b3480156109fd57600080fd5b50610a066124bf565b604051610a1391906134d1565b60405180910390f35b60606000610a28612557565b905060008173ffffffffffffffffffffffffffffffffffffffff16639fd95a4286866040518363ffffffff1660e01b8152600401610a67929190613af7565b600060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610aad9190613c7d565b90508367ffffffffffffffff811115610ac957610ac8613b25565b5b604051908082528060200260200182016040528015610b0257816020015b610aef613284565b815260200190600190039081610ae75790505b50925060005b84811015610bf7576000828281518110610b2557610b24613cc6565b5b6020026020010151905060008473ffffffffffffffffffffffffffffffffffffffff1663e501d5f489846040518363ffffffff1660e01b8152600401610b6c929190613af7565b602060405180830381865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190613cf5565b9050604051806040016040528083815260200182815250868481518110610bd757610bd6613cc6565b5b602002602001018190525050508080610bef90613d51565b915050610b08565b50505092915050565b6000610c0a612557565b73ffffffffffffffffffffffffffffffffffffffff166305a7b041836040518263ffffffff1660e01b8152600401610c429190613981565b602060405180830381865afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c839190613cf5565b9050919050565b6000610c94612557565b73ffffffffffffffffffffffffffffffffffffffff1663083c6351836040518263ffffffff1660e01b8152600401610ccc9190613981565b602060405180830381865afa158015610ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0d9190613cf5565b9050919050565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613de5565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438866040518263ffffffff1660e01b8152600401610e019190613981565b600060405180830381865afa158015610e1e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e479190613f7a565b90506000816060015111610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790614035565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8686866040518463ffffffff1660e01b8152600401610eef93929190614055565b6020604051808303816000875af1158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3291906140b8565b9150509392505050565b6060610f46612557565b73ffffffffffffffffffffffffffffffffffffffff1663161b71fa84846040518363ffffffff1660e01b8152600401610f80929190613af7565b600060405180830381865afa158015610f9d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610fc69190613c7d565b905092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104990614131565b60405180910390fd5b61105e848484336125ef565b90509392505050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f69ae1284846040518363ffffffff1660e01b81526004016110c6929190614151565b600060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061110c919061423d565b905092915050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438856040518263ffffffff1660e01b81526004016111729190613981565b600060405180830381865afa15801561118f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906111b89190613f7a565b90506000816060015111611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f890614035565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a72b3fc8585336040518463ffffffff1660e01b815260040161126093929190614055565b6020604051808303816000875af115801561127f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a391906140b8565b91505092915050565b60006112b6612557565b73ffffffffffffffffffffffffffffffffffffffff166341976e09836040518263ffffffff1660e01b81526004016112ee9190613981565b602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190613cf5565b9050919050565b6060611340612557565b73ffffffffffffffffffffffffffffffffffffffff166347c3b77d8585856040518463ffffffff1660e01b815260040161137c93929190614286565b600060405180830381865afa158015611399573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113c29190613c7d565b90509392505050565b60606113d5612557565b73ffffffffffffffffffffffffffffffffffffffff16634f9f21f98585856040518463ffffffff1660e01b815260040161141193929190614286565b600060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114579190613c7d565b90509392505050565b600080600080600080600080600080611477612557565b73ffffffffffffffffffffffffffffffffffffffff166350ab38718d8d6040518363ffffffff1660e01b81526004016114b1929190613af7565b61012060405180830381865afa1580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f3919061439d565b905080600001519950806020015198508060400151975080606001519650806080015195508060a0015194508060c0015193508060e0015192508061010001519150509295985092959850929598565b600061154d612557565b73ffffffffffffffffffffffffffffffffffffffff166359425134836040518263ffffffff1660e01b81526004016115859190613981565b602060405180830381865afa1580156115a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c69190613cf5565b9050919050565b6000606080600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438876040518263ffffffff1660e01b81526004016116309190613981565b600060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116769190613f7a565b905080600001519450806020015193508060400151925080606001519150509193509193565b606060006116a8612557565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d4de8ad286866040518363ffffffff1660e01b81526004016116e7929190613af7565b600060405180830381865afa158015611704573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061172d9190613c7d565b90508367ffffffffffffffff81111561174957611748613b25565b5b60405190808252806020026020018201604052801561178257816020015b61176f613284565b8152602001906001900390816117675790505b50925060005b848110156118775760008282815181106117a5576117a4613cc6565b5b6020026020010151905060008473ffffffffffffffffffffffffffffffffffffffff166395265e6c89846040518363ffffffff1660e01b81526004016117ec929190613af7565b602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d9190613cf5565b905060405180604001604052808381526020018281525086848151811061185757611856613cc6565b5b60200260200101819052505050808061186f90613d51565b915050611788565b50505092915050565b600061188a612557565b73ffffffffffffffffffffffffffffffffffffffff16635f8e651e84846040518363ffffffff1660e01b81526004016118c49291906143cb565b602060405180830381865afa1580156118e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119059190613cf5565b905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663662fac396040518163ffffffff1660e01b8152600401602060405180830381865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a091906143f4565b905090565b60006119c773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee833433612a57565b9050919050565b60606119d8612557565b73ffffffffffffffffffffffffffffffffffffffff166394f27d0884846040518363ffffffff1660e01b8152600401611a12929190613af7565b600060405180830381865afa158015611a2f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a589190613c7d565b905092915050565b6000611a6a612557565b73ffffffffffffffffffffffffffffffffffffffff166395265e6c84846040518363ffffffff1660e01b8152600401611aa4929190613af7565b602060405180830381865afa158015611ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae59190613cf5565b905092915050565b6060611af7612557565b73ffffffffffffffffffffffffffffffffffffffff16639fd95a4284846040518363ffffffff1660e01b8152600401611b31929190613af7565b600060405180830381865afa158015611b4e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b779190613c7d565b905092915050565b6000611b89612557565b73ffffffffffffffffffffffffffffffffffffffff1663b424bd83836040518263ffffffff1660e01b8152600401611bc19190613981565b602060405180830381865afa158015611bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c029190613cf5565b9050919050565b6060611c13612557565b73ffffffffffffffffffffffffffffffffffffffff1663bdda1d1a84846040518363ffffffff1660e01b8152600401611c4d929190613af7565b600060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c939190613c7d565b905092915050565b6000611ca5612557565b73ffffffffffffffffffffffffffffffffffffffff1663c27b6f2984846040518363ffffffff1660e01b8152600401611cdf9291906143cb565b602060405180830381865afa158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190613cf5565b905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613de5565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060611e04612557565b73ffffffffffffffffffffffffffffffffffffffff1663d4de8ad284846040518363ffffffff1660e01b8152600401611e3e929190613af7565b600060405180830381865afa158015611e5b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611e849190613c7d565b905092915050565b6060611e96612557565b73ffffffffffffffffffffffffffffffffffffffff1663e3dddfc8868686866040518563ffffffff1660e01b8152600401611ed49493929190614421565b600060405180830381865afa158015611ef1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611f1a9190613c7d565b9050949350505050565b6000611f2e612557565b73ffffffffffffffffffffffffffffffffffffffff1663e501d5f484846040518363ffffffff1660e01b8152600401611f68929190613af7565b602060405180830381865afa158015611f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa99190613cf5565b905092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614131565b60405180910390fd5b61204184848433612a57565b90509392505050565b600080600080600080600080600080600080612064612557565b73ffffffffffffffffffffffffffffffffffffffff1663edb258418f8f6040518363ffffffff1660e01b815260040161209e929190613af7565b61018060405180830381865afa1580156120bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e091906145d2565b905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e0015195508061010001519450806101200151600181111561213357612132614600565b5b9350806101400151600381111561214d5761214c614600565b5b92508061016001519150509295989b509295989b9093969950565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90613de5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e9061467b565b60405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6060612317612557565b73ffffffffffffffffffffffffffffffffffffffff1663f248d4bb868686866040518563ffffffff1660e01b81526004016123559493929190614421565b600060405180830381865afa158015612372573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061239b9190613c7d565b9050949350505050565b60006123c773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8484336125ef565b905092915050565b60008073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612438578273ffffffffffffffffffffffffffffffffffffffff163190506124b5565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016124719190613981565b602060405180830381865afa15801561248e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b29190613cf5565b90505b8091505092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0e06b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125529190613cf5565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9b6117f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ea91906143f4565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d67300286846040518363ffffffff1660e01b81526004016126a39291906143cb565b600060405180830381600087803b1580156126bd57600080fd5b505af11580156126d1573d6000803e3d6000fd5b505050505b60008311612719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612710906146e7565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438876040518263ffffffff1660e01b81526004016127769190613981565b600060405180830381865afa158015612793573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906127bc9190613f7a565b90506000816060015111612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fc90614035565b60405180910390fd5b60008511612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f90614753565b60405180910390fd5b60006128616128578688612f24565b6305f5e100612f9e565b90506012600a61287191906148a6565b620186a061287f91906148f1565b8111156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906149bd565b60405180910390fd5b61290373a71edc38d189767582c38a3145b5873052c3e47a85600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612fe8565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166336aa45f289878a8a8760006040518763ffffffff1660e01b815260040161296b96959493929190614a22565b6020604051808303816000875af115801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae9190613cf5565b90506000811115612a4957600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663632cceb989836040518363ffffffff1660e01b8152600401612a16929190613af7565b600060405180830381600087803b158015612a3057600080fd5b505af1158015612a44573d6000803e3d6000fd5b505050505b809350505050949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b3e57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f46dc94786846040518363ffffffff1660e01b8152600401612b0b9291906143cb565b600060405180830381600087803b158015612b2557600080fd5b505af1158015612b39573d6000803e3d6000fd5b505050505b60008311612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b78906146e7565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359770438876040518263ffffffff1660e01b8152600401612bde9190613981565b600060405180830381865afa158015612bfb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612c249190613f7a565b90506000816060015111612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6490614035565b60405180910390fd5b60008511612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790614753565b60405180910390fd5b6000612cc9612cbf8688612f24565b6305f5e100612f9e565b90506012600a612cd991906148a6565b620186a0612ce791906148f1565b811115612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906149bd565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612da157612d9c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613121565b612dd0565b612dcf8785600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688612fe8565b5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166336aa45f289878a8a8760016040518763ffffffff1660e01b8152600401612e3896959493929190614abe565b6020604051808303816000875af1158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190613cf5565b90506000811115612f1657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c20f5ead89836040518363ffffffff1660e01b8152600401612ee3929190613af7565b600060405180830381600087803b158015612efd57600080fd5b505af1158015612f11573d6000803e3d6000fd5b505050505b809350505050949350505050565b6000808303612f365760009050612f98565b60008284612f4491906148f1565b9050828482612f539190614b4e565b14612f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8a90614bf1565b60405180910390fd5b809150505b92915050565b6000612fe083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613221565b905092915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161301c93929190614c11565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161306a9190614c8f565b6000604051808303816000865af19150503d80600081146130a7576040519150601f19603f3d011682016040523d82523d6000602084013e6130ac565b606091505b50915091508180156130da57506000815114806130d95750808060200190518101906130d891906140b8565b5b5b613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311090614d18565b60405180910390fd5b505050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561315657613155613b25565b5b6040519080825280601f01601f1916602001820160405280156131885781602001600182028036833780820191505090505b506040516131969190614c8f565b60006040518083038185875af1925050503d80600081146131d3576040519150601f19603f3d011682016040523d82523d6000602084013e6131d8565b606091505b505090508061321c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321390614daa565b60405180910390fd5b505050565b60008083118290613268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325f9190614dca565b60405180910390fd5b50600083856132779190614b4e565b9050809150509392505050565b604051806040016040528060008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132dd826132b2565b9050919050565b6132ed816132d2565b81146132f857600080fd5b50565b60008135905061330a816132e4565b92915050565b6000819050919050565b61332381613310565b811461332e57600080fd5b50565b6000813590506133408161331a565b92915050565b6000806040838503121561335d5761335c6132a8565b5b600061336b858286016132fb565b925050602061337c85828601613331565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133bb81613310565b82525050565b6040820160008201516133d760008501826133b2565b5060208201516133ea60208501826133b2565b50505050565b60006133fc83836133c1565b60408301905092915050565b6000602082019050919050565b600061342082613386565b61342a8185613391565b9350613435836133a2565b8060005b8381101561346657815161344d88826133f0565b975061345883613408565b925050600181019050613439565b5085935050505092915050565b6000602082019050818103600083015261348d8184613415565b905092915050565b6000602082840312156134ab576134aa6132a8565b5b60006134b9848285016132fb565b91505092915050565b6134cb81613310565b82525050565b60006020820190506134e660008301846134c2565b92915050565b600080600060608486031215613505576135046132a8565b5b6000613513868287016132fb565b935050602061352486828701613331565b9250506040613535868287016132fb565b9150509250925092565b60008115159050919050565b6135548161353f565b82525050565b600060208201905061356f600083018461354b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006135ad83836133b2565b60208301905092915050565b6000602082019050919050565b60006135d182613575565b6135db8185613580565b93506135e683613591565b8060005b838110156136175781516135fe88826135a1565b9750613609836135b9565b9250506001810190506135ea565b5085935050505092915050565b6000602082019050818103600083015261363e81846135c6565b905092915050565b60008060006060848603121561365f5761365e6132a8565b5b600061366d868287016132fb565b935050602061367e86828701613331565b925050604061368f86828701613331565b9150509250925092565b600080604083850312156136b0576136af6132a8565b5b60006136be85828601613331565b92505060206136cf85828601613331565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61370e816132d2565b82525050565b60006137208383613705565b60208301905092915050565b6000602082019050919050565b6000613744826136d9565b61374e81856136e4565b9350613759836136f5565b8060005b8381101561378a5781516137718882613714565b975061377c8361372c565b92505060018101905061375d565b5085935050505092915050565b600060208201905081810360008301526137b18184613739565b905092915050565b6000610120820190506137cf600083018c6134c2565b6137dc602083018b6134c2565b6137e9604083018a6134c2565b6137f660608301896134c2565b61380360808301886134c2565b61381060a08301876134c2565b61381d60c08301866134c2565b61382a60e08301856134c2565b6138386101008301846134c2565b9a9950505050505050505050565b61384f816132d2565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561388f578082015181840152602081019050613874565b8381111561389e576000848401525b50505050565b6000601f19601f8301169050919050565b60006138c082613855565b6138ca8185613860565b93506138da818560208601613871565b6138e3816138a4565b840191505092915050565b60006080820190506139036000830187613846565b818103602083015261391581866138b5565b9050818103604083015261392981856138b5565b905061393860608301846134c2565b95945050505050565b60008060408385031215613958576139576132a8565b5b6000613966858286016132fb565b9250506020613977858286016132fb565b9150509250929050565b60006020820190506139966000830184613846565b92915050565b6000602082840312156139b2576139b16132a8565b5b60006139c084828501613331565b91505092915050565b600080600080608085870312156139e3576139e26132a8565b5b60006139f1878288016132fb565b9450506020613a02878288016132fb565b9350506040613a1387828801613331565b9250506060613a2487828801613331565b91505092959194509250565b600060ff82169050919050565b613a4681613a30565b82525050565b600061016082019050613a62600083018e6134c2565b613a6f602083018d6134c2565b613a7c604083018c6134c2565b613a89606083018b6134c2565b613a96608083018a6134c2565b613aa360a08301896134c2565b613ab060c08301886134c2565b613abd60e08301876134c2565b613acb610100830186613a3d565b613ad9610120830185613a3d565b613ae7610140830184613846565b9c9b505050505050505050505050565b6000604082019050613b0c6000830185613846565b613b1960208301846134c2565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b5d826138a4565b810181811067ffffffffffffffff82111715613b7c57613b7b613b25565b5b80604052505050565b6000613b8f61329e565b9050613b9b8282613b54565b919050565b600067ffffffffffffffff821115613bbb57613bba613b25565b5b602082029050602081019050919050565b600080fd5b600081519050613be08161331a565b92915050565b6000613bf9613bf484613ba0565b613b85565b90508083825260208201905060208402830185811115613c1c57613c1b613bcc565b5b835b81811015613c455780613c318882613bd1565b845260208401935050602081019050613c1e565b5050509392505050565b600082601f830112613c6457613c63613b20565b5b8151613c74848260208601613be6565b91505092915050565b600060208284031215613c9357613c926132a8565b5b600082015167ffffffffffffffff811115613cb157613cb06132ad565b5b613cbd84828501613c4f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613d0b57613d0a6132a8565b5b6000613d1984828501613bd1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d5c82613310565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d8e57613d8d613d22565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dcf602083613860565b9150613dda82613d99565b602082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b600080fd5b600080fd5b600081519050613e1e816132e4565b92915050565b600080fd5b600067ffffffffffffffff821115613e4457613e43613b25565b5b613e4d826138a4565b9050602081019050919050565b6000613e6d613e6884613e29565b613b85565b905082815260208101848484011115613e8957613e88613e24565b5b613e94848285613871565b509392505050565b600082601f830112613eb157613eb0613b20565b5b8151613ec1848260208601613e5a565b91505092915050565b600060808284031215613ee057613edf613e05565b5b613eea6080613b85565b90506000613efa84828501613e0f565b600083015250602082015167ffffffffffffffff811115613f1e57613f1d613e0a565b5b613f2a84828501613e9c565b602083015250604082015167ffffffffffffffff811115613f4e57613f4d613e0a565b5b613f5a84828501613e9c565b6040830152506060613f6e84828501613bd1565b60608301525092915050565b600060208284031215613f9057613f8f6132a8565b5b600082015167ffffffffffffffff811115613fae57613fad6132ad565b5b613fba84828501613eca565b91505092915050565b7f5468697320636f6e74726163742061646472657373206973206e6f742073757060008201527f706f727465640000000000000000000000000000000000000000000000000000602082015250565b600061401f602683613860565b915061402a82613fc3565b604082019050919050565b6000602082019050818103600083015261404e81614012565b9050919050565b600060608201905061406a6000830186613846565b61407760208301856134c2565b6140846040830184613846565b949350505050565b6140958161353f565b81146140a057600080fd5b50565b6000815190506140b28161408c565b92915050565b6000602082840312156140ce576140cd6132a8565b5b60006140dc848285016140a3565b91505092915050565b7f446f6573206e6f7420737570706f727420455448000000000000000000000000600082015250565b600061411b601483613860565b9150614126826140e5565b602082019050919050565b6000602082019050818103600083015261414a8161410e565b9050919050565b600060408201905061416660008301856134c2565b61417360208301846134c2565b9392505050565b600067ffffffffffffffff82111561419557614194613b25565b5b602082029050602081019050919050565b60006141b96141b48461417a565b613b85565b905080838252602082019050602084028301858111156141dc576141db613bcc565b5b835b8181101561420557806141f18882613e0f565b8452602084019350506020810190506141de565b5050509392505050565b600082601f83011261422457614223613b20565b5b81516142348482602086016141a6565b91505092915050565b600060208284031215614253576142526132a8565b5b600082015167ffffffffffffffff811115614271576142706132ad565b5b61427d8482850161420f565b91505092915050565b600060608201905061429b6000830186613846565b6142a860208301856134c2565b6142b560408301846134c2565b949350505050565b600061012082840312156142d4576142d3613e05565b5b6142df610120613b85565b905060006142ef84828501613bd1565b600083015250602061430384828501613bd1565b602083015250604061431784828501613bd1565b604083015250606061432b84828501613bd1565b606083015250608061433f84828501613bd1565b60808301525060a061435384828501613bd1565b60a08301525060c061436784828501613bd1565b60c08301525060e061437b84828501613bd1565b60e08301525061010061439084828501613bd1565b6101008301525092915050565b600061012082840312156143b4576143b36132a8565b5b60006143c2848285016142bd565b91505092915050565b60006040820190506143e06000830185613846565b6143ed6020830184613846565b9392505050565b60006020828403121561440a576144096132a8565b5b600061441884828501613e0f565b91505092915050565b60006080820190506144366000830187613846565b6144436020830186613846565b61445060408301856134c2565b61445d60608301846134c2565b95945050505050565b6002811061447357600080fd5b50565b60008151905061448581614466565b92915050565b6004811061449857600080fd5b50565b6000815190506144aa8161448b565b92915050565b600061018082840312156144c7576144c6613e05565b5b6144d2610180613b85565b905060006144e284828501613bd1565b60008301525060206144f684828501613bd1565b602083015250604061450a84828501613bd1565b604083015250606061451e84828501613bd1565b606083015250608061453284828501613bd1565b60808301525060a061454684828501613bd1565b60a08301525060c061455a84828501613bd1565b60c08301525060e061456e84828501613bd1565b60e08301525061010061458384828501613bd1565b6101008301525061012061459984828501614476565b610120830152506101406145af8482850161449b565b610140830152506101606145c584828501613e0f565b6101608301525092915050565b600061018082840312156145e9576145e86132a8565b5b60006145f7848285016144b0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f43616e206f6e6c792062652061737369676e6564206f6e636500000000000000600082015250565b6000614665601983613860565b91506146708261462f565b602082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f546865207175616e746974792063616e6e6f7420626520300000000000000000600082015250565b60006146d1601883613860565b91506146dc8261469b565b602082019050919050565b60006020820190508181036000830152614700816146c4565b9050919050565b7f4e6f2c206e6f2070726963650000000000000000000000000000000000000000600082015250565b600061473d600c83613860565b915061474882614707565b602082019050919050565b6000602082019050818103600083015261476c81614730565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156147ca578086048111156147a6576147a5613d22565b5b60018516156147b55780820291505b80810290506147c385614773565b945061478a565b94509492505050565b6000826147e3576001905061489f565b816147f1576000905061489f565b8160018114614807576002811461481157614840565b600191505061489f565b60ff84111561482357614822613d22565b5b8360020a91508482111561483a57614839613d22565b5b5061489f565b5060208310610133831016604e8410600b84101617156148755782820a9050838111156148705761486f613d22565b5b61489f565b6148828484846001614780565b9250905081840481111561489957614898613d22565b5b81810290505b9392505050565b60006148b182613310565b91506148bc83613310565b92506148e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846147d3565b905092915050565b60006148fc82613310565b915061490783613310565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149405761493f613d22565b5b828202905092915050565b7f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60008201527f7420313030303030205553445400000000000000000000000000000000000000602082015250565b60006149a7602d83613860565b91506149b28261494b565b604082019050919050565b600060208201905081810360008301526149d68161499a565b9050919050565b6000819050919050565b6000819050919050565b6000614a0c614a07614a02846149dd565b6149e7565b613a30565b9050919050565b614a1c816149f1565b82525050565b600060c082019050614a376000830189613846565b614a446020830188613846565b614a5160408301876134c2565b614a5e60608301866134c2565b614a6b60808301856134c2565b614a7860a0830184614a13565b979650505050505050565b6000819050919050565b6000614aa8614aa3614a9e84614a83565b6149e7565b613a30565b9050919050565b614ab881614a8d565b82525050565b600060c082019050614ad36000830189613846565b614ae06020830188613846565b614aed60408301876134c2565b614afa60608301866134c2565b614b0760808301856134c2565b614b1460a0830184614aaf565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b5982613310565b9150614b6483613310565b925082614b7457614b73614b1f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bdb602183613860565b9150614be682614b7f565b604082019050919050565b60006020820190508181036000830152614c0a81614bce565b9050919050565b6000606082019050614c266000830186613846565b614c336020830185613846565b614c4060408301846134c2565b949350505050565b600081519050919050565b600081905092915050565b6000614c6982614c48565b614c738185614c53565b9350614c83818560208601613871565b80840191505092915050565b6000614c9b8284614c5e565b915081905092915050565b7f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160008201527f494c454400000000000000000000000000000000000000000000000000000000602082015250565b6000614d02602483613860565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b6000614d94602383613860565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b60006020820190508181036000830152614de481846138b5565b90509291505056fea26469706673582212209971cbbe008034615743dd06e69b7c572a6c42779b9f8bdfc3ba67ceffec946f64736f6c634300080d0033

Deployed ByteCode Sourcemap

11776:13194:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21293:562;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18386:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22094:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17227:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21863:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14650:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13260:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16861:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18225:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22291:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20606:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19646:757;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20411:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12666:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22984:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24011:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12165:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16696:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23557:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22526:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21063:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18561:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23790:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12552:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22752:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24716:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20839:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16415:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18736:902;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12290:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24455:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14929:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17689:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13099:153;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21293:562;21382:18;21418:27;21448:17;:15;:17::i;:::-;21418:47;;21476:26;21505:12;:42;;;21548:14;21564:5;21505:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21476:94;;21599:5;21588:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21581:24;;21621:6;21616:232;21633:5;21631:1;:7;21616:232;;;21669:13;21685:9;21695:1;21685:12;;;;;;;;:::i;:::-;;;;;;;;21669:28;;21712:14;21729:12;:40;;;21770:14;21786:5;21729:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21712:80;;21817:19;;;;;;;;21822:5;21817:19;;;;21829:6;21817:19;;;21807:4;21812:1;21807:7;;;;;;;;:::i;:::-;;;;;;;:29;;;;21654:194;;21640:3;;;;;:::i;:::-;;;;21616:232;;;;21407:448;;21293:562;;;;:::o;18386:167::-;18457:15;18497:17;:15;:17::i;:::-;:32;;;18530:14;18497:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18490:55;;18386:167;;;:::o;22094:189::-;22178:11;22214:17;:15;:17::i;:::-;:45;;;22260:14;22214:61;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22207:68;;22094:189;;;:::o;17227:386::-;17334:4;12090:10;12080:20;;:6;;;;;;;;;;:20;;;12072:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17356:18:::1;17392:13;;;;;;;;;;;17377:38;;;17416:14;17377:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17356:75;;17467:1;17450:5;:14;;;:18;17442:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;17544:13;;;;;;;;;;;17531:39;;;17571:14;17587:8;17597:7;17531:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17524:81;;;17227:386:::0;;;;;:::o;21863:223::-;21963:21;22009:17;:15;:17::i;:::-;:45;;;22055:14;22071:6;22009:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22002:76;;21863:223;;;;:::o;14650:271::-;14744:15;106:42;14785:30;;:14;:30;;;14777:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14858:55;14863:14;14879:6;14887:13;14902:10;14858:4;:55::i;:::-;14851:62;;14650:271;;;;;:::o;13260:195::-;13340:21;13401:13;;;;;;;;;;;13386:49;;;13436:5;13443:3;13386:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13379:68;;13260:195;;;;:::o;16861:358::-;16937:4;16959:18;16995:13;;;;;;;;;;;16980:38;;;17019:14;16980:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16959:75;;17070:1;17053:5;:14;;;:18;17045:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;17147:13;;;;;;;;;;;17134:39;;;17174:14;17190:8;17200:10;17134:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17127:84;;;16861:358;;;;:::o;18225:153::-;18290:13;18328:17;:15;:17::i;:::-;:26;;;18355:14;18328:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18321:49;;18225:153;;;:::o;22291:227::-;22397:21;22443:17;:15;:17::i;:::-;:39;;;22483:14;22499:5;22506:3;22443:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22436:74;;22291:227;;;;;:::o;20606:225::-;20711:21;20757:17;:15;:17::i;:::-;:38;;;20796:14;20812:5;20819:3;20757:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20750:73;;20606:225;;;;;:::o;19646:757::-;19739:15;19765:18;19794:19;19824:13;19848:17;19876:16;19903;19930:15;19956:12;19992:19;20014:17;:15;:17::i;:::-;:26;;;20041:14;20057:8;20014:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19992:74;;20089:6;:14;;;20079:24;;20127:6;:17;;;20114:30;;20169:6;:18;;;20155:32;;20206:6;:12;;;20198:20;;20241:6;:16;;;20229:28;;20279:6;:15;;;20268:26;;20316:6;:15;;;20305:26;;20352:6;:14;;;20342:24;;20384:6;:11;;;20377:18;;19981:422;19646:757;;;;;;;;;;;:::o;20411:187::-;20494:11;20530:17;:15;:17::i;:::-;:44;;;20575:14;20530:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20523:67;;20411:187;;;:::o;12666:425::-;12741:21;12773:20;12804:18;12833:13;12864:18;12900:13;;;;;;;;;;;12885:38;;;12924:14;12885:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12864:75;;12968:5;:19;;;12952:35;;13007:5;:12;;;12998:21;;13037:5;:10;;;13030:17;;13069:5;:14;;;13058:25;;12853:238;12666:425;;;;;:::o;22984:565::-;23074:18;23110:27;23140:17;:15;:17::i;:::-;23110:47;;23168:26;23197:12;:43;;;23241:14;23257:5;23197:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23168:95;;23292:5;23281:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23274:24;;23314:6;23309:233;23326:5;23324:1;:7;23309:233;;;23362:13;23378:9;23388:1;23378:12;;;;;;;;:::i;:::-;;;;;;;;23362:28;;23405:14;23422:12;:41;;;23464:14;23480:5;23422:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23405:81;;23511:19;;;;;;;;23516:5;23511:19;;;;23523:6;23511:19;;;23501:4;23506:1;23501:7;;;;;;;;:::i;:::-;;;;;;;:29;;;;23347:195;;23333:3;;;;;:::i;:::-;;;;23309:233;;;;23099:450;;22984:565;;;;:::o;24011:215::-;24112:11;24148:17;:15;:17::i;:::-;:45;;;24194:14;24210:7;24148:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24141:77;;24011:215;;;;:::o;12165:117::-;12206:7;12251:13;;;;;;;;;;;12238:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12231:43;;12165:117;:::o;16696:157::-;16755:15;16795:50;106:42;16815:6;16823:9;16834:10;16795:5;:50::i;:::-;16788:57;;16696:157;;;:::o;23557:225::-;23658:21;23704:17;:15;:17::i;:::-;:46;;;23751:14;23767:6;23704:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23697:77;;23557:225;;;;:::o;22526:218::-;22627:14;22666:17;:15;:17::i;:::-;:46;;;22713:14;22729:6;22666:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22659:77;;22526:218;;;;:::o;21063:222::-;21161:21;21207:17;:15;:17::i;:::-;:47;;;21255:14;21271:5;21207:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21200:77;;21063:222;;;;:::o;18561:167::-;18632:15;18672:17;:15;:17::i;:::-;:32;;;18705:14;18672:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18665:55;;18561:167;;;:::o;23790:213::-;23881:29;23935:17;:15;:17::i;:::-;:34;;;23970:14;23986:8;23935:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23928:67;;23790:213;;;;:::o;24234:::-;24334:11;24370:17;:15;:17::i;:::-;:44;;;24415:14;24431:7;24370:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24363:76;;24234:213;;;;:::o;12552:106::-;12090:10;12080:20;;:6;;;;;;;;;;:20;;;12072:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12640:10:::1;12628:9;;:22;;;;;;;;;;;;;;;;;;12552:106:::0;:::o;22752:224::-;22851:21;22897:17;:15;:17::i;:::-;:48;;;22946:14;22962:5;22897:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22890:78;;22752:224;;;;:::o;24716:251::-;24838:21;24884:17;:15;:17::i;:::-;:38;;;24923:14;24939:7;24948:5;24955:3;24884:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24877:82;;24716:251;;;;;;:::o;20839:216::-;20939:14;20978:17;:15;:17::i;:::-;:45;;;21024:14;21040:6;20978:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20971:76;;20839:216;;;;:::o;16415:273::-;16510:15;106:42;16551:30;;:14;:30;;;16543:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16624:56;16630:14;16646:6;16654:13;16669:10;16624:5;:56::i;:::-;16617:63;;16415:273;;;;;:::o;18736:902::-;18829:13;18853:18;18882:20;18913:16;18940:19;18970:15;18996:19;19026:15;19052;19078:12;19101:14;19139:18;19160:17;:15;:17::i;:::-;:26;;;19187:14;19203:8;19160:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19139:73;;19231:5;:11;;;19223:19;;19266:5;:16;;;19253:29;;19308:5;:18;;;19293:33;;19348:5;:14;;;19337:25;;19387:5;:17;;;19373:31;;19425:5;:13;;;19415:23;;19463:5;:17;;;19449:31;;19501:5;:13;;;19491:23;;19543:5;:15;;;19537:22;;;;;;;;:::i;:::-;;19525:34;;19585:5;:12;;;19579:19;;;;;;;;:::i;:::-;;19570:28;;19618:5;:12;;;19609:21;;19128:510;18736:902;;;;;;;;;;;;;;:::o;12290:254::-;12090:10;12080:20;;:6;;;;;;;;;;:20;;;12072:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12421:1:::1;12396:27;;:13;;;;;;;;;;;:27;;;12388:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12480:14;12464:13;;:30;;;;;;;;;;;;;;;;;;12521:15;12505:13;;:31;;;;;;;;;;;;;;;;;;12290:254:::0;;:::o;24455:253::-;24578:21;24624:17;:15;:17::i;:::-;:39;;;24664:14;24680:7;24689:5;24696:3;24624:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:83;;24455:253;;;;;;:::o;14929:174::-;15002:15;15042:53;106:42;15061:6;15069:13;15084:10;15042:4;:53::i;:::-;15035:60;;14929:174;;;;:::o;17689:365::-;17772:7;17797:15;106:42;17827:30;;:14;:30;;;17823:199;;17893:7;:15;;;17883:25;;17823:199;;;17976:14;17969:32;;;18002:7;17969:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17959:51;;17823:199;18039:7;18032:14;;;17689:365;;;;:::o;13099:153::-;13159:11;13210:13;;;;;;;;;;;13195:47;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13188:56;;13099:153;:::o;18062:155::-;18112:14;18179:13;;;;;;;;;;;18166:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18144:65;;18062:155;:::o;13531:1111::-;13643:7;13693:1;13672:23;;:9;;;;;;;;;;;:23;;;13668:85;;13712:9;;;;;;;;;;;13697:31;;;13729:14;13745:7;13697:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13668:85;13790:1;13774:13;:17;13766:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;13833:18;13869:13;;;;;;;;;;;13854:38;;;13893:14;13854:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13833:75;;13944:1;13927:5;:14;;;:18;13919:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14016:1;14007:6;:10;13999:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;14047:20;14070:55;14083:35;14096:13;14111:6;14083:12;:35::i;:::-;376:3;14070:12;:55::i;:::-;14047:78;;345:2;14171;:19;;;;:::i;:::-;14162:6;:28;;;;:::i;:::-;14146:12;:44;;14138:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;14253:84;186:42;14300:7;14309:13;;;;;;;;;;;14324:12;14253:31;:84::i;:::-;14350:15;14381:13;;;;;;;;;;;14368:39;;;14408:14;14424:7;14433:6;14441:13;14456:12;14470:1;14368:104;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14350:122;;14497:1;14487:7;:11;14483:125;;;14537:13;;;;;;;;;;;14524:47;;;14572:14;14588:7;14524:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14483:125;14627:7;14620:14;;;;;13531:1111;;;;;;:::o;15111:1296::-;15224:7;15274:1;15253:23;;:9;;;;;;;;;;;:23;;;15249:86;;15293:9;;;;;;;;;;;15278:32;;;15311:14;15327:7;15278:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15249:86;15372:1;15356:13;:17;15348:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;15415:18;15451:13;;;;;;;;;;;15436:38;;;15475:14;15436:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15415:75;;15526:1;15509:5;:14;;;:18;15501:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;15598:1;15589:6;:10;15581:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;15629:20;15652:55;15665:35;15678:13;15693:6;15665:12;:35::i;:::-;376:3;15652:12;:55::i;:::-;15629:78;;345:2;15751;:19;;;;:::i;:::-;15742:6;:28;;;;:::i;:::-;15726:12;:44;;15718:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;106:42;15837:30;;:14;:30;;;15833:269;;15893:60;15924:13;;;;;;;;;;;15939;15893:30;:60::i;:::-;15833:269;;;16004:86;16036:14;16052:7;16061:13;;;;;;;;;;;16076;16004:31;:86::i;:::-;15833:269;16114:15;16145:13;;;;;;;;;;;16132:39;;;16172:14;16188:7;16197:6;16205:13;16220:12;16234:1;16132:104;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16114:122;;16261:1;16251:7;:11;16247:126;;;16301:13;;;;;;;;;;;16288:48;;;16337:14;16353:7;16288:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16247:126;16392:7;16385:14;;;;;15111:1296;;;;;;:::o;4451:471::-;4509:7;4759:1;4754;:6;4750:47;;4784:1;4777:8;;;;4750:47;4809:9;4825:1;4821;:5;;;;:::i;:::-;4809:17;;4854:1;4849;4845;:5;;;;:::i;:::-;:10;4837:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4913:1;4906:8;;;4451:471;;;;;:::o;4930:132::-;4988:7;5015:39;5019:1;5022;5015:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5008:46;;4930:132;;;;:::o;6773:402::-;6952:12;6966:17;6987:5;:10;;7021;7033:4;7039:2;7043:5;6998:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6951:99;;;;7069:7;:57;;;;;7096:1;7081:4;:11;:16;:44;;;;7112:4;7101:24;;;;;;;;;;;;:::i;:::-;7081:44;7069:57;7061:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;6861:314;;6773:402;;;;:::o;7183:197::-;7253:12;7270:2;:7;;7286:5;7303:1;7293:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7270:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7252:54;;;7325:7;7317:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;7241:139;7183:197;;:::o;5070:278::-;5156:7;5188:1;5184;:5;5191:12;5176:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5215:9;5231:1;5227;:5;;;;:::i;:::-;5215:17;;5339:1;5332:8;;;5070:278;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:135::-;1765:6;1799:5;1793:12;1783:22;;1677:135;;;:::o;1818:205::-;1938:11;1972:6;1967:3;1960:19;2012:4;2007:3;2003:14;1988:29;;1818:205;;;;:::o;2029:153::-;2117:4;2140:3;2132:11;;2170:4;2165:3;2161:14;2153:22;;2029:153;;;:::o;2188:108::-;2265:24;2283:5;2265:24;:::i;:::-;2260:3;2253:37;2188:108;;:::o;2336:492::-;2465:4;2460:3;2456:14;2553:4;2546:5;2542:16;2536:23;2572:63;2629:4;2624:3;2620:14;2606:12;2572:63;:::i;:::-;2480:165;2729:4;2722:5;2718:16;2712:23;2748:63;2805:4;2800:3;2796:14;2782:12;2748:63;:::i;:::-;2655:166;2434:394;2336:492;;:::o;2834:263::-;2945:10;2966:88;3050:3;3042:6;2966:88;:::i;:::-;3086:4;3081:3;3077:14;3063:28;;2834:263;;;;:::o;3103:134::-;3194:4;3226;3221:3;3217:14;3209:22;;3103:134;;;:::o;3281:900::-;3442:3;3471:75;3540:5;3471:75;:::i;:::-;3562:107;3662:6;3657:3;3562:107;:::i;:::-;3555:114;;3693:77;3764:5;3693:77;:::i;:::-;3793:7;3824:1;3809:347;3834:6;3831:1;3828:13;3809:347;;;3910:6;3904:13;3937:105;4038:3;4023:13;3937:105;:::i;:::-;3930:112;;4065:81;4139:6;4065:81;:::i;:::-;4055:91;;3869:287;3856:1;3853;3849:9;3844:14;;3809:347;;;3813:14;4172:3;4165:10;;3447:734;;;3281:900;;;;:::o;4187:457::-;4372:4;4410:2;4399:9;4395:18;4387:26;;4459:9;4453:4;4449:20;4445:1;4434:9;4430:17;4423:47;4487:150;4632:4;4623:6;4487:150;:::i;:::-;4479:158;;4187:457;;;;:::o;4650:329::-;4709:6;4758:2;4746:9;4737:7;4733:23;4729:32;4726:119;;;4764:79;;:::i;:::-;4726:119;4884:1;4909:53;4954:7;4945:6;4934:9;4930:22;4909:53;:::i;:::-;4899:63;;4855:117;4650:329;;;;:::o;4985:118::-;5072:24;5090:5;5072:24;:::i;:::-;5067:3;5060:37;4985:118;;:::o;5109:222::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:71;5321:1;5310:9;5306:17;5297:6;5253:71;:::i;:::-;5109:222;;;;:::o;5337:619::-;5414:6;5422;5430;5479:2;5467:9;5458:7;5454:23;5450:32;5447:119;;;5485:79;;:::i;:::-;5447:119;5605:1;5630:53;5675:7;5666:6;5655:9;5651:22;5630:53;:::i;:::-;5620:63;;5576:117;5732:2;5758:53;5803:7;5794:6;5783:9;5779:22;5758:53;:::i;:::-;5748:63;;5703:118;5860:2;5886:53;5931:7;5922:6;5911:9;5907:22;5886:53;:::i;:::-;5876:63;;5831:118;5337:619;;;;;:::o;5962:90::-;5996:7;6039:5;6032:13;6025:21;6014:32;;5962:90;;;:::o;6058:109::-;6139:21;6154:5;6139:21;:::i;:::-;6134:3;6127:34;6058:109;;:::o;6173:210::-;6260:4;6298:2;6287:9;6283:18;6275:26;;6311:65;6373:1;6362:9;6358:17;6349:6;6311:65;:::i;:::-;6173:210;;;;:::o;6389:114::-;6456:6;6490:5;6484:12;6474:22;;6389:114;;;:::o;6509:184::-;6608:11;6642:6;6637:3;6630:19;6682:4;6677:3;6673:14;6658:29;;6509:184;;;;:::o;6699:132::-;6766:4;6789:3;6781:11;;6819:4;6814:3;6810:14;6802:22;;6699:132;;;:::o;6837:179::-;6906:10;6927:46;6969:3;6961:6;6927:46;:::i;:::-;7005:4;7000:3;6996:14;6982:28;;6837:179;;;;:::o;7022:113::-;7092:4;7124;7119:3;7115:14;7107:22;;7022:113;;;:::o;7171:732::-;7290:3;7319:54;7367:5;7319:54;:::i;:::-;7389:86;7468:6;7463:3;7389:86;:::i;:::-;7382:93;;7499:56;7549:5;7499:56;:::i;:::-;7578:7;7609:1;7594:284;7619:6;7616:1;7613:13;7594:284;;;7695:6;7689:13;7722:63;7781:3;7766:13;7722:63;:::i;:::-;7715:70;;7808:60;7861:6;7808:60;:::i;:::-;7798:70;;7654:224;7641:1;7638;7634:9;7629:14;;7594:284;;;7598:14;7894:3;7887:10;;7295:608;;;7171:732;;;;:::o;7909:373::-;8052:4;8090:2;8079:9;8075:18;8067:26;;8139:9;8133:4;8129:20;8125:1;8114:9;8110:17;8103:47;8167:108;8270:4;8261:6;8167:108;:::i;:::-;8159:116;;7909:373;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:474::-;8981:6;8989;9038:2;9026:9;9017:7;9013:23;9009:32;9006:119;;;9044:79;;:::i;:::-;9006:119;9164:1;9189:53;9234:7;9225:6;9214:9;9210:22;9189:53;:::i;:::-;9179:63;;9135:117;9291:2;9317:53;9362:7;9353:6;9342:9;9338:22;9317:53;:::i;:::-;9307:63;;9262:118;8913:474;;;;;:::o;9393:114::-;9460:6;9494:5;9488:12;9478:22;;9393:114;;;:::o;9513:184::-;9612:11;9646:6;9641:3;9634:19;9686:4;9681:3;9677:14;9662:29;;9513:184;;;;:::o;9703:132::-;9770:4;9793:3;9785:11;;9823:4;9818:3;9814:14;9806:22;;9703:132;;;:::o;9841:108::-;9918:24;9936:5;9918:24;:::i;:::-;9913:3;9906:37;9841:108;;:::o;9955:179::-;10024:10;10045:46;10087:3;10079:6;10045:46;:::i;:::-;10123:4;10118:3;10114:14;10100:28;;9955:179;;;;:::o;10140:113::-;10210:4;10242;10237:3;10233:14;10225:22;;10140:113;;;:::o;10289:732::-;10408:3;10437:54;10485:5;10437:54;:::i;:::-;10507:86;10586:6;10581:3;10507:86;:::i;:::-;10500:93;;10617:56;10667:5;10617:56;:::i;:::-;10696:7;10727:1;10712:284;10737:6;10734:1;10731:13;10712:284;;;10813:6;10807:13;10840:63;10899:3;10884:13;10840:63;:::i;:::-;10833:70;;10926:60;10979:6;10926:60;:::i;:::-;10916:70;;10772:224;10759:1;10756;10752:9;10747:14;;10712:284;;;10716:14;11012:3;11005:10;;10413:608;;;10289:732;;;;:::o;11027:373::-;11170:4;11208:2;11197:9;11193:18;11185:26;;11257:9;11251:4;11247:20;11243:1;11232:9;11228:17;11221:47;11285:108;11388:4;11379:6;11285:108;:::i;:::-;11277:116;;11027:373;;;;:::o;11406:1108::-;11723:4;11761:3;11750:9;11746:19;11738:27;;11775:71;11843:1;11832:9;11828:17;11819:6;11775:71;:::i;:::-;11856:72;11924:2;11913:9;11909:18;11900:6;11856:72;:::i;:::-;11938;12006:2;11995:9;11991:18;11982:6;11938:72;:::i;:::-;12020;12088:2;12077:9;12073:18;12064:6;12020:72;:::i;:::-;12102:73;12170:3;12159:9;12155:19;12146:6;12102:73;:::i;:::-;12185;12253:3;12242:9;12238:19;12229:6;12185:73;:::i;:::-;12268;12336:3;12325:9;12321:19;12312:6;12268:73;:::i;:::-;12351;12419:3;12408:9;12404:19;12395:6;12351:73;:::i;:::-;12434;12502:3;12491:9;12487:19;12478:6;12434:73;:::i;:::-;11406:1108;;;;;;;;;;;;:::o;12520:118::-;12607:24;12625:5;12607:24;:::i;:::-;12602:3;12595:37;12520:118;;:::o;12644:99::-;12696:6;12730:5;12724:12;12714:22;;12644:99;;;:::o;12749:169::-;12833:11;12867:6;12862:3;12855:19;12907:4;12902:3;12898:14;12883:29;;12749:169;;;;:::o;12924:307::-;12992:1;13002:113;13016:6;13013:1;13010:13;13002:113;;;13101:1;13096:3;13092:11;13086:18;13082:1;13077:3;13073:11;13066:39;13038:2;13035:1;13031:10;13026:15;;13002:113;;;13133:6;13130:1;13127:13;13124:101;;;13213:1;13204:6;13199:3;13195:16;13188:27;13124:101;12973:258;12924:307;;;:::o;13237:102::-;13278:6;13329:2;13325:7;13320:2;13313:5;13309:14;13305:28;13295:38;;13237:102;;;:::o;13345:364::-;13433:3;13461:39;13494:5;13461:39;:::i;:::-;13516:71;13580:6;13575:3;13516:71;:::i;:::-;13509:78;;13596:52;13641:6;13636:3;13629:4;13622:5;13618:16;13596:52;:::i;:::-;13673:29;13695:6;13673:29;:::i;:::-;13668:3;13664:39;13657:46;;13437:272;13345:364;;;;:::o;13715:735::-;13932:4;13970:3;13959:9;13955:19;13947:27;;13984:71;14052:1;14041:9;14037:17;14028:6;13984:71;:::i;:::-;14102:9;14096:4;14092:20;14087:2;14076:9;14072:18;14065:48;14130:78;14203:4;14194:6;14130:78;:::i;:::-;14122:86;;14255:9;14249:4;14245:20;14240:2;14229:9;14225:18;14218:48;14283:78;14356:4;14347:6;14283:78;:::i;:::-;14275:86;;14371:72;14439:2;14428:9;14424:18;14415:6;14371:72;:::i;:::-;13715:735;;;;;;;:::o;14456:474::-;14524:6;14532;14581:2;14569:9;14560:7;14556:23;14552:32;14549:119;;;14587:79;;:::i;:::-;14549:119;14707:1;14732:53;14777:7;14768:6;14757:9;14753:22;14732:53;:::i;:::-;14722:63;;14678:117;14834:2;14860:53;14905:7;14896:6;14885:9;14881:22;14860:53;:::i;:::-;14850:63;;14805:118;14456:474;;;;;:::o;14936:222::-;15029:4;15067:2;15056:9;15052:18;15044:26;;15080:71;15148:1;15137:9;15133:17;15124:6;15080:71;:::i;:::-;14936:222;;;;:::o;15164:329::-;15223:6;15272:2;15260:9;15251:7;15247:23;15243:32;15240:119;;;15278:79;;:::i;:::-;15240:119;15398:1;15423:53;15468:7;15459:6;15448:9;15444:22;15423:53;:::i;:::-;15413:63;;15369:117;15164:329;;;;:::o;15499:765::-;15585:6;15593;15601;15609;15658:3;15646:9;15637:7;15633:23;15629:33;15626:120;;;15665:79;;:::i;:::-;15626:120;15785:1;15810:53;15855:7;15846:6;15835:9;15831:22;15810:53;:::i;:::-;15800:63;;15756:117;15912:2;15938:53;15983:7;15974:6;15963:9;15959:22;15938:53;:::i;:::-;15928:63;;15883:118;16040:2;16066:53;16111:7;16102:6;16091:9;16087:22;16066:53;:::i;:::-;16056:63;;16011:118;16168:2;16194:53;16239:7;16230:6;16219:9;16215:22;16194:53;:::i;:::-;16184:63;;16139:118;15499:765;;;;;;;:::o;16270:86::-;16305:7;16345:4;16338:5;16334:16;16323:27;;16270:86;;;:::o;16362:112::-;16445:22;16461:5;16445:22;:::i;:::-;16440:3;16433:35;16362:112;;:::o;16480:1316::-;16846:4;16884:3;16873:9;16869:19;16861:27;;16898:71;16966:1;16955:9;16951:17;16942:6;16898:71;:::i;:::-;16979:72;17047:2;17036:9;17032:18;17023:6;16979:72;:::i;:::-;17061;17129:2;17118:9;17114:18;17105:6;17061:72;:::i;:::-;17143;17211:2;17200:9;17196:18;17187:6;17143:72;:::i;:::-;17225:73;17293:3;17282:9;17278:19;17269:6;17225:73;:::i;:::-;17308;17376:3;17365:9;17361:19;17352:6;17308:73;:::i;:::-;17391;17459:3;17448:9;17444:19;17435:6;17391:73;:::i;:::-;17474;17542:3;17531:9;17527:19;17518:6;17474:73;:::i;:::-;17557:69;17621:3;17610:9;17606:19;17597:6;17557:69;:::i;:::-;17636;17700:3;17689:9;17685:19;17676:6;17636:69;:::i;:::-;17715:74;17784:3;17773:9;17769:19;17759:7;17715:74;:::i;:::-;16480:1316;;;;;;;;;;;;;;:::o;17802:332::-;17923:4;17961:2;17950:9;17946:18;17938:26;;17974:71;18042:1;18031:9;18027:17;18018:6;17974:71;:::i;:::-;18055:72;18123:2;18112:9;18108:18;18099:6;18055:72;:::i;:::-;17802:332;;;;;:::o;18140:117::-;18249:1;18246;18239:12;18263:180;18311:77;18308:1;18301:88;18408:4;18405:1;18398:15;18432:4;18429:1;18422:15;18449:281;18532:27;18554:4;18532:27;:::i;:::-;18524:6;18520:40;18662:6;18650:10;18647:22;18626:18;18614:10;18611:34;18608:62;18605:88;;;18673:18;;:::i;:::-;18605:88;18713:10;18709:2;18702:22;18492:238;18449:281;;:::o;18736:129::-;18770:6;18797:20;;:::i;:::-;18787:30;;18826:33;18854:4;18846:6;18826:33;:::i;:::-;18736:129;;;:::o;18871:311::-;18948:4;19038:18;19030:6;19027:30;19024:56;;;19060:18;;:::i;:::-;19024:56;19110:4;19102:6;19098:17;19090:25;;19170:4;19164;19160:15;19152:23;;18871:311;;;:::o;19188:117::-;19297:1;19294;19287:12;19311:143;19368:5;19399:6;19393:13;19384:22;;19415:33;19442:5;19415:33;:::i;:::-;19311:143;;;;:::o;19477:732::-;19584:5;19609:81;19625:64;19682:6;19625:64;:::i;:::-;19609:81;:::i;:::-;19600:90;;19710:5;19739:6;19732:5;19725:21;19773:4;19766:5;19762:16;19755:23;;19826:4;19818:6;19814:17;19806:6;19802:30;19855:3;19847:6;19844:15;19841:122;;;19874:79;;:::i;:::-;19841:122;19989:6;19972:231;20006:6;20001:3;19998:15;19972:231;;;20081:3;20110:48;20154:3;20142:10;20110:48;:::i;:::-;20105:3;20098:61;20188:4;20183:3;20179:14;20172:21;;20048:155;20032:4;20027:3;20023:14;20016:21;;19972:231;;;19976:21;19590:619;;19477:732;;;;;:::o;20232:385::-;20314:5;20363:3;20356:4;20348:6;20344:17;20340:27;20330:122;;20371:79;;:::i;:::-;20330:122;20481:6;20475:13;20506:105;20607:3;20599:6;20592:4;20584:6;20580:17;20506:105;:::i;:::-;20497:114;;20320:297;20232:385;;;;:::o;20623:554::-;20718:6;20767:2;20755:9;20746:7;20742:23;20738:32;20735:119;;;20773:79;;:::i;:::-;20735:119;20914:1;20903:9;20899:17;20893:24;20944:18;20936:6;20933:30;20930:117;;;20966:79;;:::i;:::-;20930:117;21071:89;21152:7;21143:6;21132:9;21128:22;21071:89;:::i;:::-;21061:99;;20864:306;20623:554;;;;:::o;21183:180::-;21231:77;21228:1;21221:88;21328:4;21325:1;21318:15;21352:4;21349:1;21342:15;21369:351;21439:6;21488:2;21476:9;21467:7;21463:23;21459:32;21456:119;;;21494:79;;:::i;:::-;21456:119;21614:1;21639:64;21695:7;21686:6;21675:9;21671:22;21639:64;:::i;:::-;21629:74;;21585:128;21369:351;;;;:::o;21726:180::-;21774:77;21771:1;21764:88;21871:4;21868:1;21861:15;21895:4;21892:1;21885:15;21912:233;21951:3;21974:24;21992:5;21974:24;:::i;:::-;21965:33;;22020:66;22013:5;22010:77;22007:103;;22090:18;;:::i;:::-;22007:103;22137:1;22130:5;22126:13;22119:20;;21912:233;;;:::o;22151:182::-;22291:34;22287:1;22279:6;22275:14;22268:58;22151:182;:::o;22339:366::-;22481:3;22502:67;22566:2;22561:3;22502:67;:::i;:::-;22495:74;;22578:93;22667:3;22578:93;:::i;:::-;22696:2;22691:3;22687:12;22680:19;;22339:366;;;:::o;22711:419::-;22877:4;22915:2;22904:9;22900:18;22892:26;;22964:9;22958:4;22954:20;22950:1;22939:9;22935:17;22928:47;22992:131;23118:4;22992:131;:::i;:::-;22984:139;;22711:419;;;:::o;23136:117::-;23245:1;23242;23235:12;23259:117;23368:1;23365;23358:12;23382:143;23439:5;23470:6;23464:13;23455:22;;23486:33;23513:5;23486:33;:::i;:::-;23382:143;;;;:::o;23531:117::-;23640:1;23637;23630:12;23654:308;23716:4;23806:18;23798:6;23795:30;23792:56;;;23828:18;;:::i;:::-;23792:56;23866:29;23888:6;23866:29;:::i;:::-;23858:37;;23950:4;23944;23940:15;23932:23;;23654:308;;;:::o;23968:421::-;24057:5;24082:66;24098:49;24140:6;24098:49;:::i;:::-;24082:66;:::i;:::-;24073:75;;24171:6;24164:5;24157:21;24209:4;24202:5;24198:16;24247:3;24238:6;24233:3;24229:16;24226:25;24223:112;;;24254:79;;:::i;:::-;24223:112;24344:39;24376:6;24371:3;24366;24344:39;:::i;:::-;24063:326;23968:421;;;;;:::o;24409:355::-;24476:5;24525:3;24518:4;24510:6;24506:17;24502:27;24492:122;;24533:79;;:::i;:::-;24492:122;24643:6;24637:13;24668:90;24754:3;24746:6;24739:4;24731:6;24727:17;24668:90;:::i;:::-;24659:99;;24482:282;24409:355;;;;:::o;24790:1289::-;24872:5;24916:4;24904:9;24899:3;24895:19;24891:30;24888:117;;;24924:79;;:::i;:::-;24888:117;25023:21;25039:4;25023:21;:::i;:::-;25014:30;;25112:1;25152:60;25208:3;25199:6;25188:9;25184:22;25152:60;:::i;:::-;25145:4;25138:5;25134:16;25127:86;25054:170;25306:2;25295:9;25291:18;25285:25;25337:18;25329:6;25326:30;25323:117;;;25359:79;;:::i;:::-;25323:117;25479:70;25545:3;25536:6;25525:9;25521:22;25479:70;:::i;:::-;25472:4;25465:5;25461:16;25454:96;25234:327;25641:2;25630:9;25626:18;25620:25;25672:18;25664:6;25661:30;25658:117;;;25694:79;;:::i;:::-;25658:117;25814:70;25880:3;25871:6;25860:9;25856:22;25814:70;:::i;:::-;25807:4;25800:5;25796:16;25789:96;25571:325;25959:2;26000:60;26056:3;26047:6;26036:9;26032:22;26000:60;:::i;:::-;25993:4;25986:5;25982:16;25975:86;25906:166;24790:1289;;;;:::o;26085:548::-;26177:6;26226:2;26214:9;26205:7;26201:23;26197:32;26194:119;;;26232:79;;:::i;:::-;26194:119;26373:1;26362:9;26358:17;26352:24;26403:18;26395:6;26392:30;26389:117;;;26425:79;;:::i;:::-;26389:117;26530:86;26608:7;26599:6;26588:9;26584:22;26530:86;:::i;:::-;26520:96;;26323:303;26085:548;;;;:::o;26639:225::-;26779:34;26775:1;26767:6;26763:14;26756:58;26848:8;26843:2;26835:6;26831:15;26824:33;26639:225;:::o;26870:366::-;27012:3;27033:67;27097:2;27092:3;27033:67;:::i;:::-;27026:74;;27109:93;27198:3;27109:93;:::i;:::-;27227:2;27222:3;27218:12;27211:19;;26870:366;;;:::o;27242:419::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27495:9;27489:4;27485:20;27481:1;27470:9;27466:17;27459:47;27523:131;27649:4;27523:131;:::i;:::-;27515:139;;27242:419;;;:::o;27667:442::-;27816:4;27854:2;27843:9;27839:18;27831:26;;27867:71;27935:1;27924:9;27920:17;27911:6;27867:71;:::i;:::-;27948:72;28016:2;28005:9;28001:18;27992:6;27948:72;:::i;:::-;28030;28098:2;28087:9;28083:18;28074:6;28030:72;:::i;:::-;27667:442;;;;;;:::o;28115:116::-;28185:21;28200:5;28185:21;:::i;:::-;28178:5;28175:32;28165:60;;28221:1;28218;28211:12;28165:60;28115:116;:::o;28237:137::-;28291:5;28322:6;28316:13;28307:22;;28338:30;28362:5;28338:30;:::i;:::-;28237:137;;;;:::o;28380:345::-;28447:6;28496:2;28484:9;28475:7;28471:23;28467:32;28464:119;;;28502:79;;:::i;:::-;28464:119;28622:1;28647:61;28700:7;28691:6;28680:9;28676:22;28647:61;:::i;:::-;28637:71;;28593:125;28380:345;;;;:::o;28731:170::-;28871:22;28867:1;28859:6;28855:14;28848:46;28731:170;:::o;28907:366::-;29049:3;29070:67;29134:2;29129:3;29070:67;:::i;:::-;29063:74;;29146:93;29235:3;29146:93;:::i;:::-;29264:2;29259:3;29255:12;29248:19;;28907:366;;;:::o;29279:419::-;29445:4;29483:2;29472:9;29468:18;29460:26;;29532:9;29526:4;29522:20;29518:1;29507:9;29503:17;29496:47;29560:131;29686:4;29560:131;:::i;:::-;29552:139;;29279:419;;;:::o;29704:332::-;29825:4;29863:2;29852:9;29848:18;29840:26;;29876:71;29944:1;29933:9;29929:17;29920:6;29876:71;:::i;:::-;29957:72;30025:2;30014:9;30010:18;30001:6;29957:72;:::i;:::-;29704:332;;;;;:::o;30042:311::-;30119:4;30209:18;30201:6;30198:30;30195:56;;;30231:18;;:::i;:::-;30195:56;30281:4;30273:6;30269:17;30261:25;;30341:4;30335;30331:15;30323:23;;30042:311;;;:::o;30376:732::-;30483:5;30508:81;30524:64;30581:6;30524:64;:::i;:::-;30508:81;:::i;:::-;30499:90;;30609:5;30638:6;30631:5;30624:21;30672:4;30665:5;30661:16;30654:23;;30725:4;30717:6;30713:17;30705:6;30701:30;30754:3;30746:6;30743:15;30740:122;;;30773:79;;:::i;:::-;30740:122;30888:6;30871:231;30905:6;30900:3;30897:15;30871:231;;;30980:3;31009:48;31053:3;31041:10;31009:48;:::i;:::-;31004:3;30997:61;31087:4;31082:3;31078:14;31071:21;;30947:155;30931:4;30926:3;30922:14;30915:21;;30871:231;;;30875:21;30489:619;;30376:732;;;;;:::o;31131:385::-;31213:5;31262:3;31255:4;31247:6;31243:17;31239:27;31229:122;;31270:79;;:::i;:::-;31229:122;31380:6;31374:13;31405:105;31506:3;31498:6;31491:4;31483:6;31479:17;31405:105;:::i;:::-;31396:114;;31219:297;31131:385;;;;:::o;31522:554::-;31617:6;31666:2;31654:9;31645:7;31641:23;31637:32;31634:119;;;31672:79;;:::i;:::-;31634:119;31813:1;31802:9;31798:17;31792:24;31843:18;31835:6;31832:30;31829:117;;;31865:79;;:::i;:::-;31829:117;31970:89;32051:7;32042:6;32031:9;32027:22;31970:89;:::i;:::-;31960:99;;31763:306;31522:554;;;;:::o;32082:442::-;32231:4;32269:2;32258:9;32254:18;32246:26;;32282:71;32350:1;32339:9;32335:17;32326:6;32282:71;:::i;:::-;32363:72;32431:2;32420:9;32416:18;32407:6;32363:72;:::i;:::-;32445;32513:2;32502:9;32498:18;32489:6;32445:72;:::i;:::-;32082:442;;;;;;:::o;32550:1852::-;32632:5;32676:6;32664:9;32659:3;32655:19;32651:32;32648:119;;;32686:79;;:::i;:::-;32648:119;32785:23;32801:6;32785:23;:::i;:::-;32776:32;;32870:1;32910:60;32966:3;32957:6;32946:9;32942:22;32910:60;:::i;:::-;32903:4;32896:5;32892:16;32885:86;32818:164;33047:2;33088:60;33144:3;33135:6;33124:9;33120:22;33088:60;:::i;:::-;33081:4;33074:5;33070:16;33063:86;32992:168;33226:2;33267:60;33323:3;33314:6;33303:9;33299:22;33267:60;:::i;:::-;33260:4;33253:5;33249:16;33242:86;33170:169;33399:2;33440:60;33496:3;33487:6;33476:9;33472:22;33440:60;:::i;:::-;33433:4;33426:5;33422:16;33415:86;33349:163;33576:3;33618:60;33674:3;33665:6;33654:9;33650:22;33618:60;:::i;:::-;33611:4;33604:5;33600:16;33593:86;33522:168;33753:3;33795:60;33851:3;33842:6;33831:9;33827:22;33795:60;:::i;:::-;33788:4;33781:5;33777:16;33770:86;33700:167;33930:3;33972:60;34028:3;34019:6;34008:9;34004:22;33972:60;:::i;:::-;33965:4;33958:5;33954:16;33947:86;33877:167;34106:3;34148:60;34204:3;34195:6;34184:9;34180:22;34148:60;:::i;:::-;34141:4;34134:5;34130:16;34123:86;34054:166;34279:3;34323:60;34379:3;34370:6;34359:9;34355:22;34323:60;:::i;:::-;34314:6;34307:5;34303:18;34296:88;34230:165;32550:1852;;;;:::o;34408:396::-;34500:6;34549:3;34537:9;34528:7;34524:23;34520:33;34517:120;;;34556:79;;:::i;:::-;34517:120;34676:1;34701:86;34779:7;34770:6;34759:9;34755:22;34701:86;:::i;:::-;34691:96;;34647:150;34408:396;;;;:::o;34810:332::-;34931:4;34969:2;34958:9;34954:18;34946:26;;34982:71;35050:1;35039:9;35035:17;35026:6;34982:71;:::i;:::-;35063:72;35131:2;35120:9;35116:18;35107:6;35063:72;:::i;:::-;34810:332;;;;;:::o;35148:351::-;35218:6;35267:2;35255:9;35246:7;35242:23;35238:32;35235:119;;;35273:79;;:::i;:::-;35235:119;35393:1;35418:64;35474:7;35465:6;35454:9;35450:22;35418:64;:::i;:::-;35408:74;;35364:128;35148:351;;;;:::o;35505:553::-;35682:4;35720:3;35709:9;35705:19;35697:27;;35734:71;35802:1;35791:9;35787:17;35778:6;35734:71;:::i;:::-;35815:72;35883:2;35872:9;35868:18;35859:6;35815:72;:::i;:::-;35897;35965:2;35954:9;35950:18;35941:6;35897:72;:::i;:::-;35979;36047:2;36036:9;36032:18;36023:6;35979:72;:::i;:::-;35505:553;;;;;;;:::o;36064:112::-;36150:1;36143:5;36140:12;36130:40;;36166:1;36163;36156:12;36130:40;36064:112;:::o;36182:169::-;36252:5;36283:6;36277:13;36268:22;;36299:46;36339:5;36299:46;:::i;:::-;36182:169;;;;:::o;36357:114::-;36445:1;36438:5;36435:12;36425:40;;36461:1;36458;36451:12;36425:40;36357:114;:::o;36477:173::-;36549:5;36580:6;36574:13;36565:22;;36596:48;36638:5;36596:48;:::i;:::-;36477:173;;;;:::o;36676:2423::-;36758:5;36802:6;36790:9;36785:3;36781:19;36777:32;36774:119;;;36812:79;;:::i;:::-;36774:119;36911:23;36927:6;36911:23;:::i;:::-;36902:32;;36996:1;37036:60;37092:3;37083:6;37072:9;37068:22;37036:60;:::i;:::-;37029:4;37022:5;37018:16;37011:86;36944:164;37168:2;37209:60;37265:3;37256:6;37245:9;37241:22;37209:60;:::i;:::-;37202:4;37195:5;37191:16;37184:86;37118:163;37346:2;37387:60;37443:3;37434:6;37423:9;37419:22;37387:60;:::i;:::-;37380:4;37373:5;37369:16;37362:86;37291:168;37526:2;37567:60;37623:3;37614:6;37603:9;37599:22;37567:60;:::i;:::-;37560:4;37553:5;37549:16;37542:86;37469:170;37702:3;37744:60;37800:3;37791:6;37780:9;37776:22;37744:60;:::i;:::-;37737:4;37730:5;37726:16;37719:86;37649:167;37882:3;37924:60;37980:3;37971:6;37960:9;37956:22;37924:60;:::i;:::-;37917:4;37910:5;37906:16;37899:86;37826:170;38058:3;38100:60;38156:3;38147:6;38136:9;38132:22;38100:60;:::i;:::-;38093:4;38086:5;38082:16;38075:86;38006:166;38238:3;38280:60;38336:3;38327:6;38316:9;38312:22;38280:60;:::i;:::-;38273:4;38266:5;38262:16;38255:86;38182:170;38414:3;38458:60;38514:3;38505:6;38494:9;38490:22;38458:60;:::i;:::-;38449:6;38442:5;38438:18;38431:88;38362:168;38594:3;38638:73;38707:3;38698:6;38687:9;38683:22;38638:73;:::i;:::-;38629:6;38622:5;38618:18;38611:101;38540:183;38784:3;38828:75;38899:3;38890:6;38879:9;38875:22;38828:75;:::i;:::-;38819:6;38812:5;38808:18;38801:103;38733:182;38976:3;39020:60;39076:3;39067:6;39056:9;39052:22;39020:60;:::i;:::-;39011:6;39004:5;39000:18;38993:88;38925:167;36676:2423;;;;:::o;39105:396::-;39197:6;39246:3;39234:9;39225:7;39221:23;39217:33;39214:120;;;39253:79;;:::i;:::-;39214:120;39373:1;39398:86;39476:7;39467:6;39456:9;39452:22;39398:86;:::i;:::-;39388:96;;39344:150;39105:396;;;;:::o;39507:180::-;39555:77;39552:1;39545:88;39652:4;39649:1;39642:15;39676:4;39673:1;39666:15;39693:175;39833:27;39829:1;39821:6;39817:14;39810:51;39693:175;:::o;39874:366::-;40016:3;40037:67;40101:2;40096:3;40037:67;:::i;:::-;40030:74;;40113:93;40202:3;40113:93;:::i;:::-;40231:2;40226:3;40222:12;40215:19;;39874:366;;;:::o;40246:419::-;40412:4;40450:2;40439:9;40435:18;40427:26;;40499:9;40493:4;40489:20;40485:1;40474:9;40470:17;40463:47;40527:131;40653:4;40527:131;:::i;:::-;40519:139;;40246:419;;;:::o;40671:174::-;40811:26;40807:1;40799:6;40795:14;40788:50;40671:174;:::o;40851:366::-;40993:3;41014:67;41078:2;41073:3;41014:67;:::i;:::-;41007:74;;41090:93;41179:3;41090:93;:::i;:::-;41208:2;41203:3;41199:12;41192:19;;40851:366;;;:::o;41223:419::-;41389:4;41427:2;41416:9;41412:18;41404:26;;41476:9;41470:4;41466:20;41462:1;41451:9;41447:17;41440:47;41504:131;41630:4;41504:131;:::i;:::-;41496:139;;41223:419;;;:::o;41648:162::-;41788:14;41784:1;41776:6;41772:14;41765:38;41648:162;:::o;41816:366::-;41958:3;41979:67;42043:2;42038:3;41979:67;:::i;:::-;41972:74;;42055:93;42144:3;42055:93;:::i;:::-;42173:2;42168:3;42164:12;42157:19;;41816:366;;;:::o;42188:419::-;42354:4;42392:2;42381:9;42377:18;42369:26;;42441:9;42435:4;42431:20;42427:1;42416:9;42412:17;42405:47;42469:131;42595:4;42469:131;:::i;:::-;42461:139;;42188:419;;;:::o;42613:102::-;42655:8;42702:5;42699:1;42695:13;42674:34;;42613:102;;;:::o;42721:848::-;42782:5;42789:4;42813:6;42804:15;;42837:5;42828:14;;42851:712;42872:1;42862:8;42859:15;42851:712;;;42967:4;42962:3;42958:14;42952:4;42949:24;42946:50;;;42976:18;;:::i;:::-;42946:50;43026:1;43016:8;43012:16;43009:451;;;43441:4;43434:5;43430:16;43421:25;;43009:451;43491:4;43485;43481:15;43473:23;;43521:32;43544:8;43521:32;:::i;:::-;43509:44;;42851:712;;;42721:848;;;;;;;:::o;43575:1073::-;43629:5;43820:8;43810:40;;43841:1;43832:10;;43843:5;;43810:40;43869:4;43859:36;;43886:1;43877:10;;43888:5;;43859:36;43955:4;44003:1;43998:27;;;;44039:1;44034:191;;;;43948:277;;43998:27;44016:1;44007:10;;44018:5;;;44034:191;44079:3;44069:8;44066:17;44063:43;;;44086:18;;:::i;:::-;44063:43;44135:8;44132:1;44128:16;44119:25;;44170:3;44163:5;44160:14;44157:40;;;44177:18;;:::i;:::-;44157:40;44210:5;;;43948:277;;44334:2;44324:8;44321:16;44315:3;44309:4;44306:13;44302:36;44284:2;44274:8;44271:16;44266:2;44260:4;44257:12;44253:35;44237:111;44234:246;;;44390:8;44384:4;44380:19;44371:28;;44425:3;44418:5;44415:14;44412:40;;;44432:18;;:::i;:::-;44412:40;44465:5;;44234:246;44505:42;44543:3;44533:8;44527:4;44524:1;44505:42;:::i;:::-;44490:57;;;;44579:4;44574:3;44570:14;44563:5;44560:25;44557:51;;;44588:18;;:::i;:::-;44557:51;44637:4;44630:5;44626:16;44617:25;;43575:1073;;;;;;:::o;44654:285::-;44714:5;44738:23;44756:4;44738:23;:::i;:::-;44730:31;;44782:27;44800:8;44782:27;:::i;:::-;44770:39;;44828:104;44865:66;44855:8;44849:4;44828:104;:::i;:::-;44819:113;;44654:285;;;;:::o;44945:348::-;44985:7;45008:20;45026:1;45008:20;:::i;:::-;45003:25;;45042:20;45060:1;45042:20;:::i;:::-;45037:25;;45230:1;45162:66;45158:74;45155:1;45152:81;45147:1;45140:9;45133:17;45129:105;45126:131;;;45237:18;;:::i;:::-;45126:131;45285:1;45282;45278:9;45267:20;;44945:348;;;;:::o;45299:232::-;45439:34;45435:1;45427:6;45423:14;45416:58;45508:15;45503:2;45495:6;45491:15;45484:40;45299:232;:::o;45537:366::-;45679:3;45700:67;45764:2;45759:3;45700:67;:::i;:::-;45693:74;;45776:93;45865:3;45776:93;:::i;:::-;45894:2;45889:3;45885:12;45878:19;;45537:366;;;:::o;45909:419::-;46075:4;46113:2;46102:9;46098:18;46090:26;;46162:9;46156:4;46152:20;46148:1;46137:9;46133:17;46126:47;46190:131;46316:4;46190:131;:::i;:::-;46182:139;;45909:419;;;:::o;46334:85::-;46379:7;46408:5;46397:16;;46334:85;;;:::o;46425:60::-;46453:3;46474:5;46467:12;;46425:60;;;:::o;46491:154::-;46547:9;46580:59;46596:42;46605:32;46631:5;46605:32;:::i;:::-;46596:42;:::i;:::-;46580:59;:::i;:::-;46567:72;;46491:154;;;:::o;46651:143::-;46744:43;46781:5;46744:43;:::i;:::-;46739:3;46732:56;46651:143;;:::o;46800:787::-;47039:4;47077:3;47066:9;47062:19;47054:27;;47091:71;47159:1;47148:9;47144:17;47135:6;47091:71;:::i;:::-;47172:72;47240:2;47229:9;47225:18;47216:6;47172:72;:::i;:::-;47254;47322:2;47311:9;47307:18;47298:6;47254:72;:::i;:::-;47336;47404:2;47393:9;47389:18;47380:6;47336:72;:::i;:::-;47418:73;47486:3;47475:9;47471:19;47462:6;47418:73;:::i;:::-;47501:79;47575:3;47564:9;47560:19;47551:6;47501:79;:::i;:::-;46800:787;;;;;;;;;:::o;47593:85::-;47638:7;47667:5;47656:16;;47593:85;;;:::o;47684:154::-;47740:9;47773:59;47789:42;47798:32;47824:5;47798:32;:::i;:::-;47789:42;:::i;:::-;47773:59;:::i;:::-;47760:72;;47684:154;;;:::o;47844:143::-;47937:43;47974:5;47937:43;:::i;:::-;47932:3;47925:56;47844:143;;:::o;47993:787::-;48232:4;48270:3;48259:9;48255:19;48247:27;;48284:71;48352:1;48341:9;48337:17;48328:6;48284:71;:::i;:::-;48365:72;48433:2;48422:9;48418:18;48409:6;48365:72;:::i;:::-;48447;48515:2;48504:9;48500:18;48491:6;48447:72;:::i;:::-;48529;48597:2;48586:9;48582:18;48573:6;48529:72;:::i;:::-;48611:73;48679:3;48668:9;48664:19;48655:6;48611:73;:::i;:::-;48694:79;48768:3;48757:9;48753:19;48744:6;48694:79;:::i;:::-;47993:787;;;;;;;;;:::o;48786:180::-;48834:77;48831:1;48824:88;48931:4;48928:1;48921:15;48955:4;48952:1;48945:15;48972:185;49012:1;49029:20;49047:1;49029:20;:::i;:::-;49024:25;;49063:20;49081:1;49063:20;:::i;:::-;49058:25;;49102:1;49092:35;;49107:18;;:::i;:::-;49092:35;49149:1;49146;49142:9;49137:14;;48972:185;;;;:::o;49163:220::-;49303:34;49299:1;49291:6;49287:14;49280:58;49372:3;49367:2;49359:6;49355:15;49348:28;49163:220;:::o;49389:366::-;49531:3;49552:67;49616:2;49611:3;49552:67;:::i;:::-;49545:74;;49628:93;49717:3;49628:93;:::i;:::-;49746:2;49741:3;49737:12;49730:19;;49389:366;;;:::o;49761:419::-;49927:4;49965:2;49954:9;49950:18;49942:26;;50014:9;50008:4;50004:20;50000:1;49989:9;49985:17;49978:47;50042:131;50168:4;50042:131;:::i;:::-;50034:139;;49761:419;;;:::o;50186:442::-;50335:4;50373:2;50362:9;50358:18;50350:26;;50386:71;50454:1;50443:9;50439:17;50430:6;50386:71;:::i;:::-;50467:72;50535:2;50524:9;50520:18;50511:6;50467:72;:::i;:::-;50549;50617:2;50606:9;50602:18;50593:6;50549:72;:::i;:::-;50186:442;;;;;;:::o;50634:98::-;50685:6;50719:5;50713:12;50703:22;;50634:98;;;:::o;50738:147::-;50839:11;50876:3;50861:18;;50738:147;;;;:::o;50891:373::-;50995:3;51023:38;51055:5;51023:38;:::i;:::-;51077:88;51158:6;51153:3;51077:88;:::i;:::-;51070:95;;51174:52;51219:6;51214:3;51207:4;51200:5;51196:16;51174:52;:::i;:::-;51251:6;51246:3;51242:16;51235:23;;50999:265;50891:373;;;;:::o;51270:271::-;51400:3;51422:93;51511:3;51502:6;51422:93;:::i;:::-;51415:100;;51532:3;51525:10;;51270:271;;;;:::o;51547:223::-;51687:34;51683:1;51675:6;51671:14;51664:58;51756:6;51751:2;51743:6;51739:15;51732:31;51547:223;:::o;51776:366::-;51918:3;51939:67;52003:2;51998:3;51939:67;:::i;:::-;51932:74;;52015:93;52104:3;52015:93;:::i;:::-;52133:2;52128:3;52124:12;52117:19;;51776:366;;;:::o;52148:419::-;52314:4;52352:2;52341:9;52337:18;52329:26;;52401:9;52395:4;52391:20;52387:1;52376:9;52372:17;52365:47;52429:131;52555:4;52429:131;:::i;:::-;52421:139;;52148:419;;;:::o;52573:222::-;52713:34;52709:1;52701:6;52697:14;52690:58;52782:5;52777:2;52769:6;52765:15;52758:30;52573:222;:::o;52801:366::-;52943:3;52964:67;53028:2;53023:3;52964:67;:::i;:::-;52957:74;;53040:93;53129:3;53040:93;:::i;:::-;53158:2;53153:3;53149:12;53142:19;;52801:366;;;:::o;53173:419::-;53339:4;53377:2;53366:9;53362:18;53354:26;;53426:9;53420:4;53416:20;53412:1;53401:9;53397:17;53390:47;53454:131;53580:4;53454:131;:::i;:::-;53446:139;;53173:419;;;:::o;53598:313::-;53711:4;53749:2;53738:9;53734:18;53726:26;;53798:9;53792:4;53788:20;53784:1;53773:9;53769:17;53762:47;53826:78;53899:4;53890:6;53826:78;:::i;:::-;53818:86;;53598:313;;;;:::o

Swarm Source

ipfs://9971cbbe008034615743dd06e69b7c572a6c42779b9f8bdfc3ba67ceffec946f
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading