Contract 0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe 3

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0a6e2c2f068cd53bae4326d3d292a79a94ec6d6396f77e736e2f268cd16132e50x9b0a24e2242989242022-01-29 9:34:4440 secs ago0x692b8c626e05cd5da5e2a2f3f4ab7cbce45411aa IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.016073545792 8.078364355
0x01ed975f76d9aee2d42fa0327fa874579f88bf0c3297f13e76823f8781398095Close Trade Mark...242989212022-01-29 9:34:2658 secs ago0x391e26fb4c8b21a4e682ee795f5635df0510c45a IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.023518794453 11.724043374
0x5a8ff9023e6243a7d5458ae9283455754f371dcc0571c8d55b1c7586f4e71989Close Trade Mark...242989182022-01-29 9:34:081 min ago0x692b8c626e05cd5da5e2a2f3f4ab7cbce45411aa IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.030804994307 15.356190561
0x0f644474b8fce6c271c0c246d6e081b3a7e45836a528a9a258812440c5daa5050x9b0a24e2242989122022-01-29 9:33:321 min ago0xd3195b4071c45b6d0b5818cb91e99eba9fe71645 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.052124302926 26.196289564
0x51a290479c455479348a03dc4cf433b329a3a0bd1be91bace4f984a9b27b12dfExecute Nft Orde...242989062022-01-29 9:32:562 mins ago0x519e23e8d6b5e1682a1635df3419828dea858018 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.099495650
0xfffbbd42beb5adc84a78a51220f923a9f860e5382c4dba034c49f1dfdadd0e99Execute Nft Orde...242989052022-01-29 9:32:502 mins ago0x5b67c2b0a035a0851cc048aea1e1a0ed479ed61b IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.2487405125
0x0633e1358f9eb5f8b2db642d6d837112451890abc8de99285518d09520eb19d00x9b0a24e2242989042022-01-29 9:32:442 mins ago0x391e26fb4c8b21a4e682ee795f5635df0510c45a IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.013373679581 34.481665754
0x0b656472e68d6c960f31e341be1cfb873c8b4ef255c10f6292e542eaed361a99Close Trade Mark...242988972022-01-29 9:32:023 mins ago0x391e26fb4c8b21a4e682ee795f5635df0510c45a IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.073456240373 36.617699514
0xdb7afc7089a571279e2a7f41a5bc7d52ac9a87523a91c296b6211662f23d89a4Update Tp242988952022-01-29 9:31:503 mins ago0xd1bd53fbc7d020d29921e61d587fa2c948d55dc6 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.003764366234 36.684366171
0x9421d0c2df8944a1bbf47fe7f596b82eb9e3f5f1796666a4923e3e99ec2d63440x9b0a24e2242988882022-01-29 9:31:084 mins ago0xd1bd53fbc7d020d29921e61d587fa2c948d55dc6 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.06982420679 35.447916375
0xda7a3c08385dd267682552e9a3f5e197319803a9e1f1090fcf1b48d6838137790x9b0a24e2242988372022-01-29 9:28:466 mins ago0xa4df9e7b6fe51e0c65c022340d4fd4a28efe0121 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.066897524862 33.961909909
0xe7a43b8d738356c4ccf86b00a5c90089638d2ff0f29d42dd9b4a797be08f86fdClose Trade Mark...242988312022-01-29 9:28:346 mins ago0xd1bd53fbc7d020d29921e61d587fa2c948d55dc6 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.06657051963 33.186116293
0xa2b36d9019d6e2b9902e90a96d9841363c79d28fc3e638810b87a71b776766e3Update Tp242988142022-01-29 9:27:567 mins ago0xd1bd53fbc7d020d29921e61d587fa2c948d55dc6 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.003002449474 35.110208441
0x4eb2850511fa00fa7e6ace8fa7ed202ad2df4df7447d75c922a334eb2b88f738Close Trade Mark...242988092022-01-29 9:27:467 mins ago0x2c7c57ad608a6199e9607496fdb4cc3e626a3b70 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.065873213428 36.058102566
0x90a401e80c70d74bfcbca1204d14e603fb06f568af363d3291969e078b115095Close Trade Mark...242987782022-01-29 9:26:448 mins ago0xd3195b4071c45b6d0b5818cb91e99eba9fe71645 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.080414672784 40.08533667
0x321458e47ad165a24ca7b28cbbd8b5cd7efbe946cabe20ca0816457308d6f5e80x9b0a24e2242987722022-01-29 9:26:328 mins ago0x07ec0f1ad216b2a63d9feed595020ff04f2e17cc IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.05983037303 30.07000192
0x0b736d000f68120ed08ba2d7937f72dc992fe749d69a3eaad6aaeafee37a55db0x9b0a24e2242987682022-01-29 9:26:249 mins ago0x5067597dc0ac13add3f6b9a5de31c3c19de14c90 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.058629859576 30.070002588
0x14a661cbf375c03a375e877c9401a67a6a0e2c4bdab3e402fd480ac872430740Update Sl242987432022-01-29 9:25:309 mins ago0x5aea7cce91a13387f4e378ab6b16487e33e5555b IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.000362031809 4.074548793
0x28e41e2c2c52fd2e3f46a8cf5f917bec79710b619d0ca8a4fb88060913c4f1110x9b0a24e2242987372022-01-29 9:25:1810 mins ago0x692b8c626e05cd5da5e2a2f3f4ab7cbce45411aa IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.012667619778 6.366588269
0xa73ad311e2e0175b5b0c5135d26e6255c6cd34c84f711afd5908479bda1879a0Update Sl242986902022-01-29 9:23:4411 mins ago0x5aea7cce91a13387f4e378ab6b16487e33e5555b IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.003420351072 32.282081245
0xd4cc73768813e65ce67638132667d9fb9917de7c635d77087b286a505181c2110x9b0a24e2242986842022-01-29 9:23:2811 mins ago0x692b8c626e05cd5da5e2a2f3f4ab7cbce45411aa IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.063856365832 32.093415868
0x25ac2154235739ff1e96df36799d58d1db4fd47f67193c6a5a2aba2a8dbd567c0x9b0a24e2242986662022-01-29 9:22:5212 mins ago0x5aea7cce91a13387f4e378ab6b16487e33e5555b IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.064258587917 31.972930343
0xc75cae5ee4557bfd0057ac37ad1ed20475b0dbd1e8896876e6d9635c0c7affd2Close Trade Mark...242986402022-01-29 9:22:0013 mins ago0x692b8c626e05cd5da5e2a2f3f4ab7cbce45411aa IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.065787058307 32.794636926
0x52add361cc859d42952d1fefc68c64668866c0911dea27c75c5b22383f07120aClose Trade Mark...242986382022-01-29 9:21:5613 mins ago0x51be9e66dc05c1988bac3bf7af31331fc8e6830e IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.06475519523 32.280256502
0x4c2be3624ee39e9b31335a45ead566a804ffd4b1a046682991fa3e57a91db7eaUpdate Tp242986382022-01-29 9:21:5613 mins ago0xd1bd53fbc7d020d29921e61d587fa2c948d55dc6 IN  0x37c11410b2c2a1cd4b3a0de2bd3a1808e0528ebe0 MATIC0.003312825884 32.280256502
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GNSTradingV5

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-12-20
*/

// File: contracts\interfaces\UniswapRouterInterfaceV5.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

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

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

// File: contracts\interfaces\AggregatorInterfaceV5.sol

pragma solidity 0.8.7;

interface AggregatorInterfaceV5{
    enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE }
    function getPrice(uint,OrderType,uint) external returns(uint);
    function tokenPriceDai() external view returns(uint);
    function pairMinOpenLimitSlippageP(uint) external view returns(uint);
    function closeFeeP(uint) external view returns(uint);
    function linkFee(uint,uint) external view returns(uint);
    function openFeeP(uint) external view returns(uint);
    function pairMinLeverage(uint) external view returns(uint);
    function pairMaxLeverage(uint) external view returns(uint);
    function pairsCount() external view returns(uint);
    function tokenDaiReservesLp() external view returns(uint, uint);
    function referralP(uint) external view returns(uint);
    function nftLimitOrderFeeP(uint) external view returns(uint);
}

// File: contracts\interfaces\TokenInterfaceV5.sol

pragma solidity 0.8.7;

interface TokenInterfaceV5{
    function burn(address, uint256) external;
    function mint(address, uint256) external;
    function transfer(address, uint256) external returns (bool);
    function transferFrom(address, address, uint256) external returns(bool);
    function balanceOf(address) external view returns(uint256);
    function hasRole(bytes32, address) external view returns (bool);
    function approve(address, uint256) external returns (bool);
    function allowance(address, address) external view returns (uint256);
}

// File: contracts\interfaces\NftInterfaceV5.sol

pragma solidity 0.8.7;

interface NftInterfaceV5{
    function balanceOf(address) external view returns (uint);
    function ownerOf(uint) external view returns (address);
    function transferFrom(address, address, uint) external;
    function tokenOfOwnerByIndex(address, uint) external view returns(uint);
}

// File: contracts\interfaces\VaultInterfaceV5.sol

pragma solidity 0.8.7;

interface VaultInterfaceV5{
	function sendDaiToTrader(address, uint) external;
	function receiveDaiFromTrader(address, uint, uint) external;
	function currentBalanceDai() external view returns(uint);
}

// File: contracts\interfaces\StorageInterfaceV5.sol

pragma solidity 0.8.7;






interface StorageInterfaceV5{
    enum LimitOrder { TP, SL, LIQ, OPEN }
    struct Trader{
        uint leverageUnlocked;
        address referral;
        uint referralRewardsTotal;  // 1e18
    }
    struct Trade{
        address trader;
        uint pairIndex;
        uint index;
        uint initialPosToken;       // 1e18
        uint positionSizeDai;       // 1e18
        uint openPrice;             // PRECISION
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION
        uint sl;                    // PRECISION
    }
    struct TradeInfo{
        uint tokenId;
        uint tokenPriceDai;         // PRECISION
        uint openInterestDai;       // 1e18
        uint tpLastUpdated;
        uint slLastUpdated;
        bool beingMarketClosed;
    }
    struct OpenLimitOrder{
        address trader;
        uint pairIndex;
        uint index;
        uint positionSize;          // 1e18 (DAI or GFARM2)
        uint spreadReductionP;
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION (%)
        uint sl;                    // PRECISION (%)
        uint minPrice;              // PRECISION
        uint maxPrice;              // PRECISION
        uint block;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingMarketOrder{
        Trade trade;
        uint block;
        uint wantedPrice;           // PRECISION
        uint slippageP;             // PRECISION (%)
        uint spreadReductionP;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingNftOrder{
        address nftHolder;
        uint nftId;
        address trader;
        uint pairIndex;
        uint index;
        LimitOrder orderType;
    }
    function PRECISION() external pure returns(uint);
    function gov() external view returns(address);
    function dev() external view returns(address);
    function dai() external view returns(TokenInterfaceV5);
    function token() external view returns(TokenInterfaceV5);
    function linkErc677() external view returns(TokenInterfaceV5);
    function tokenDaiRouter() external view returns(UniswapRouterInterfaceV5);
    function priceAggregator() external view returns(AggregatorInterfaceV5);
    function vault() external view returns(VaultInterfaceV5);
    function trading() external view returns(address);
    function callbacks() external view returns(address);
    function handleTokens(address,uint,bool) external;
    function transferDai(address, address, uint) external;
    function transferLinkToAggregator(address, uint, uint) external;
    function unregisterTrade(address, uint, uint) external;
    function unregisterPendingMarketOrder(uint, bool) external;
    function unregisterOpenLimitOrder(address, uint, uint) external;
    function hasOpenLimitOrder(address, uint, uint) external view returns(bool);
    function storePendingMarketOrder(PendingMarketOrder memory, uint, bool) external;
    function storeReferral(address, address) external;
    function openTrades(address, uint, uint) external view returns(Trade memory);
    function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory);
    function updateSl(address, uint, uint, uint) external;
    function updateTp(address, uint, uint, uint) external;
    function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory);
    function spreadReductionsP(uint) external view returns(uint);
    function positionSizeTokenDynamic(uint,uint) external view returns(uint);
    function maxSlP() external view returns(uint);
    function storeOpenLimitOrder(OpenLimitOrder memory) external;
    function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory);
    function storePendingNftOrder(PendingNftOrder memory, uint) external;
    function updateOpenLimitOrder(OpenLimitOrder calldata) external;
    function firstEmptyTradeIndex(address, uint) external view returns(uint);
    function firstEmptyOpenLimitIndex(address, uint) external view returns(uint);
    function increaseNftRewards(uint, uint) external;
    function nftSuccessTimelock() external view returns(uint);
    function currentPercentProfit(uint,uint,bool,uint) external view returns(int);
    function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory);
    function setNftLastSuccess(uint) external;
    function updateTrade(Trade memory) external;
    function nftLastSuccess(uint) external view returns(uint);
    function unregisterPendingNftOrder(uint) external;
    function handleDevGovFees(uint, uint, bool, bool) external returns(uint);
    function distributeLpRewards(uint) external;
    function getReferral(address) external view returns(address);
    function increaseReferralRewards(address, uint) external;
    function storeTrade(Trade memory, TradeInfo memory) external;
    function setLeverageUnlocked(address, uint) external;
    function getLeverageUnlocked(address) external view returns(uint);
    function openLimitOrdersCount(address, uint) external view returns(uint);
    function maxOpenLimitOrdersPerPair() external view returns(uint);
    function openTradesCount(address, uint) external view returns(uint);
    function pendingMarketOpenCount(address, uint) external view returns(uint);
    function pendingMarketCloseCount(address, uint) external view returns(uint);
    function maxTradesPerPair() external view returns(uint);
    function maxTradesPerBlock() external view returns(uint);
    function tradesPerBlock(uint) external view returns(uint);
    function pendingOrderIdsCount(address) external view returns(uint);
    function maxPendingMarketOrders() external view returns(uint);
    function maxGainP() external view returns(uint);
    function defaultLeverageUnlocked() external view returns(uint);
    function openInterestDai(uint, uint) external view returns(uint);
    function getPendingOrderIds(address) external view returns(uint[] memory);
    function traders(address) external view returns(Trader memory);
    function nfts(uint) external view returns(NftInterfaceV5);
}

// File: contracts\GNSTradingV5.sol


pragma solidity 0.8.7;

contract GNSTradingV5{

    // Is contract active
    bool public isPaused;

    // Trading storage
    StorageInterfaceV5 public immutable storageT;

    // Variables (specific to this implementation)
    uint public maxPosDaiP = 1 * 1e10;                   // PRECISION (%)
    uint public minPosDai = 35 * 1e18;                   // 1e18 ($)
    uint public limitOrdersTimelock = 30;                // block
    uint public orderTimeout = 50;                       // block

    // Events
    event Pause(bool paused);
    event NumberUpdated(string name, uint value);
    event AddressUpdated(string name, address a);
    event MarketOrderInitiated(address trader, uint pairIndex, bool open, uint orderId);
    event NftOrderInitiated(address nftHolder, address trader, uint pairIndex, uint orderId);
    event OpenLimitPlaced(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitCanceled(address indexed trader, uint indexed pairIndex, uint index);
    event TpUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event SlUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event ChainlinkCallbackTimeout(uint orderId, StorageInterfaceV5.PendingMarketOrder order);
    event CouldNotCloseTrade(address indexed trader, uint indexed pairIndex, uint index, string message);

    constructor(StorageInterfaceV5 _storageT) {
        require(address(_storageT) != address(0));
        storageT = _storageT;
    }

    // 1. MANAGE STATE
    
    // Modifiers
    modifier onlyGov(){ require(msg.sender == storageT.gov(), "GOV_ONLY"); _; }

    // Prevent doing anything => during contracts update
    function pause() external onlyGov{ isPaused = !isPaused; emit Pause(isPaused); }

    // Manage variables
    function setMaxPosDaiP(uint _maxP) external onlyGov{
        require(_maxP > 0);
        maxPosDaiP = _maxP;
        emit NumberUpdated("maxPosDaiP", _maxP);
    }
    function setMinPosDai(uint _min) external onlyGov{
        require(_min > 0);
        minPosDai = _min;
        emit NumberUpdated("minPosDai", _min);
    }
    function setLimitOrdersTimelock(uint _blocks) external onlyGov{
        require(_blocks > 0);
        limitOrdersTimelock = _blocks;
        emit NumberUpdated("limitOrdersTimelock", _blocks);
    }
    function setOrderTimeout(uint _orderTimeout) external onlyGov{
        require(_orderTimeout > 0);
        orderTimeout = _orderTimeout;
        emit NumberUpdated("orderTimeout", _orderTimeout);
    }

    // 2. EXTERNAL TRADING FUNCTIONS

    // Modifiers
    modifier notContract(){ require(tx.origin == msg.sender); _; }
    modifier notPaused(){ require(!isPaused, "PAUSED"); _; }

    // Open a new trade (market or limit)
    function openTrade(
        StorageInterfaceV5.Trade memory t,
        bool _limit,
        uint _spreadReductionId,
        uint _slippageP,
        address _referral
    ) external notContract notPaused{

        require(storageT.openTradesCount(msg.sender, t.pairIndex) + storageT.pendingMarketOpenCount(msg.sender, t.pairIndex) 
            + storageT.openLimitOrdersCount(msg.sender, t.pairIndex) < storageT.maxTradesPerPair(), 
            "MAX_TRADES_PER_PAIR");
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        require(t.positionSizeDai <= storageT.vault().currentBalanceDai()*maxPosDaiP/100/storageT.PRECISION(), 
            "ABOVE_MAX_POS");
        require(t.positionSizeDai >= minPosDai, "BELOW_MIN_POS");
        require(t.leverage > 0 && t.leverage >= storageT.priceAggregator().pairMinLeverage(t.pairIndex) 
            && t.leverage <= storageT.priceAggregator().pairMaxLeverage(t.pairIndex), 
            "LEVERAGE_INCORRECT");
        require(t.leverage <= storageT.defaultLeverageUnlocked() || t.leverage <= storageT.getLeverageUnlocked(msg.sender),
            "LEVERAGE_NOT_UNLOCKED");
        require(_spreadReductionId == 0 || storageT.nfts(_spreadReductionId-1).balanceOf(msg.sender) > 0,
            "NO_CORRESPONDING_NFT_SPREAD_REDUCTION");
        require(t.positionSizeDai * t.leverage + storageT.openInterestDai(t.pairIndex, t.buy ? 0 : 1) 
            <= storageT.openInterestDai(t.pairIndex, 2), "MAX_OPEN_INTEREST");
        require(t.tp == 0 || t.buy && t.openPrice < t.tp || !t.buy && t.openPrice > t.tp, "WRONG_TP");
        require(t.sl == 0 || t.buy && t.openPrice > t.sl || !t.buy && t.openPrice < t.sl, "WRONG_SL");

        storageT.transferDai(msg.sender, address(storageT), t.positionSizeDai);

        if(_limit){
            require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(t.pairIndex),
                "SLIPPAGE_TOO_SMALL");

            uint slip = t.openPrice*_slippageP/storageT.PRECISION()/100;
            uint index = storageT.firstEmptyOpenLimitIndex(msg.sender, t.pairIndex);

            storageT.storeOpenLimitOrder(StorageInterfaceV5.OpenLimitOrder(
                msg.sender,
                t.pairIndex,
                index,
                t.positionSizeDai,
                _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                t.buy,
                t.leverage,
                t.tp,
                t.sl,
                t.buy ? t.openPrice - slip : t.openPrice,
                t.buy ? t.openPrice : t.openPrice + slip,
                block.number,
                0
            ));

            emit OpenLimitPlaced(msg.sender, t.pairIndex, index);
        }else{
            uint order = storageT.priceAggregator().getPrice(
                t.pairIndex, 
                AggregatorInterfaceV5.OrderType.MARKET_OPEN, 
                t.positionSizeDai * t.leverage
            );

            storageT.storePendingMarketOrder(
                StorageInterfaceV5.PendingMarketOrder(
                    StorageInterfaceV5.Trade(
                        msg.sender,
                        t.pairIndex,
                        0, 0,
                        t.positionSizeDai,
                        0, 
                        t.buy,
                        t.leverage,
                        t.tp,
                        t.sl
                    ),
                    0,
                    t.openPrice,
                    _slippageP,
                    _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                    0
                ), order, true
            );

            emit MarketOrderInitiated(msg.sender, t.pairIndex, true, order);
        }

        storageT.storeReferral(msg.sender, _referral);
    }

    // Update open limit order
    function updateOpenLimitOrder(
        uint _pairIndex, 
        uint _index, 
        uint _price,        // PRECISION
        uint _slippageP,    // PRECISION,
        uint _tp,
        uint _sl
    ) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");
        require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(_pairIndex), 
            "MIN_LIMIT_SLIPPAGE_P");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, 
            "LIMIT_TIMELOCK");

        require(_tp == 0 || o.buy && _price < _tp || !o.buy && _price > _tp, "WRONG_TP");
        require(_sl == 0 || o.buy && _price > _sl || !o.buy && _price < _sl, "WRONG_SL");

        uint slip = _price*_slippageP/storageT.PRECISION()/100;
        o.minPrice = o.buy ? _price - slip : _price;
        o.maxPrice = o.buy ? _price : _price + slip;
        o.tp = _tp;
        o.sl = _sl;

        storageT.updateOpenLimitOrder(o);

        emit OpenLimitUpdated(msg.sender, _pairIndex, _index);
    }

    // Cancel open limit order
    function cancelOpenLimitOrder(uint _pairIndex, uint _index) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.transferDai(address(storageT), msg.sender, o.positionSize);

        storageT.unregisterOpenLimitOrder(msg.sender, _pairIndex, _index);
        emit OpenLimitCanceled(msg.sender, _pairIndex, _index);
    }

    // Update take profit for an open trade
    // Set to 0 to remove
    // Can be set in loss (for example exit long on a bounce even if in loss)
    // If long and tp is below current price => can be closed instantly
    // If short and tp is above current price => can be closed instantly
    function updateTp(uint _pairIndex, uint _index, uint _newTp) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);

        require(t.leverage > 0, "NO_TRADE");
        require(block.number - i.tpLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.updateTp(msg.sender, _pairIndex, _index, _newTp);

        emit TpUpdated(msg.sender, _pairIndex, _index);
    }

    // Update stop loss for an open trade
    // Set to 0 to remove
    // If long and sl is above current price => can be closed instantly
    // If short and sl is below current price => can be closed instantly
    // Can be set in profit = stop profit
    // must be above -STOP_LOSS_P profit => if liq at -90% => above -80%
    // otherwise can set at -89% and earn 11% of position size while at -90% liquidation earns 0 to trader
    function updateSl(uint _pairIndex, uint _index, uint _newSl) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(t.leverage > 0, "NO_TRADE");

        uint maxSlDist = t.openPrice * storageT.maxSlP() / 100 / t.leverage;
        require(_newSl == 0 || t.buy && _newSl >= t.openPrice - maxSlDist 
            || !t.buy && _newSl <= t.openPrice + maxSlDist, "SL_TOO_BIG");
        require(block.number - i.slLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");
        
        storageT.updateSl(msg.sender, _pairIndex, _index, _newSl);

        emit SlUpdated(msg.sender, _pairIndex, _index);
    }

    // Close open trade at current price
    function closeTradeMarket(uint _pairIndex, uint _index) external notContract notPaused{
        
        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        require(!i.beingMarketClosed, "ALREADY_BEING_CLOSED");
        require(t.leverage > 0, "NO_TRADE");

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            AggregatorInterfaceV5.OrderType.MARKET_CLOSE, 
            t.initialPosToken * t.leverage * i.tokenPriceDai / storageT.PRECISION()
        );

        storageT.storePendingMarketOrder(StorageInterfaceV5.PendingMarketOrder(
            StorageInterfaceV5.Trade(
                msg.sender,
                _pairIndex,
                _index,
                0, 0, 0, false, 0, 0, 0
            ),
            0, 0, 0, 0, 0
        ), order, false);
        emit MarketOrderInitiated(msg.sender, _pairIndex, false, order);
    }

    // Try to execute a tp, sl, liquidation, or limit long/short (only done by NFT holders)
    function executeNftOrder(
        StorageInterfaceV5.LimitOrder _orderType, 
        address _trader, 
        uint _pairIndex, 
        uint _index,
        uint _nftId, 
        uint _nftType
    ) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(_trader, _pairIndex, _index);
        require(_nftType > 0 && _nftType < 6, "WRONG_NFT_TYPE");
        require(msg.sender == storageT.gov() || storageT.nfts(_nftType-1).ownerOf(_nftId) == msg.sender,
            "NO_NFT");
        require(block.number >= storageT.nftLastSuccess(_nftId)+storageT.nftSuccessTimelock(),
            "SUCCESS_TIMELOCK");
        require(_orderType != StorageInterfaceV5.LimitOrder.OPEN || storageT.hasOpenLimitOrder(_trader, _pairIndex, _index), 
            "NO_LIMIT");
        require(_orderType == StorageInterfaceV5.LimitOrder.OPEN || t.leverage > 0, "NO_TRADE");
        require(_orderType != StorageInterfaceV5.LimitOrder.SL || t.sl > 0, "NO_SL");

        uint leveragedPosDai;
        if(_orderType == StorageInterfaceV5.LimitOrder.OPEN){
            StorageInterfaceV5.OpenLimitOrder memory l = storageT.getOpenLimitOrder(_trader, _pairIndex, _index);
            leveragedPosDai = l.positionSize * l.leverage;
        }else{
            StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(_trader, _pairIndex, _index);
            leveragedPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage / storageT.PRECISION();
        }

        storageT.transferLinkToAggregator(msg.sender, _pairIndex, leveragedPosDai);

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            _orderType == StorageInterfaceV5.LimitOrder.OPEN ? 
                AggregatorInterfaceV5.OrderType.LIMIT_OPEN : 
                AggregatorInterfaceV5.OrderType.LIMIT_CLOSE,
            leveragedPosDai
        );

        storageT.storePendingNftOrder(StorageInterfaceV5.PendingNftOrder(
            msg.sender,
            _nftId,
            _trader,
            _pairIndex,
            _index,
            _orderType
        ), order);
        emit NftOrderInitiated(msg.sender, _trader, _pairIndex, order);
    }

    // Claim back position size if market order callback not executed by oracle nodes after 50 blocks
    function openTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage > 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.transferDai(address(storageT), msg.sender, o.trade.positionSizeDai);
        storageT.unregisterPendingMarketOrder(_order, true);

        emit ChainlinkCallbackTimeout(_order, o);
    }

    // Trigger market close again if market close order callback not executed by oracle nodes after 50 blocks
    function closeTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);
        StorageInterfaceV5.Trade memory t = storageT.openTrades(o.trade.trader, o.trade.pairIndex, o.trade.index);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage == 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.unregisterPendingMarketOrder(_order, false);

        (bool success, bytes memory data) = address(this).delegatecall(
            abi.encodeWithSignature(
                "closeTradeMarket(uint256,uint256)",
                t.pairIndex,
                t.index
            )
        );

        if(!success){
            emit CouldNotCloseTrade(msg.sender, t.pairIndex, t.index, string(data));
        }

        emit ChainlinkCallbackTimeout(_order, o);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"indexed":false,"internalType":"struct StorageInterfaceV5.PendingMarketOrder","name":"order","type":"tuple"}],"name":"ChainlinkCallbackTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"CouldNotCloseTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"MarketOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"NftOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"SlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TpUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"cancelOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"closeTradeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"closeTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StorageInterfaceV5.LimitOrder","name":"_orderType","type":"uint8"},{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_nftType","type":"uint256"}],"name":"executeNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrdersTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPosDaiP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPosDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"t","type":"tuple"},{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_spreadReductionId","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"openTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orderTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setLimitOrdersTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxP","type":"uint256"}],"name":"setMaxPosDaiP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinPosDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderTimeout","type":"uint256"}],"name":"setOrderTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageT","outputs":[{"internalType":"contract StorageInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"uint256","name":"_tp","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSl","type":"uint256"}],"name":"updateSl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526402540be4006001556801e5b8fa8fe2ac0000600255601e60035560326004553480156200003157600080fd5b5060405162005e2238038062005e2283398101604081905262000054916200007e565b6001600160a01b0381166200006857600080fd5b60601b6001600160601b031916608052620000b0565b6000602082840312156200009157600080fd5b81516001600160a01b0381168114620000a957600080fd5b9392505050565b60805160601c615b46620002dc600039600081816101920152818161030701528181610468015281816105bd01528181610745015281816108dc0152818161096f01528181610a7301528181610b3901528181610cd101528181610eea01528181610fb4015281816110710152818161112e01528181611213015281816112b7015281816113880152818161142c015281816114fd015281816115930152818161176a0152818161188b015281816119f101528181611abb01528181611ba501528181611d8501528181611e090152818161205d015281816120d70152818161223c01528181612330015281816123b601528181612431015281816125fd01528181612729015281816128040152818161298b01528181612a5c01528181612b1001528181612b8e01528181612c3201528181612d0301528181612da701528181612f0b01528181612fad015281816130dd015281816132a70152818161338401528181613430015281816135ac0152818161366a0152818161378e0152818161395801528181613a2301528181613aa301528181613b9f01528181613c0701528181613d3d01528181613ed101528181613fb00152818161409c0152818161414e0152818161425e01528181614312015281816143d8015281816145bb015281816146c9015281816147840152818161490501528181614aaf01528181614bdc01528181614c8601528181614ddb01528181614f9c01528181615050015261519f0152615b466000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063b187bd26116100cd578063befa341111610081578063d0eccac511610066578063d0eccac5146102cc578063d4a1caa7146102df578063d8defd15146102f257600080fd5b8063befa3411146102b0578063c641558e146102b957600080fd5b8063b9b6573a116100b2578063b9b6573a14610281578063ba20600414610294578063be73fb991461029d57600080fd5b8063b187bd2614610251578063b8ebd5cc1461026e57600080fd5b80638456cb5911610124578063990382cf11610109578063990382cf146102185780639b0a24e21461022b578063a2a3c0cb1461023e57600080fd5b80638456cb59146101fd578063876d3abd1461020557600080fd5b8063530e40bb11610155578063530e40bb146101cc5780635bd2150d146101e157806381fc182b146101ea57600080fd5b80630890d22a1461017157806316fff0741461018d575b600080fd5b61017a60035481565b6040519081526020015b60405180910390f35b6101b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610184565b6101df6101da366004615670565b610305565b005b61017a60025481565b6101df6101f8366004615670565b610466565b6101df6105bb565b6101df610213366004615670565b6106e4565b6101df610226366004615670565b610a12565b6101df610239366004615591565b610ea0565b6101df61024c3660046156a2565b6129ee565b60005461025e9060ff1681565b6040519015158152602001610184565b6101df61027c366004615345565b61322f565b6101df61028f3660046156a2565b613e66565b61017a60045481565b6101df6102ab3660046156c4565b6141f0565b61017a60015481565b6101df6102c73660046156f0565b61465e565b6101df6102da366004615670565b614c84565b6101df6102ed366004615670565b614dd9565b6101df6103003660046156c4565b614f2e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561035e57600080fd5b505afa158015610372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103969190615304565b6001600160a01b0316336001600160a01b0316146103e65760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f357600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104bf57600080fd5b505afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190615304565b6001600160a01b0316336001600160a01b0316146105425760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103dd565b6000811161054f57600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561061457600080fd5b505afa158015610628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064c9190615304565b6001600160a01b0316336001600160a01b0316146106975760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103dd565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106f057600080fd5b60005460ff161561072c5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b60405163b66e6b0560e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561079057600080fd5b505afa1580156107a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c89190615455565b9050600081602001511180156107ef575060045481602001516107eb9190615a00565b4310155b61082a5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103dd565b8051516001600160a01b031633146108755760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103dd565b805160e001516108c75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103dd565b80516080015160405163373873db60e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050604051630195728b60e71b815260048101859052600160248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063cab945809150604401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb18282604051610a06929190615981565b60405180910390a15050565b323314610a1e57600080fd5b60005460ff1615610a5a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b60405163b66e6b0560e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190615455565b80518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a3a80ffe906064016101406040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb49190615574565b905060008260200151118015610bdb57506004548260200151610bd79190615a00565b4310155b610c165760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103dd565b8151516001600160a01b03163314610c615760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103dd565b815160e0015115610cb45760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103dd565b604051630195728b60e71b815260048101849052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cab9458090604401600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610d66929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610dc991906157e1565b600060405180830381855af49150503d8060008114610e04576040519150601f19603f3d011682016040523d82523d6000602084013e610e09565b606091505b509150915081610e60578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d49856040015184604051610e57929190615947565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb18585604051610e91929190615981565b60405180910390a15050505050565b323314610eac57600080fd5b60005460ff1615610ee85760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4157600080fd5b505afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190615689565b60208601516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906397e7995a9060440160206040518083038186803b158015610ffe57600080fd5b505afa158015611012573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110369190615689565b60208701516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639c8912f19060440160206040518083038186803b1580156110bb57600080fd5b505afa1580156110cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f39190615689565b60208801516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631c8636b49060440160206040518083038186803b15801561117857600080fd5b505afa15801561118c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b09190615689565b6111ba9190615a00565b6111c49190615a00565b106112115760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561126a57600080fd5b505afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190615689565b6040516352e5398f60e01b81524360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906352e5398f9060240160206040518083038186803b15801561130157600080fd5b505afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190615689565b106113865760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190615689565b60405163f7b3c6fd60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f7b3c6fd9060240160206040518083038186803b15801561147657600080fd5b505afa15801561148a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae9190615689565b106114fb5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561155457600080fd5b505afa158015611568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158c9190615689565b60646001547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115ea57600080fd5b505afa1580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116229190615304565b6001600160a01b0316630851a2026040518163ffffffff1660e01b815260040160206040518083038186803b15801561165a57600080fd5b505afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116929190615689565b61169c9190615a3a565b6116a69190615a18565b6116b09190615a18565b856080015111156117035760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103dd565b600254856080015110156117595760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103dd565b60008560e0015111801561188257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c157600080fd5b505afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190615304565b6001600160a01b03166359a992d086602001516040518263ffffffff1660e01b815260040161182a91815260200190565b60206040518083038186803b15801561184257600080fd5b505afa158015611856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187a9190615689565b8560e0015110155b80156119a357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e257600080fd5b505afa1580156118f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191a9190615304565b6001600160a01b031663281b693c86602001516040518263ffffffff1660e01b815260040161194b91815260200190565b60206040518083038186803b15801561196357600080fd5b505afa158015611977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199b9190615689565b8560e0015111155b6119ef5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4857600080fd5b505afa158015611a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a809190615689565b8560e00151111580611b4557506040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906368ca199d9060240160206040518083038186803b158015611b0557600080fd5b505afa158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d9190615689565b8560e0015111155b611b915760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103dd565b821580611cd7575060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663265aa621611bd5600187615a59565b6040518263ffffffff1660e01b8152600401611bf391815260200190565b60206040518083038186803b158015611c0b57600080fd5b505afa158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190615304565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611c9d57600080fd5b505afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd59190615689565b115b611d495760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103dd565b60208501516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906328daca219060440160206040518083038186803b158015611dcf57600080fd5b505afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e079190615689565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166328daca2187602001518860c00151611e4b576001611e4e565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd9190615689565b8660e001518760800151611ef19190615a3a565b611efb9190615a00565b1115611f495760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103dd565b6101008501511580611f6f57508460c001518015611f6f57508461010001518560a00151105b80611f8f57508460c00151158015611f8f57508461010001518560a00151115b611fc65760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103dd565b6101208501511580611fec57508460c001518015611fec57508461012001518560a00151115b8061200c57508460c0015115801561200c57508461012001518560a00151105b6120435760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103dd565b608085015160405163373873db60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482018190526044820192909252636e70e7b690606401600060405180830381600087803b1580156120b757600080fd5b505af11580156120cb573d6000803e3d6000fd5b5050505083156125f9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561212e57600080fd5b505afa158015612142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121669190615304565b6001600160a01b031663d5a9e90c86602001516040518263ffffffff1660e01b815260040161219791815260200190565b60206040518083038186803b1580156121af57600080fd5b505afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190615689565b8210156122365760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103dd565b600060647f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561229357600080fd5b505afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190615689565b848860a001516122db9190615a3a565b6122e59190615a18565b6122ef9190615a18565b60208701516040517f44d44f5a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091529091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561237a57600080fd5b505afa15801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b29190615689565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018a6020015181526020018481526020018a608001518152602001600089116124275760006124cf565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016633dae10a061246160018c615a59565b6040518263ffffffff1660e01b815260040161247f91815260200190565b60206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190615689565b81526020018a60c00151151581526020018a60e0015181526020018a610100015181526020018a610120015181526020018a60c00151612513578a60a00151612523565b858b60a001516125239190615a59565b81526020018a60c0015161254657858b60a001516125419190615a00565b61254c565b8a60a001515b815260200143815260200160008152506040518263ffffffff1660e01b815260040161257891906157fd565b600060405180830381600087803b15801561259257600080fd5b505af11580156125a6573d6000803e3d6000fd5b505050508660200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c1811059343836040516125ea91815260200190565b60405180910390a3505061294d565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190615304565b6001600160a01b031663fa8dd498876020015160008960e001518a608001516126b59190615a3a565b6040518463ffffffff1660e01b81526004016126d393929190615926565b602060405180830381600087803b1580156126ed57600080fd5b505af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615689565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018b60200151815260200160008152602001600081526020018b608001518152602001600081526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b61012001518152508152602001600081526020018960a001518152602001868152602001600088116127fa5760006128a2565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016633dae10a061283460018b615a59565b6040518263ffffffff1660e01b815260040161285291815260200190565b60206040518083038186803b15801561286a57600080fd5b505afa15801561287e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a29190615689565b815260200160008152508360016040518463ffffffff1660e01b81526004016128cd9392919061589d565b600060405180830381600087803b1580156128e757600080fd5b505af11580156128fb573d6000803e3d6000fd5b50505050602086810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382811660248301527f00000000000000000000000000000000000000000000000000000000000000001690639d1a107390604401600060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050505050505050565b3233146129fa57600080fd5b60005460ff1615612a365760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b6040516351d407ff60e11b815233600482015260248101839052604481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aa757600080fd5b505afa158015612abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adf9190615574565b604051638c8ff1d560e01b815233600482015260248101859052604481018490529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638c8ff1d59060640160c06040518083038186803b158015612b5257600080fd5b505afa158015612b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8a91906154e6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612be557600080fd5b505afa158015612bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1d9190615689565b6040516352e5398f60e01b81524360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c7c57600080fd5b505afa158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb49190615689565b10612d015760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5a57600080fd5b505afa158015612d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d929190615689565b60405163f7b3c6fd60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612df157600080fd5b505afa158015612e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e299190615689565b10612e765760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103dd565b8060a0015115612ec85760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103dd565b60008260e0015111612f075760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103dd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190615304565b6001600160a01b031663fa8dd4988660017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561300457600080fd5b505afa158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190615689565b86602001518860e0015189606001516130559190615a3a565b61305f9190615a3a565b6130699190615a18565b6040518463ffffffff1660e01b815260040161308793929190615926565b602060405180830381600087803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d99190615689565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b81526004016131b49392919061589d565b600060405180830381600087803b1580156131ce57600080fd5b505af11580156131e2573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab92506080019050610e91565b32331461323b57600080fd5b60005460ff16156132775760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b6040516351d407ff60e11b81526001600160a01b03868116600483015260248201869052604482018590526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a3a80ffe906064016101406040518083038186803b1580156132ec57600080fd5b505afa158015613300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133249190615574565b90506000821180156133365750600682105b6133825760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156133db57600080fd5b505afa1580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134139190615304565b6001600160a01b0316336001600160a01b0316148061355e5750337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663265aa621613468600186615a59565b6040518263ffffffff1660e01b815260040161348691815260200190565b60206040518083038186803b15801561349e57600080fd5b505afa1580156134b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d69190615304565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161350391815260200190565b60206040518083038186803b15801561351b57600080fd5b505afa15801561352f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135539190615304565b6001600160a01b0316145b6135aa5760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561360357600080fd5b505afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190615689565b6040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156136b457600080fd5b505afa1580156136c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ec9190615689565b6136f69190615a00565b4310156137455760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103dd565b600387600381111561375957613759615ab6565b1415806138085750604051636e6f99cd60e11b81526001600160a01b03878116600483015260248201879052604482018690527f0000000000000000000000000000000000000000000000000000000000000000169063dcdf339a9060640160206040518083038186803b1580156137d057600080fd5b505afa1580156137e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138089190615328565b61383f5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103dd565b600387600381111561385357613853615ab6565b1480613863575060008160e00151115b61389a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103dd565b60018760038111156138ae576138ae615ab6565b1415806138c057506000816101200151115b61390c5760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103dd565b6000600388600381111561392257613922615ab6565b14156139f357604051632e21e28b60e21b81526001600160a01b03888116600483015260248201889052604482018790526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b8878a2c906064016101a06040518083038186803b15801561399d57600080fd5b505afa1580156139b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d591906153a2565b90508060c0015181606001516139eb9190615a3a565b915050613b63565b604051638c8ff1d560e01b81526001600160a01b03888116600483015260248201889052604482018790526000917f000000000000000000000000000000000000000000000000000000000000000090911690638c8ff1d59060640160c06040518083038186803b158015613a6757600080fd5b505afa158015613a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9f91906154e6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015613afa57600080fd5b505afa158015613b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b329190615689565b8360e0015182602001518560600151613b4b9190615a3a565b613b559190615a3a565b613b5f9190615a18565b9150505b6040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636690a80690606401600060405180830381600087803b158015613beb57600080fd5b505af1158015613bff573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5e57600080fd5b505afa158015613c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c969190615304565b6001600160a01b031663fa8dd4988860038c6003811115613cb957613cb9615ab6565b14613cc5576003613cc8565b60025b856040518463ffffffff1660e01b8152600401613ce793929190615926565b602060405180830381600087803b158015613d0157600080fd5b505af1158015613d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d399190615689565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613db757613db7615ab6565b815250836040518363ffffffff1660e01b8152600401613dd89291906158c4565b600060405180830381600087803b158015613df257600080fd5b505af1158015613e06573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613e7257600080fd5b60005460ff1615613eae5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b604051636e6f99cd60e11b815233600482015260248101839052604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613f1b57600080fd5b505afa158015613f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f539190615328565b613f8a5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103dd565b604051632e21e28b60e21b815233600482015260248101839052604481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613ffb57600080fd5b505afa15801561400f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403391906153a2565b9050600354816101600151436140499190615a59565b10156140885760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103dd565b606081015160405163373873db60e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600482018190523360248301526044820192909252636e70e7b690606401600060405180830381600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b50506040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101869052604481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b15801561419c57600080fd5b505af11580156141b0573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b3233146141fc57600080fd5b60005460ff16156142385760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b6040516351d407ff60e11b815233600482015260248101849052604481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156142a957600080fd5b505afa1580156142bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e19190615574565b604051638c8ff1d560e01b815233600482015260248101869052604481018590529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638c8ff1d59060640160c06040518083038186803b15801561435457600080fd5b505afa158015614368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061438c91906154e6565b905060008260e00151116143cd5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103dd565b60008260e0015160647f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561442f57600080fd5b505afa158015614443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144679190615689565b8560a001516144769190615a3a565b6144809190615a18565b61448a9190615a18565b90508315806144b457508260c0015180156144b45750808360a001516144b09190615a59565b8410155b806144db57508260c001511580156144db5750808360a001516144d79190615a00565b8411155b6145275760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103dd565b60035460808301516145399043615a59565b10156145785760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103dd565b6040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a354418190608401600060405180830381600087803b15801561460757600080fd5b505af115801561461b573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461466a57600080fd5b60005460ff16156146a65760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b604051636e6f99cd60e11b815233600482015260248101879052604481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063dcdf339a9060640160206040518083038186803b15801561471357600080fd5b505afa158015614727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061474b9190615328565b6147825760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103dd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156147db57600080fd5b505afa1580156147ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148139190615304565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161484091815260200190565b60206040518083038186803b15801561485857600080fd5b505afa15801561486c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148909190615689565b8310156148df5760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103dd565b604051632e21e28b60e21b815233600482015260248101879052604481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b8878a2c906064016101a06040518083038186803b15801561495057600080fd5b505afa158015614964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498891906153a2565b90506003548161016001514361499e9190615a59565b10156149dd5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103dd565b8215806149f557508060a0015180156149f557508285105b80614a0c57508060a00151158015614a0c57508285115b614a435760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103dd565b811580614a5b57508060a001518015614a5b57508185115b80614a7257508060a00151158015614a7257508185105b614aa95760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103dd565b600060647f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015614b0657600080fd5b505afa158015614b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b3e9190615689565b614b488789615a3a565b614b529190615a18565b614b5c9190615a18565b90508160a00151614b6d5785614b77565b614b778187615a59565b61012083015260a0820151614b9557614b908187615a00565b614b97565b855b61014083015260e0820184905261010082018390526040517fb767608a0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b767608a90614c119085906004016157fd565b600060405180830381600087803b158015614c2b57600080fd5b505af1158015614c3f573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614cdd57600080fd5b505afa158015614cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d159190615304565b6001600160a01b0316336001600160a01b031614614d605760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103dd565b60008111614d6d57600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614e3257600080fd5b505afa158015614e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e6a9190615304565b6001600160a01b0316336001600160a01b031614614eb55760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103dd565b60008111614ec257600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045b565b323314614f3a57600080fd5b60005460ff1615614f765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103dd565b6040516351d407ff60e11b815233600482015260248101849052604481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614fe757600080fd5b505afa158015614ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061501f9190615574565b604051638c8ff1d560e01b815233600482015260248101869052604481018590529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638c8ff1d59060640160c06040518083038186803b15801561509257600080fd5b505afa1580156150a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150ca91906154e6565b905060008260e001511161510b5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103dd565b600354606082015161511d9043615a59565b101561515c5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103dd565b6040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810186905260448101859052606481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637fdb96f390608401600060405180830381600087803b1580156151eb57600080fd5b505af11580156151ff573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b803561524b81615aed565b919050565b805161524b81615aed565b803561524b81615b02565b805161524b81615b02565b6000610140828403121561528457600080fd5b61528c615996565b905061529782615250565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a08201526152d760c08301615266565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561531657600080fd5b815161532181615aed565b9392505050565b60006020828403121561533a57600080fd5b815161532181615b02565b60008060008060008060c0878903121561535e57600080fd5b86356004811061536d57600080fd5b9550602087013561537d81615aed565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156153b557600080fd5b6153bd6159ce565b6153c683615250565b8152602083015160208201526040830151604082015260608301516060820152608083015160808201526153fc60a08401615266565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e0828403121561546857600080fd5b60405160c0810181811067ffffffffffffffff8211171561549957634e487b7160e01b600052604160045260246000fd5b6040526154a68484615271565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c082840312156154f857600080fd5b60405160c0810181811067ffffffffffffffff8211171561552957634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015161556881615b02565b60a08201529392505050565b6000610140828403121561558757600080fd5b6153218383615271565b60008060008060008587036101c08112156155ab57600080fd5b610140808212156155bb57600080fd5b6155c3615996565b91506155ce88615240565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261560e60c0890161525b565b60c083015260e088013560e083015261010080890135818401525061012080890135818401525081965061564381890161525b565b95505050610160860135925061018086013591506156646101a08701615240565b90509295509295909350565b60006020828403121561568257600080fd5b5035919050565b60006020828403121561569b57600080fd5b5051919050565b600080604083850312156156b557600080fd5b50508035926020909101359150565b6000806000606084860312156156d957600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561570957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015161578760c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b600082516157f3818460208701615a70565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015161584a60a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b61022081016158ac8286615733565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161591381615acc565b60a083015260c090910191909152919050565b8381526060810161593684615acc565b602082019390935260400152919050565b828152604060208201526000825180604084015261596c816060850160208701615a70565b601f01601f1916919091016060019392505050565b82815261020081016153216020830184615733565b604051610140810167ffffffffffffffff811182821017156159c857634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff811182821017156159c857634e487b7160e01b600052604160045260246000fd5b60008219821115615a1357615a13615aa0565b500190565b600082615a3557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615a5457615a54615aa0565b500290565b600082821015615a6b57615a6b615aa0565b500390565b60005b83811015615a8b578181015183820152602001615a73565b83811115615a9a576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60048110615aea57634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b0381168114615aea57600080fd5b8015158114615aea57600080fdfea2646970667358221220e67a92afbfb5b0247be33ee0410faaba34db119cc88ca8ec442df3ba51ac73e764736f6c63430008070033000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

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

000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

-----Decoded View---------------
Arg [0] : _storageT (address): 0xaee4d11a16b2bc65edd6416fb626eb404a6d65bd

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd


Deployed ByteCode Sourcemap

9218:16610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:36;;;;;;;;;28069:25:1;;;28057:2;28042:18;9578:36:0;;;;;;;;9328:44;;;;;;;;-1:-1:-1;;;;;11224:55:1;;;11206:74;;11194:2;11179:18;9328:44:0;11060:226:1;11299:160:0;;;;;;:::i;:::-;;:::i;:::-;;9508:33;;;;;;11126:167;;;;;;:::i;:::-;;:::i;11013:80::-;;;:::i;24047:628::-;;;;;;:::i;:::-;;:::i;24794:1031::-;;;;;;:::i;:::-;;:::i;12119:4094::-;;;;;;:::i;:::-;;:::i;20296:1311::-;;;;;;:::i;:::-;;:::i;9275:20::-;;;;;;;;;;;;14241:14:1;;14234:22;14216:41;;14204:2;14189:18;9275:20:0;14076:187:1;21708:2228:0;;;;;;:::i;:::-;;:::i;17494:612::-;;;;;;:::i;:::-;;:::i;9645:29::-;;;;;;19435:811;;;;;;:::i;:::-;;:::i;9433:33::-;;;;;;16253:1201;;;;;;:::i;:::-;;:::i;11673:205::-;;;;;;:::i;:::-;;:::i;11465:202::-;;;;;;:::i;:::-;;:::i;18412:573::-;;;;;;:::i;:::-;;:::i;11299:160::-;10914:8;-1:-1:-1;;;;;10914:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10900:28:0;:10;-1:-1:-1;;;;;10900:28:0;;10892:49;;;;-1:-1:-1;;;10892:49:0;;25012:2:1;10892:49:0;;;24994:21:1;25051:1;25031:18;;;25024:29;-1:-1:-1;;;25069:18:1;;;25062:38;25117:18;;10892:49:0;;;;;;;;;11374:1:::1;11367:4;:8;11359:17;;;::::0;::::1;;11387:9;:16:::0;;;11419:32:::1;::::0;;18566:21:1;;;18623:1;18603:18;;;18596:29;;;;18661:11;18656:2;18641:18;;18634:39;18740:4;18725:20;;18718:36;;;11419:32:0::1;::::0;18705:3:1;18690:19;11419:32:0::1;;;;;;;;11299:160:::0;:::o;11126:167::-;10914:8;-1:-1:-1;;;;;10914:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10900:28:0;:10;-1:-1:-1;;;;;10900:28:0;;10892:49;;;;-1:-1:-1;;;10892:49:0;;25012:2:1;10892:49:0;;;24994:21:1;25051:1;25031:18;;;25024:29;-1:-1:-1;;;25069:18:1;;;25062:38;25117:18;;10892:49:0;24810:331:1;10892:49:0;11204:1:::1;11196:5;:9;11188:18;;;::::0;::::1;;11217:10;:18:::0;;;11251:34:::1;::::0;;23587:21:1;;;23644:2;23624:18;;;23617:30;;;;23683:12;23678:2;23663:18;;23656:40;23763:4;23748:20;;23741:36;;;11251:34:0::1;::::0;23728:3:1;23713:19;11251:34:0::1;23375:408:1::0;11013:80:0;10914:8;-1:-1:-1;;;;;10914:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10900:28:0;:10;-1:-1:-1;;;;;10900:28:0;;10892:49;;;;-1:-1:-1;;;10892:49:0;;25012:2:1;10892:49:0;;;24994:21:1;25051:1;25031:18;;;25024:29;-1:-1:-1;;;25069:18:1;;;25062:38;25117:18;;10892:49:0;24810:331:1;10892:49:0;11060:8:::1;::::0;;::::1;::::0;;::::1;11059:9;-1:-1:-1::0;;11048:20:0;;::::1;::::0;::::1;::::0;;;11075:15:::1;::::0;11081:8;;14241:14:1;14234:22;14216:41;;11075:15:0::1;::::0;14204:2:1;14189:18;11075:15:0::1;;;;;;;11013:80::o:0;24047:628::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;24184:41:::2;::::0;-1:-1:-1;;;24184:41:0;;::::2;::::0;::::2;28069:25:1::0;;;24135:46:0::2;::::0;24184:8:::2;-1:-1:-1::0;;;;;24184:33:0::2;::::0;::::2;::::0;28042:18:1;;24184:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24135:90;;24256:1;24246;:7;;;:11;:53;;;;;24287:12;;24277:1;:7;;;:22;;;;:::i;:::-;24261:12;:38;;24246:53;24238:92;;;::::0;-1:-1:-1;;;24238:92:0;;16488:2:1;24238:92:0::2;::::0;::::2;16470:21:1::0;16527:2;16507:18;;;16500:30;-1:-1:-1;;;16546:18:1;;;16539:42;16598:18;;24238:92:0::2;16286:336:1::0;24238:92:0::2;24349:7:::0;;:14;-1:-1:-1;;;;;24349:28:0::2;24367:10;24349:28;24341:55;;;::::0;-1:-1:-1;;;24341:55:0;;20824:2:1;24341:55:0::2;::::0;::::2;20806:21:1::0;20863:2;20843:18;;;20836:30;-1:-1:-1;;;20882:18:1;;;20875:44;20936:18;;24341:55:0::2;20622:338:1::0;24341:55:0::2;24415:7:::0;;:16:::2;;::::0;24407:56:::2;;;::::0;-1:-1:-1;;;24407:56:0;;23225:2:1;24407:56:0::2;::::0;::::2;23207:21:1::0;23264:2;23244:18;;;23237:30;23303:25;23283:18;;;23276:53;23346:18;;24407:56:0::2;23023:347:1::0;24407:56:0::2;24528:7:::0;;:23:::2;;::::0;24476:76:::2;::::0;-1:-1:-1;;;24476:76:0;;:8:::2;-1:-1:-1::0;;;;;24476:20:0::2;:76;::::0;::::2;11886:34:1::0;;;24516:10:0::2;11936:18:1::0;;;11929:43;11988:18;;;11981:34;;;;24476:20:0::2;::::0;11798:18:1;;24476:76:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24563:51:0::2;::::0;-1:-1:-1;;;24563:51:0;;::::2;::::0;::::2;28273:25:1::0;;;24609:4:0::2;28314:18:1::0;;;28307:50;24563:8:0::2;-1:-1:-1::0;;;;;24563:37:0::2;::::0;-1:-1:-1;24563:37:0::2;::::0;-1:-1:-1;28246:18:1;;24563:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24632:35;24657:6;24665:1;24632:35;;;;;;;:::i;:::-;;;;;;;;24122:553;24047:628:::0;:::o;24794:1031::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;24932:41:::2;::::0;-1:-1:-1;;;24932:41:0;;::::2;::::0;::::2;28069:25:1::0;;;24883:46:0::2;::::0;24932:8:::2;-1:-1:-1::0;;;;;24932:33:0::2;::::0;::::2;::::0;28042:18:1;;24932:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25040:7:::0;;:14;;25056:17:::2;::::0;::::2;::::0;25075:13:::2;::::0;;::::2;::::0;25020:69;;-1:-1:-1;;;25020:69:0;;-1:-1:-1;;;;;13478:55:1;;;25020:69:0::2;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;;13593:18;;;13586:34;;;;25040:7:0;;-1:-1:-1;24984:33:0::2;::::0;25020:8:::2;:19;::::0;::::2;::::0;13433:18:1;;25020:69:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24984:105;;25120:1;25110;:7;;;:11;:53;;;;;25151:12;;25141:1;:7;;;:22;;;;:::i;:::-;25125:12;:38;;25110:53;25102:92;;;::::0;-1:-1:-1;;;25102:92:0;;16488:2:1;25102:92:0::2;::::0;::::2;16470:21:1::0;16527:2;16507:18;;;16500:30;-1:-1:-1;;;16546:18:1;;;16539:42;16598:18;;25102:92:0::2;16286:336:1::0;25102:92:0::2;25213:7:::0;;:14;-1:-1:-1;;;;;25213:28:0::2;25231:10;25213:28;25205:55;;;::::0;-1:-1:-1;;;25205:55:0;;20824:2:1;25205:55:0::2;::::0;::::2;20806:21:1::0;20863:2;20843:18;;;20836:30;-1:-1:-1;;;20882:18:1;;;20875:44;20936:18;;25205:55:0::2;20622:338:1::0;25205:55:0::2;25279:7:::0;;:16:::2;;::::0;:21;25271:57:::2;;;::::0;-1:-1:-1;;;25271:57:0;;23225:2:1;25271:57:0::2;::::0;::::2;23207:21:1::0;23264:2;23244:18;;;23237:30;23303:25;23283:18;;;23276:53;23346:18;;25271:57:0::2;23023:347:1::0;25271:57:0::2;25341:52;::::0;-1:-1:-1;;;25341:52:0;;::::2;::::0;::::2;28273:25:1::0;;;25387:5:0::2;28314:18:1::0;;;28307:50;25341:8:0::2;-1:-1:-1::0;;;;;25341:37:0::2;::::0;::::2;::::0;28246:18:1;;25341:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25407:12;25421:17:::0;25450:4:::2;-1:-1:-1::0;;;;;25442:26:0::2;25579:1;:11;;;25609:1;:7;;;25483:148;;;;;;;;28933:25:1::0;;;28989:2;28974:18;;28967:34;28921:2;28906:18;;28751:256;25483:148:0::2;;::::0;;-1:-1:-1;;25483:148:0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;::::2;;;;::::0;;25442:200;::::2;::::0;25483:148;25442:200:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25406:236;;;;25659:7;25655:110;;25718:1;:11;;;25706:10;-1:-1:-1::0;;;;;25687:66:0::2;;25731:1;:7;;;25747:4;25687:66;;;;;;;:::i;:::-;;;;;;;;25655:110;25782:35;25807:6;25815:1;25782:35;;;;;;;:::i;:::-;;;;;;;;24870:955;;;;24794:1031:::0;:::o;12119:4094::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;12532:8:::2;-1:-1:-1::0;;;;;12532:25:0::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12517:11;::::0;::::2;::::0;12475:54:::2;::::0;;;;12505:10:::2;12475:54;::::0;::::2;12675:74:1::0;12765:18;;;12758:34;;;;12475:8:0::2;-1:-1:-1::0;;;;;12475:29:0::2;::::0;::::2;::::0;12648:18:1;;12475:54:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12446:11;::::0;::::2;::::0;12402:56:::2;::::0;;;;12434:10:::2;12402:56;::::0;::::2;12675:74:1::0;12765:18;;;12758:34;;;;12402:8:0::2;-1:-1:-1::0;;;;;12402:31:0::2;::::0;::::2;::::0;12648:18:1;;12402:56:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12387:11;::::0;::::2;::::0;12350:49:::2;::::0;;;;12375:10:::2;12350:49;::::0;::::2;12675:74:1::0;12765:18;;;12758:34;;;;12350:8:0::2;-1:-1:-1::0;;;;;12350:24:0::2;::::0;::::2;::::0;12648:18:1;;12350:49:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:108;;;;:::i;:::-;:179;;;;:::i;:::-;:209;12342:255;;;::::0;-1:-1:-1;;;12342:255:0;;19639:2:1;12342:255:0::2;::::0;::::2;19621:21:1::0;19678:2;19658:18;;;19651:30;19717:21;19697:18;;;19690:49;19756:18;;12342:255:0::2;19437:343:1::0;12342:255:0::2;12656:8;-1:-1:-1::0;;;;;12656:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12616:37;::::0;-1:-1:-1;;;12616:37:0;;12640:12:::2;12616:37;::::0;::::2;28069:25:1::0;12616:8:0::2;-1:-1:-1::0;;;;;12616:23:0::2;::::0;::::2;::::0;28042:18:1;;12616:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;12608:115;;;::::0;-1:-1:-1;;;12608:115:0;;22876:2:1;12608:115:0::2;::::0;::::2;22858:21:1::0;22915:2;22895:18;;;22888:30;22954:22;22934:18;;;22927:50;22994:18;;12608:115:0::2;22674:344:1::0;12608:115:0::2;12786:8;-1:-1:-1::0;;;;;12786:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12742:41;::::0;-1:-1:-1;;;12742:41:0;;12772:10:::2;12742:41;::::0;::::2;11206:74:1::0;12742:8:0::2;-1:-1:-1::0;;;;;12742:29:0::2;::::0;::::2;::::0;11179:18:1;;12742:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;12734:122;;;::::0;-1:-1:-1;;;12734:122:0;;21847:2:1;12734:122:0::2;::::0;::::2;21829:21:1::0;21886:2;21866:18;;;21859:30;21925:20;21905:18;;;21898:48;21963:18;;12734:122:0::2;21645:342:1::0;12734:122:0::2;12948:8;-1:-1:-1::0;;;;;12948:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12944:3;12933:10;;12896:8;-1:-1:-1::0;;;;;12896:14:0::2;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12896:34:0::2;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;:51;;;;:::i;:::-;:72;;;;:::i;:::-;12875:1;:17;;;:93;;12867:133;;;::::0;-1:-1:-1;;;12867:133:0;;15061:2:1;12867:133:0::2;::::0;::::2;15043:21:1::0;15100:2;15080:18;;;15073:30;15139:15;15119:18;;;15112:43;15172:18;;12867:133:0::2;14859:337:1::0;12867:133:0::2;13040:9;;13019:1;:17;;;:30;;13011:56;;;::::0;-1:-1:-1;;;13011:56:0;;17524:2:1;13011:56:0::2;::::0;::::2;17506:21:1::0;17563:2;17543:18;;;17536:30;17602:15;17582:18;;;17575:43;17635:18;;13011:56:0::2;17322:337:1::0;13011:56:0::2;13099:1;13086;:10;;;:14;:87;;;;;13118:8;-1:-1:-1::0;;;;;13118:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13118:42:0::2;;13161:1;:11;;;13118:55;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;13118:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13104:1;:10;;;:69;;13086:87;:174;;;;;13205:8;-1:-1:-1::0;;;;;13205:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13205:42:0::2;;13248:1;:11;;;13205:55;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;13205:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13191:1;:10;;;:69;;13086:174;13078:219;;;::::0;-1:-1:-1;;;13078:219:0;;17866:2:1;13078:219:0::2;::::0;::::2;17848:21:1::0;17905:2;17885:18;;;17878:30;17944:20;17924:18;;;17917:48;17982:18;;13078:219:0::2;17664:342:1::0;13078:219:0::2;13330:8;-1:-1:-1::0;;;;;13330:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13316:1;:10;;;:48;;:106;;;-1:-1:-1::0;13382:40:0::2;::::0;;;;13411:10:::2;13382:40;::::0;::::2;11206:74:1::0;13382:8:0::2;-1:-1:-1::0;;;;;13382:28:0::2;::::0;::::2;::::0;11179:18:1;;13382:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:1;:10;;;:54;;13316:106;13308:153;;;::::0;-1:-1:-1;;;13308:153:0;;17174:2:1;13308:153:0::2;::::0;::::2;17156:21:1::0;17213:2;17193:18;;;17186:30;17252:23;17232:18;;;17225:51;17293:18;;13308:153:0::2;16972:345:1::0;13308:153:0::2;13480:23:::0;;;:88:::2;;-1:-1:-1::0;13567:1:0::2;-1:-1:-1::0;;;;;13507:8:0::2;:13;;13521:20;13540:1;13521:18:::0;:20:::2;:::i;:::-;13507:35;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;13507:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;::::0;;;;13553:10:::2;13507:57;::::0;::::2;11206:74:1::0;-1:-1:-1;;;;;13507:45:0;;;::::2;::::0;::::2;::::0;11179:18:1;;13507:57:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;13480:88;13472:151;;;::::0;-1:-1:-1;;;13472:151:0;;15403:2:1;13472:151:0::2;::::0;::::2;15385:21:1::0;15442:2;15422:18;;;15415:30;15481:34;15461:18;;;15454:62;15552:7;15532:18;;;15525:35;15577:19;;13472:151:0::2;15201:401:1::0;13472:151:0::2;13770:11;::::0;::::2;::::0;13745:40:::2;::::0;;;;::::2;::::0;::::2;28933:25:1::0;;;;13783:1:0::2;28974:18:1::0;;;28967:34;13745:8:0::2;-1:-1:-1::0;;;;;13745:24:0::2;::::0;::::2;::::0;28906:18:1;;13745:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13675:8;-1:-1:-1::0;;;;;13675:24:0::2;;13700:1;:11;;;13713:1;:5;;;:13;;13725:1;13713:13;;;13721:1;13713:13;13675:52;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;30250:25:1::0;;;;30323:4;30311:17;30291:18;;;30284:45;30223:18;;13675:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13662:1;:10;;;13642:1;:17;;;:30;;;;:::i;:::-;:85;;;;:::i;:::-;:143;;13634:173;;;::::0;-1:-1:-1;;;13634:173:0;;22530:2:1;13634:173:0::2;::::0;::::2;22512:21:1::0;22569:2;22549:18;;;22542:30;22608:19;22588:18;;;22581:47;22645:18;;13634:173:0::2;22328:341:1::0;13634:173:0::2;13826:4;::::0;::::2;::::0;:9;;:40:::2;;;13839:1;:5;;;:27;;;;;13862:1;:4;;;13848:1;:11;;;:18;13839:27;13826:72;;;;13871:1;:5;;;13870:6;:28;;;;;13894:1;:4;;;13880:1;:11;;;:18;13870:28;13818:93;;;::::0;-1:-1:-1;;;13818:93:0;;18967:2:1;13818:93:0::2;::::0;::::2;18949:21:1::0;19006:1;18986:18;;;18979:29;-1:-1:-1;;;19024:18:1;;;19017:38;19072:18;;13818:93:0::2;18765:331:1::0;13818:93:0::2;13930:4;::::0;::::2;::::0;:9;;:40:::2;;;13943:1;:5;;;:27;;;;;13966:1;:4;;;13952:1;:11;;;:18;13943:27;13930:72;;;;13975:1;:5;;;13974:6;:28;;;;;13998:1;:4;;;13984:1;:11;;;:18;13974:28;13922:93;;;::::0;-1:-1:-1;;;13922:93:0;;19303:2:1;13922:93:0::2;::::0;::::2;19285:21:1::0;19342:1;19322:18;;;19315:29;-1:-1:-1;;;19360:18:1;;;19353:38;19408:18;;13922:93:0::2;19101:331:1::0;13922:93:0::2;14080:17;::::0;::::2;::::0;14028:70:::2;::::0;-1:-1:-1;;;14028:70:0;;14049:10:::2;14028:70;::::0;::::2;11886:34:1::0;14028:8:0::2;-1:-1:-1::0;;;;;14028:20:0::2;11936:18:1::0;;;11929:43;;;11988:18;;;11981:34;;;;14028:20:0::2;::::0;11798:18:1;;14028:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14114:6;14111:2037;;;14158:8;-1:-1:-1::0;;;;;14158:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14158:52:0::2;;14211:1;:11;;;14158:65;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;14158:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14144:10;:79;;14136:127;;;::::0;-1:-1:-1;;;14136:127:0;;21167:2:1;14136:127:0::2;::::0;::::2;21149:21:1::0;21206:2;21186:18;;;21179:30;21245:20;21225:18;;;21218:48;21283:18;;14136:127:0::2;20965:342:1::0;14136:127:0::2;14280:9;14336:3;14315:8;-1:-1:-1::0;;;;;14315:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14304:10;14292:1;:11;;;:22;;;;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;14413:11;::::0;::::2;::::0;14367:58:::2;::::0;;;;14401:10:::2;14367:58;::::0;::::2;12675:74:1::0;12765:18;;;12758:34;;;;14280:59:0;;-1:-1:-1;14354:10:0::2;::::0;14367:8:::2;-1:-1:-1::0;;;;;14367:33:0::2;::::0;::::2;::::0;12648:18:1;;14367:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14354:71;;14442:8;-1:-1:-1::0;;;;;14442:28:0::2;;14471:531;;;;;;;;14523:10;-1:-1:-1::0;;;;;14471:531:0::2;;;;;14552:1;:11;;;14471:531;;;;14582:5;14471:531;;;;14606:1;:17;;;14471:531;;;;14663:1;14642:18;:22;:77;;14718:1;14642:77;;;-1:-1:-1::0;;;;;14667:8:0::2;:26;;14694:20;14713:1;14694:18:::0;:20:::2;:::i;:::-;14667:48;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;14667:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14471:531;;;;14738:1;:5;;;14471:531;;;;;;14762:1;:10;;;14471:531;;;;14791:1;:4;;;14471:531;;;;14814:1;:4;;;14471:531;;;;14837:1;:5;;;:40;;14866:1;:11;;;14837:40;;;14859:4;14845:1;:11;;;:18;;;;:::i;:::-;14471:531;;;;14896:1;:5;;;:40;;14932:4;14918:1;:11;;;:18;;;;:::i;:::-;14896:40;;;14904:1;:11;;;14896:40;14471:531;;;;14955:12;14471:531;;;;14986:1;14471:531;;::::0;14442:561:::2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15053:1;:11;;;15041:10;-1:-1:-1::0;;;;;15025:47:0::2;;15066:5;15025:47;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;15025:47:0::2;;;;;;;;14121:963;;14111:2037;;;15103:10;15116:8;-1:-1:-1::0;;;;;15116:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15116:35:0::2;;15170:1;:11;;;15201:43;15284:1;:10;;;15264:1;:17;;;:30;;;;:::i;:::-;15116:193;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15103:206;;15326:8;-1:-1:-1::0;;;;;15326:32:0::2;;15377:651;;;;;;;;15437:357;;;;;;;;15488:10;-1:-1:-1::0;;;;;15437:357:0::2;;;;;15525:1;:11;;;15437:357;;;;15563:1;15437:357;;;;15566:1;15437:357;;;;15594:1;:17;;;15437:357;;;;15638:1;15437:357;;;;15667:1;:5;;;15437:357;;;;;;15699:1;:10;;;15437:357;;;;15736:1;:4;;;15437:357;;;;15767:1;:4;;;15437:357;;::::0;15377:651:::2;;;;15817:1;15377:651;;;;15841:1;:11;;;15377:651;;;;15875:10;15377:651;;;;15929:1;15908:18;:22;:77;;15984:1;15908:77;;;-1:-1:-1::0;;;;;15933:8:0::2;:26;;15960:20;15979:1;15960:18:::0;:20:::2;:::i;:::-;15933:48;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;15933:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15377:651;;;;16008:1;15377:651;;::::0;16030:5:::2;16037:4;15326:730;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;16111:11:0::2;::::0;;::::2;::::0;16078:58:::2;::::0;;16099:10:::2;13028:74:1::0;;13118:18;;;13111:34;;;;16124:4:0::2;13161:18:1::0;;;13154:50;13235:2;13220:18;;13213:34;;;16078:58:0;::::2;::::0;;;;13015:3:1;16078:58:0;;::::2;15088:1060;14111:2037;16160:45;::::0;;;;16183:10:::2;16160:45;::::0;::::2;11526:34:1::0;-1:-1:-1;;;;;11596:15:1;;;11576:18;;;11569:43;16160:8:0::2;:22;::::0;::::2;::::0;11438:18:1;;16160:45:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12119:4094:::0;;;;;:::o;20296:1311::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;20439:51:::2;::::0;-1:-1:-1;;;20439:51:0;;20459:10:::2;20439:51;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;20403:33:0::2;::::0;20439:8:::2;-1:-1:-1::0;;;;;20439:19:0::2;::::0;::::2;::::0;13433:18:1;;20439:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20541:55;::::0;-1:-1:-1;;;20541:55:0;;20565:10:::2;20541:55;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;20403:87:0;;-1:-1:-1;20501:37:0::2;::::0;-1:-1:-1;;;;;20541:8:0::2;:23;::::0;::::2;::::0;13433:18:1;;20541:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20501:95;;20655:8;-1:-1:-1::0;;;;;20655:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20615:37;::::0;-1:-1:-1;;;20615:37:0;;20639:12:::2;20615:37;::::0;::::2;28069:25:1::0;20615:8:0::2;-1:-1:-1::0;;;;;20615:23:0::2;::::0;::::2;::::0;28042:18:1;;20615:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;20607:115;;;::::0;-1:-1:-1;;;20607:115:0;;22876:2:1;20607:115:0::2;::::0;::::2;22858:21:1::0;22915:2;22895:18;;;22888:30;22954:22;22934:18;;;22927:50;22994:18;;20607:115:0::2;22674:344:1::0;20607:115:0::2;20785:8;-1:-1:-1::0;;;;;20785:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20741:41;::::0;-1:-1:-1;;;20741:41:0;;20771:10:::2;20741:41;::::0;::::2;11206:74:1::0;20741:8:0::2;-1:-1:-1::0;;;;;20741:29:0::2;::::0;::::2;::::0;11179:18:1;;20741:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;20733:122;;;::::0;-1:-1:-1;;;20733:122:0;;21847:2:1;20733:122:0::2;::::0;::::2;21829:21:1::0;21886:2;21866:18;;;21859:30;21925:20;21905:18;;;21898:48;21963:18;;20733:122:0::2;21645:342:1::0;20733:122:0::2;20875:1;:19;;;20874:20;20866:53;;;::::0;-1:-1:-1;;;20866:53:0;;24329:2:1;20866:53:0::2;::::0;::::2;24311:21:1::0;24368:2;24348:18;;;24341:30;24407:22;24387:18;;;24380:50;24447:18;;20866:53:0::2;24127:344:1::0;20866:53:0::2;20951:1;20938;:10;;;:14;20930:35;;;::::0;-1:-1:-1;;;20930:35:0;;15809:2:1;20930:35:0::2;::::0;::::2;15791:21:1::0;15848:1;15828:18;;;15821:29;-1:-1:-1;;;15866:18:1;;;15859:38;15914:18;;20930:35:0::2;15607:331:1::0;20930:35:0::2;20978:10;20991:8;-1:-1:-1::0;;;;;20991:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20991:35:0::2;;21041:10;21067:44;21178:8;-1:-1:-1::0;;;;;21178:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21160:1;:15;;;21147:1;:10;;;21127:1;:17;;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;20991:218;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20978:231;;21222:8;-1:-1:-1::0;;;;;21222:32:0::2;;21255:255;;;;;;;;21307:164;;;;;;;;21350:10;-1:-1:-1::0;;;;;21307:164:0::2;;;;;21379:10;21307:164;;;;21408:6;21307:164;;;;21433:1;21307:164;;;;21436:1;21307:164;;;;21439:1;21307:164;;;;21442:5;21307:164;;;;;;21449:1;21307:164;;;;21452:1;21307:164;;;;21455:1;21307:164;;::::0;21255:255:::2;;;;21486:1;21255:255;;;;21489:1;21255:255;;;;21492:1;21255:255;;;;21495:1;21255:255;;;;21498:1;21255:255;;::::0;21512:5:::2;21519;21222:303;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21541:58:0::2;::::0;;21562:10:::2;13028:74:1::0;;13133:2;13118:18;;13111:34;;;21586:5:0::2;13161:18:1::0;;;13154:50;;;;13235:2;13220:18;;13213:34;;;21541:58:0::2;::::0;-1:-1:-1;13015:3:1;13000:19;;-1:-1:-1;21541:58:0::2;12803:450:1::0;21708:2228:0;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;21994:48:::2;::::0;-1:-1:-1;;;21994:48:0;;-1:-1:-1;;;;;13478:55:1;;;21994:48:0::2;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;21958:33:0::2;::::0;21994:8:::2;:19:::0;;::::2;::::0;::::2;::::0;13433:18:1;;21994:48:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21958:84;;22072:1;22061:8;:12;:28;;;;;22088:1;22077:8;:12;22061:28;22053:55;;;::::0;-1:-1:-1;;;22053:55:0;;16145:2:1;22053:55:0::2;::::0;::::2;16127:21:1::0;16184:2;16164:18;;;16157:30;16223:16;16203:18;;;16196:44;16257:18;;22053:55:0::2;15943:338:1::0;22053:55:0::2;22141:8;-1:-1:-1::0;;;;;22141:12:0::2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22127:28:0::2;:10;-1:-1:-1::0;;;;;22127:28:0::2;;:87;;;-1:-1:-1::0;22204:10:0::2;22159:8;-1:-1:-1::0;;;;;22159:13:0::2;;22173:10;22182:1;22173:8:::0;:10:::2;:::i;:::-;22159:25;;;;;;;;;;;;;28069::1::0;;28057:2;28042:18;;27923:177;22159:25:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22159:33:0::2;;22193:6;22159:41;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;22159:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22159:55:0::2;;22127:87;22119:119;;;::::0;-1:-1:-1;;;22119:119:0;;24678:2:1;22119:119:0::2;::::0;::::2;24660:21:1::0;24717:1;24697:18;;;24690:29;24755:8;24735:18;;;24728:36;24781:18;;22119:119:0::2;24476:329:1::0;22119:119:0::2;22305:8;-1:-1:-1::0;;;;;22305:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22273:31;::::0;;;;::::2;::::0;::::2;28069:25:1::0;;;22273:8:0::2;-1:-1:-1::0;;;;;22273:23:0::2;::::0;::::2;::::0;28042:18:1;;22273:31:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;22257:12;:77;;22249:119;;;::::0;-1:-1:-1;;;22249:119:0;;16829:2:1;22249:119:0::2;::::0;::::2;16811:21:1::0;16868:2;16848:18;;;16841:30;16907:18;16887;;;16880:46;16943:18;;22249:119:0::2;16627:340:1::0;22249:119:0::2;22401:34;22387:10;:48;;;;;;;;:::i;:::-;;;:107;;;-1:-1:-1::0;22439:55:0::2;::::0;-1:-1:-1;;;22439:55:0;;-1:-1:-1;;;;;13478:55:1;;;22439::0::2;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;22439:8:0::2;:26;::::0;::::2;::::0;13433:18:1;;22439:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22379:142;;;::::0;-1:-1:-1;;;22379:142:0;;22194:2:1;22379:142:0::2;::::0;::::2;22176:21:1::0;22233:1;22213:18;;;22206:29;-1:-1:-1;;;22251:18:1;;;22244:38;22299:18;;22379:142:0::2;21992:331:1::0;22379:142:0::2;22554:34;22540:10;:48;;;;;;;;:::i;:::-;;:66;;;;22605:1;22592;:10;;;:14;22540:66;22532:87;;;::::0;-1:-1:-1;;;22532:87:0;;15809:2:1;22532:87:0::2;::::0;::::2;15791:21:1::0;15848:1;15828:18;;;15821:29;-1:-1:-1;;;15866:18:1;;;15859:38;15914:18;;22532:87:0::2;15607:331:1::0;22532:87:0::2;22652:32;22638:10;:46;;;;;;;;:::i;:::-;;;:58;;;;22695:1;22688;:4;;;:8;22638:58;22630:76;;;::::0;-1:-1:-1;;;22630:76:0;;21514:2:1;22630:76:0::2;::::0;::::2;21496:21:1::0;21553:1;21533:18;;;21526:29;21591:7;21571:18;;;21564:35;21616:18;;22630:76:0::2;21312:328:1::0;22630:76:0::2;22719:20;22767:34;22753:10;:48;;;;;;;;:::i;:::-;;22750:466;;;22862:55;::::0;-1:-1:-1;;;22862:55:0;;-1:-1:-1;;;;;13478:55:1;;;22862::0::2;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;22817:42:0::2;::::0;22862:8:::2;:26:::0;;::::2;::::0;::::2;::::0;13433:18:1;;22862:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22817:100;;22967:1;:10;;;22950:1;:14;;;:27;;;;:::i;:::-;22932:45;;22802:187;22750:466;;;23048:52;::::0;-1:-1:-1;;;23048:52:0;;-1:-1:-1;;;;;13478:55:1;;;23048:52:0::2;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;23008:37:0::2;::::0;23048:8:::2;:23:::0;;::::2;::::0;::::2;::::0;13433:18:1;;23048:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23008:92;;23184:8;-1:-1:-1::0;;;;;23184:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23171:1;:10;;;23153:1;:15;;;23133:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;23115:89;;22993:223;22750:466;23228:74;::::0;;;;23262:10:::2;23228:74;::::0;::::2;13460::1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;23228:8:0::2;-1:-1:-1::0;;;;;23228:33:0::2;::::0;::::2;::::0;13433:18:1;;23228:74:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23315:10;23328:8;-1:-1:-1::0;;;;;23328:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23328:35:0::2;;23378:10:::0;23418:34:::2;23404:10;:48;;;;;;;;:::i;:::-;;:175;;23536:43;23404:175;;;23473:42;23404:175;23594:15;23328:292;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23315:305;;23633:8;-1:-1:-1::0;;;;;23633:29:0::2;;23663:184;;;;;;;;23712:10;-1:-1:-1::0;;;;;23663:184:0::2;;;;;23737:6;23663:184;;;;23758:7;-1:-1:-1::0;;;;;23663:184:0::2;;;;;23780:10;23663:184;;;;23805:6;23663:184;;;;23826:10;23663:184;;;;;;;;:::i;:::-;;;::::0;23849:5:::2;23633:222;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;23871:57:0::2;::::0;;23889:10:::2;12318:34:1::0;;-1:-1:-1;;;;;12388:15:1;;12383:2;12368:18;;12361:43;12420:18;;;12413:34;;;12478:2;12463:18;;12456:34;;;23871:57:0::2;::::0;-1:-1:-1;12244:3:1;12229:19;;-1:-1:-1;23871:57:0::2;;;;;;;21945:1991;;;21708:2228:::0;;;;;;:::o;17494:612::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;17605:58:::2;::::0;-1:-1:-1;;;17605:58:0;;17632:10:::2;17605:58;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;17605:8:0::2;-1:-1:-1::0;;;;;17605:26:0::2;::::0;::::2;::::0;13433:18:1;;17605:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17597:79;;;::::0;-1:-1:-1;;;17597:79:0;;22194:2:1;17597:79:0::2;::::0;::::2;22176:21:1::0;22233:1;22213:18;;;22206:29;-1:-1:-1;;;22251:18:1;;;22244:38;22299:18;;17597:79:0::2;21992:331:1::0;17597:79:0::2;17734:58;::::0;-1:-1:-1;;;17734:58:0;;17761:10:::2;17734:58;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;17689:42:0::2;::::0;17734:8:::2;-1:-1:-1::0;;;;;17734:26:0::2;::::0;::::2;::::0;13433:18:1;;17734:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17689:103;;17837:19;;17826:1;:7;;;17811:12;:22;;;;:::i;:::-;:45;;17803:72;;;::::0;-1:-1:-1;;;17803:72:0;;18213:2:1;17803:72:0::2;::::0;::::2;18195:21:1::0;18252:2;18232:18;;;18225:30;-1:-1:-1;;;18271:18:1;;;18264:44;18325:18;;17803:72:0::2;18011:338:1::0;17803:72:0::2;17940:14;::::0;::::2;::::0;17888:67:::2;::::0;-1:-1:-1;;;17888:67:0;;:8:::2;-1:-1:-1::0;;;;;17888:20:0::2;:67;::::0;::::2;11886:34:1::0;;;17928:10:0::2;11936:18:1::0;;;11929:43;11988:18;;;11981:34;;;;17888:20:0::2;::::0;11798:18:1;;17888:67:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17968:65:0::2;::::0;;;;18002:10:::2;17968:65;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;17968:8:0::2;-1:-1:-1::0;;;;;17968:33:0::2;::::0;-1:-1:-1;17968:33:0::2;::::0;-1:-1:-1;13433:18:1;;17968:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18049:49:0::2;::::0;28069:25:1;;;18079:10:0;;-1:-1:-1;18067:10:0::2;::::0;-1:-1:-1;18049:49:0::2;::::0;28057:2:1;28042:18;18049:49:0::2;;;;;;;17584:522;17494:612:::0;;:::o;19435:811::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;19575:51:::2;::::0;-1:-1:-1;;;19575:51:0;;19595:10:::2;19575:51;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;19539:33:0::2;::::0;19575:8:::2;-1:-1:-1::0;;;;;19575:19:0::2;::::0;::::2;::::0;13433:18:1;;19575:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19677:55;::::0;-1:-1:-1;;;19677:55:0;;19701:10:::2;19677:55;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;19539:87:0;;-1:-1:-1;19637:37:0::2;::::0;-1:-1:-1;;;;;19677:8:0::2;:23;::::0;::::2;::::0;13433:18:1;;19677:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19637:95;;19764:1;19751;:10;;;:14;19743:35;;;::::0;-1:-1:-1;;;19743:35:0;;15809:2:1;19743:35:0::2;::::0;::::2;15791:21:1::0;15848:1;15828:18;;;15821:29;-1:-1:-1;;;15866:18:1;;;15859:38;15914:18;;19743:35:0::2;15607:331:1::0;19743:35:0::2;19791:14;19848:1;:10;;;19842:3;19822:8;-1:-1:-1::0;;;;;19822:15:0::2;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19808:1;:11;;;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;19791:67:::0;-1:-1:-1;19877:11:0;;;:57:::2;;;19892:1;:5;;;:42;;;;;19925:9;19911:1;:11;;;:23;;;;:::i;:::-;19901:6;:33;;19892:42;19877:118;;;;19953:1;:5;;;19952:6;:43;;;;;19986:9;19972:1;:11;;;:23;;;;:::i;:::-;19962:6;:33;;19952:43;19869:141;;;::::0;-1:-1:-1;;;19869:141:0;;23990:2:1;19869:141:0::2;::::0;::::2;23972:21:1::0;24029:2;24009:18;;;24002:30;24068:12;24048:18;;;24041:40;24098:18;;19869:141:0::2;23788:334:1::0;19869:141:0::2;20063:19;::::0;20044:15:::2;::::0;::::2;::::0;20029:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;20021:80;;;::::0;-1:-1:-1;;;20021:80:0;;18213:2:1;20021:80:0::2;::::0;::::2;18195:21:1::0;18252:2;18232:18;;;18225:30;-1:-1:-1;;;18271:18:1;;;18264:44;18325:18;;20021:80:0::2;18011:338:1::0;20021:80:0::2;20122:57;::::0;;;;20140:10:::2;20122:57;::::0;::::2;13862:74:1::0;13952:18;;;13945:34;;;13995:18;;;13988:34;;;14038:18;;;14031:34;;;20122:8:0::2;-1:-1:-1::0;;;;;20122:17:0::2;::::0;::::2;::::0;13834:19:1;;20122:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20197:41:0::2;::::0;28069:25:1;;;20219:10:0;;-1:-1:-1;20207:10:0::2;::::0;-1:-1:-1;20197:41:0::2;::::0;28057:2:1;28042:18;20197:41:0::2;;;;;;;19526:720;;;19435:811:::0;;;:::o;16253:1201::-;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;16514:58:::2;::::0;-1:-1:-1;;;16514:58:0;;16541:10:::2;16514:58;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;16514:8:0::2;-1:-1:-1::0;;;;;16514:26:0::2;::::0;::::2;::::0;13433:18:1;;16514:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16506:79;;;::::0;-1:-1:-1;;;16506:79:0;;22194:2:1;16506:79:0::2;::::0;::::2;22176:21:1::0;22233:1;22213:18;;;22206:29;-1:-1:-1;;;22251:18:1;;;22244:38;22299:18;;16506:79:0::2;21992:331:1::0;16506:79:0::2;16618:8;-1:-1:-1::0;;;;;16618:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16618:52:0::2;;16671:10;16618:64;;;;;;;;;;;;;28069:25:1::0;;28057:2;28042:18;;27923:177;16618:64:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16604:10;:78;;16596:125;;;::::0;-1:-1:-1;;;16596:125:0;;25348:2:1;16596:125:0::2;::::0;::::2;25330:21:1::0;25387:2;25367:18;;;25360:30;25426:22;25406:18;;;25399:50;25466:18;;16596:125:0::2;25146:344:1::0;16596:125:0::2;16779:58;::::0;-1:-1:-1;;;16779:58:0;;16806:10:::2;16779:58;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;16734:42:0::2;::::0;16779:8:::2;-1:-1:-1::0;;;;;16779:26:0::2;::::0;::::2;::::0;13433:18:1;;16779:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16734:103;;16882:19;;16871:1;:7;;;16856:12;:22;;;;:::i;:::-;:45;;16848:86;;;::::0;-1:-1:-1;;;16848:86:0;;18213:2:1;16848:86:0::2;::::0;::::2;18195:21:1::0;18252:2;18232:18;;;18225:30;-1:-1:-1;;;18271:18:1;;;18264:44;18325:18;;16848:86:0::2;18011:338:1::0;16848:86:0::2;16955:8:::0;;;:33:::2;;;16967:1;:5;;;:21;;;;;16985:3;16976:6;:12;16967:21;16955:59;;;;16993:1;:5;;;16992:6;:22;;;;;17011:3;17002:6;:12;16992:22;16947:80;;;::::0;-1:-1:-1;;;16947:80:0;;18967:2:1;16947:80:0::2;::::0;::::2;18949:21:1::0;19006:1;18986:18;;;18979:29;-1:-1:-1;;;19024:18:1;;;19017:38;19072:18;;16947:80:0::2;18765:331:1::0;16947:80:0::2;17046:8:::0;;;:33:::2;;;17058:1;:5;;;:21;;;;;17076:3;17067:6;:12;17058:21;17046:59;;;;17084:1;:5;;;17083:6;:22;;;;;17102:3;17093:6;:12;17083:22;17038:80;;;::::0;-1:-1:-1;;;17038:80:0;;19303:2:1;17038:80:0::2;::::0;::::2;19285:21:1::0;19342:1;19322:18;;;19315:29;-1:-1:-1;;;19360:18:1;;;19353:38;19408:18;;17038:80:0::2;19101:331:1::0;17038:80:0::2;17131:9;17182:3;17161:8;-1:-1:-1::0;;;;;17161:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17143:17;17150:10:::0;17143:6;:17:::2;:::i;:::-;:38;;;;:::i;:::-;:42;;;;:::i;:::-;17131:54;;17209:1;:5;;;:30;;17233:6;17209:30;;;17217:13;17226:4:::0;17217:6;:13:::2;:::i;:::-;17196:10;::::0;::::2;:43:::0;17263:5:::2;::::0;::::2;::::0;:30:::2;;17280:13;17289:4:::0;17280:6;:13:::2;:::i;:::-;17263:30;;;17271:6;17263:30;17250:10;::::0;::::2;:43:::0;17304:4:::2;::::0;::::2;:10:::0;;;17325:4:::2;::::0;::::2;:10:::0;;;-1:-1:-1;17348:32:0;;;;-1:-1:-1;;;;;17348:8:0::2;:29;::::0;::::2;::::0;:32:::2;::::0;17250:1;;17348:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17398:48:0::2;::::0;28069:25:1;;;17427:10:0;;-1:-1:-1;17415:10:0::2;::::0;-1:-1:-1;17398:48:0::2;::::0;28057:2:1;28042:18;17398:48:0::2;;;;;;;16493:961;;16253:1201:::0;;;;;;:::o;11673:205::-;10914:8;-1:-1:-1;;;;;10914:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10900:28:0;:10;-1:-1:-1;;;;;10900:28:0;;10892:49;;;;-1:-1:-1;;;10892:49:0;;25012:2:1;10892:49:0;;;24994:21:1;25051:1;25031:18;;;25024:29;-1:-1:-1;;;25069:18:1;;;25062:38;25117:18;;10892:49:0;24810:331:1;10892:49:0;11769:1:::1;11753:13;:17;11745:26;;;::::0;::::1;;11782:12;:28:::0;;;11826:44:::1;::::0;;19997:21:1;;;20054:2;20034:18;;;20027:30;;;;20093:14;20088:2;20073:18;;20066:42;20175:4;20160:20;;20153:36;;;11826:44:0::1;::::0;20140:3:1;20125:19;11826:44:0::1;19785:410:1::0;11465:202:0;10914:8;-1:-1:-1;;;;;10914:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10900:28:0;:10;-1:-1:-1;;;;;10900:28:0;;10892:49;;;;-1:-1:-1;;;10892:49:0;;25012:2:1;10892:49:0;;;24994:21:1;25051:1;25031:18;;;25024:29;-1:-1:-1;;;25069:18:1;;;25062:38;25117:18;;10892:49:0;24810:331:1;10892:49:0;11556:1:::1;11546:7;:11;11538:20;;;::::0;::::1;;11569:19;:29:::0;;;11614:45:::1;::::0;;20412:21:1;;;20469:2;20449:18;;;20442:30;;;;20508:21;20503:2;20488:18;;20481:49;20597:4;20582:20;;20575:36;;;11614:45:0::1;::::0;20562:3:1;20547:19;11614:45:0::1;20200:417:1::0;18412:573:0;11976:9;11989:10;11976:23;11968:32;;;;;;12043:8:::1;::::0;::::1;;12042:9;12034:28;;;::::0;-1:-1:-1;;;12034:28:0;;14727:2:1;12034:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:36;14830:18;;12034:28:0::1;14525:329:1::0;12034:28:0::1;18552:51:::2;::::0;-1:-1:-1;;;18552:51:0;;18572:10:::2;18552:51;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;18516:33:0::2;::::0;18552:8:::2;-1:-1:-1::0;;;;;18552:19:0::2;::::0;::::2;::::0;13433:18:1;;18552:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18654:55;::::0;-1:-1:-1;;;18654:55:0;;18678:10:::2;18654:55;::::0;::::2;13460:74:1::0;13550:18;;;13543:34;;;13593:18;;;13586:34;;;18516:87:0;;-1:-1:-1;18614:37:0::2;::::0;-1:-1:-1;;;;;18654:8:0::2;:23;::::0;::::2;::::0;13433:18:1;;18654:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18614:95;;18743:1;18730;:10;;;:14;18722:35;;;::::0;-1:-1:-1;;;18722:35:0;;15809:2:1;18722:35:0::2;::::0;::::2;15791:21:1::0;15848:1;15828:18;;;15821:29;-1:-1:-1;;;15866:18:1;;;15859:38;15914:18;;18722:35:0::2;15607:331:1::0;18722:35:0::2;18810:19;::::0;18791:15:::2;::::0;::::2;::::0;18776:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;18768:80;;;::::0;-1:-1:-1;;;18768:80:0;;18213:2:1;18768:80:0::2;::::0;::::2;18195:21:1::0;18252:2;18232:18;;;18225:30;-1:-1:-1;;;18271:18:1;;;18264:44;18325:18;;18768:80:0::2;18011:338:1::0;18768:80:0::2;18861:57;::::0;;;;18879:10:::2;18861:57;::::0;::::2;13862:74:1::0;13952:18;;;13945:34;;;13995:18;;;13988:34;;;14038:18;;;14031:34;;;18861:8:0::2;-1:-1:-1::0;;;;;18861:17:0::2;::::0;::::2;::::0;13834:19:1;;18861:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18936:41:0::2;::::0;28069:25:1;;;18958:10:0;;-1:-1:-1;18946:10:0::2;::::0;-1:-1:-1;18936:41:0::2;::::0;28057:2:1;28042:18;18936:41:0::2;;;;;;;18503:482;;18412:573:::0;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:138::-;232:13;;254:31;232:13;254:31;:::i;296:128::-;361:20;;390:28;361:20;390:28;:::i;429:132::-;505:13;;527:28;505:13;527:28;:::i;566:840::-;629:5;677:6;665:9;660:3;656:19;652:32;649:52;;;697:1;694;687:12;649:52;719:22;;:::i;:::-;710:31;;764:40;794:9;764:40;:::i;:::-;757:5;750:55;858:2;847:9;843:18;837:25;832:2;825:5;821:14;814:49;916:2;905:9;901:18;895:25;890:2;883:5;879:14;872:49;974:2;963:9;959:18;953:25;948:2;941:5;937:14;930:49;1033:3;1022:9;1018:19;1012:26;1006:3;999:5;995:15;988:51;1093:3;1082:9;1078:19;1072:26;1066:3;1059:5;1055:15;1048:51;1132:47;1174:3;1163:9;1159:19;1132:47;:::i;:::-;1126:3;1119:5;1115:15;1108:72;1234:3;1223:9;1219:19;1213:26;1207:3;1200:5;1196:15;1189:51;1259:3;1315:2;1304:9;1300:18;1294:25;1289:2;1282:5;1278:14;1271:49;;1339:3;1395:2;1384:9;1380:18;1374:25;1369:2;1362:5;1358:14;1351:49;;566:840;;;;:::o;1411:251::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1582:9;1576:16;1601:31;1626:5;1601:31;:::i;:::-;1651:5;1411:251;-1:-1:-1;;;1411:251:1:o;1667:245::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1835:9;1829:16;1854:28;1876:5;1854:28;:::i;2760:686::-;2878:6;2886;2894;2902;2910;2918;2971:3;2959:9;2950:7;2946:23;2942:33;2939:53;;;2988:1;2985;2978:12;2939:53;3027:9;3014:23;3066:1;3059:5;3056:12;3046:40;;3082:1;3079;3072:12;3046:40;3105:5;-1:-1:-1;3162:2:1;3147:18;;3134:32;3175:33;3134:32;3175:33;:::i;:::-;2760:686;;3227:7;;-1:-1:-1;;;;3281:2:1;3266:18;;3253:32;;3332:2;3317:18;;3304:32;;3383:3;3368:19;;3355:33;;-1:-1:-1;3435:3:1;3420:19;;;3407:33;;-1:-1:-1;2760:686:1:o;3451:1143::-;3552:6;3605:3;3593:9;3584:7;3580:23;3576:33;3573:53;;;3622:1;3619;3612:12;3573:53;3648:17;;:::i;:::-;3688:40;3718:9;3688:40;:::i;:::-;3681:5;3674:55;3782:2;3771:9;3767:18;3761:25;3756:2;3749:5;3745:14;3738:49;3840:2;3829:9;3825:18;3819:25;3814:2;3807:5;3803:14;3796:49;3898:2;3887:9;3883:18;3877:25;3872:2;3865:5;3861:14;3854:49;3957:3;3946:9;3942:19;3936:26;3930:3;3923:5;3919:15;3912:51;3996:47;4038:3;4027:9;4023:19;3996:47;:::i;:::-;3990:3;3979:15;;3972:72;4098:3;4083:19;;;4077:26;4060:15;;;4053:51;4158:3;4143:19;;;4137:26;4120:15;;;4113:51;4183:3;4224:18;;;4218:25;4202:14;;;4195:49;4263:3;4304:18;;;4298:25;4282:14;;;4275:49;4343:3;4384:18;;;4378:25;4362:14;;;4355:49;4423:3;4464:18;;;4458:25;4442:14;;;4435:49;4503:3;4544:18;;;4538:25;4522:14;;;4515:49;;;;-1:-1:-1;3983:5:1;3451:1143;-1:-1:-1;3451:1143:1:o;4599:955::-;4704:6;4757:3;4745:9;4736:7;4732:23;4728:33;4725:53;;;4774:1;4771;4764:12;4725:53;4807:2;4801:9;4849:4;4841:6;4837:17;4920:6;4908:10;4905:22;4884:18;4872:10;4869:34;4866:62;4863:242;;;-1:-1:-1;;;4958:1:1;4951:88;5062:4;5059:1;5052:15;5090:4;5087:1;5080:15;4863:242;5121:2;5114:22;5160:54;5206:7;5195:9;5160:54;:::i;:::-;5145:70;;5271:3;5256:19;;5250:26;5243:4;5231:17;;5224:53;5331:3;5316:19;;5310:26;5305:2;5293:15;;5286:51;5393:3;5378:19;;5372:26;5365:4;5353:17;;5346:53;5455:3;5440:19;;5434:26;5427:4;5415:17;;5408:53;5517:3;5502:19;;;5496:26;5489:4;5477:17;;5470:53;-1:-1:-1;5152:6:1;4599:955;-1:-1:-1;4599:955:1:o;5559:962::-;5655:6;5708:3;5696:9;5687:7;5683:23;5679:33;5676:53;;;5725:1;5722;5715:12;5676:53;5758:2;5752:9;5800:3;5792:6;5788:16;5870:6;5858:10;5855:22;5834:18;5822:10;5819:34;5816:62;5813:242;;;-1:-1:-1;;;5908:1:1;5901:88;6012:4;6009:1;6002:15;6040:4;6037:1;6030:15;5813:242;6075:10;6071:2;6064:22;;6116:9;6110:16;6102:6;6095:32;6181:2;6170:9;6166:18;6160:25;6155:2;6147:6;6143:15;6136:50;6240:2;6229:9;6225:18;6219:25;6214:2;6206:6;6202:15;6195:50;6299:2;6288:9;6284:18;6278:25;6273:2;6265:6;6261:15;6254:50;6359:3;6348:9;6344:19;6338:26;6332:3;6324:6;6320:16;6313:52;6408:3;6397:9;6393:19;6387:26;6422:28;6444:5;6422:28;:::i;:::-;6478:3;6466:16;;6459:31;6470:6;5559:962;-1:-1:-1;;;5559:962:1:o;6526:245::-;6618:6;6671:3;6659:9;6650:7;6646:23;6642:33;6639:53;;;6688:1;6685;6678:12;6639:53;6711:54;6757:7;6746:9;6711:54;:::i;6776:1289::-;6890:6;6898;6906;6914;6922;6966:9;6957:7;6953:23;6996:3;6992:2;6988:12;6985:32;;;7013:1;7010;7003:12;6985:32;7036:6;7062:2;7058;7054:11;7051:31;;;7078:1;7075;7068:12;7051:31;7104:22;;:::i;:::-;7091:35;;7149:29;7168:9;7149:29;:::i;:::-;7142:5;7135:44;7239:2;7228:9;7224:18;7211:32;7206:2;7199:5;7195:14;7188:56;7304:2;7293:9;7289:18;7276:32;7271:2;7264:5;7260:14;7253:56;7369:2;7358:9;7354:18;7341:32;7336:2;7329:5;7325:14;7318:56;7435:3;7424:9;7420:19;7407:33;7401:3;7394:5;7390:15;7383:58;7502:3;7491:9;7487:19;7474:33;7468:3;7461:5;7457:15;7450:58;7541:36;7572:3;7561:9;7557:19;7541:36;:::i;:::-;7535:3;7528:5;7524:15;7517:61;7639:3;7628:9;7624:19;7611:33;7605:3;7598:5;7594:15;7587:58;7664:3;7727:2;7716:9;7712:18;7699:32;7694:2;7687:5;7683:14;7676:56;;7751:3;7814:2;7803:9;7799:18;7786:32;7781:2;7774:5;7770:14;7763:56;;7838:5;7828:15;;7862:35;7893:2;7882:9;7878:18;7862:35;:::i;:::-;7852:45;;;;7944:3;7933:9;7929:19;7916:33;7906:43;;7996:3;7985:9;7981:19;7968:33;7958:43;;8020:39;8054:3;8043:9;8039:19;8020:39;:::i;:::-;8010:49;;6776:1289;;;;;;;;:::o;8070:180::-;8129:6;8182:2;8170:9;8161:7;8157:23;8153:32;8150:52;;;8198:1;8195;8188:12;8150:52;-1:-1:-1;8221:23:1;;8070:180;-1:-1:-1;8070:180:1:o;8255:184::-;8325:6;8378:2;8366:9;8357:7;8353:23;8349:32;8346:52;;;8394:1;8391;8384:12;8346:52;-1:-1:-1;8417:16:1;;8255:184;-1:-1:-1;8255:184:1:o;8444:248::-;8512:6;8520;8573:2;8561:9;8552:7;8548:23;8544:32;8541:52;;;8589:1;8586;8579:12;8541:52;-1:-1:-1;;8612:23:1;;;8682:2;8667:18;;;8654:32;;-1:-1:-1;8444:248:1:o;8697:316::-;8774:6;8782;8790;8843:2;8831:9;8822:7;8818:23;8814:32;8811:52;;;8859:1;8856;8849:12;8811:52;-1:-1:-1;;8882:23:1;;;8952:2;8937:18;;8924:32;;-1:-1:-1;9003:2:1;8988:18;;;8975:32;;8697:316;-1:-1:-1;8697:316:1:o;9018:523::-;9122:6;9130;9138;9146;9154;9162;9215:3;9203:9;9194:7;9190:23;9186:33;9183:53;;;9232:1;9229;9222:12;9183:53;-1:-1:-1;;9255:23:1;;;9325:2;9310:18;;9297:32;;-1:-1:-1;9376:2:1;9361:18;;9348:32;;9427:2;9412:18;;9399:32;;-1:-1:-1;9478:3:1;9463:19;;9450:33;;-1:-1:-1;9530:3:1;9515:19;9502:33;;-1:-1:-1;9018:523:1;-1:-1:-1;9018:523:1:o;9774:1002::-;9856:12;;9896:9;;-1:-1:-1;;;;;9612:54:1;9600:67;;9957:4;9953:2;9949:13;9943:20;9936:4;9931:3;9927:14;9920:44;10010:4;10006:2;10002:13;9996:20;9989:4;9984:3;9980:14;9973:44;10063:4;10059:2;10055:13;10049:20;10042:4;10037:3;10033:14;10026:44;10116:4;10112:2;10108:13;10102:20;10095:4;10090:3;10086:14;10079:44;10169:4;10165:2;10161:13;10155:20;10148:4;10143:3;10139:14;10132:44;10219:4;10215:2;10211:13;10205:20;10234:45;10273:4;10268:3;10264:14;10250:12;9748:13;9741:21;9729:34;;9678:91;10234:45;-1:-1:-1;10325:4:1;10317:13;;;10311:20;10295:14;;;10288:44;10351:6;10393:11;;;10387:18;10373:12;;;10366:40;10425:6;10467:11;;;10461:18;10447:12;;;10440:40;10531:4;10520:16;;10514:23;10505:6;10496:16;;10489:49;10589:4;10578:16;;10572:23;10563:6;10554:16;;10547:49;10647:4;10636:16;;10630:23;10621:6;10612:16;;10605:49;10705:4;10694:16;;10688:23;10679:6;10670:16;;10663:49;10763:4;10752:16;10746:23;10737:6;10728:16;;;10721:49;9774:1002::o;10781:274::-;10910:3;10948:6;10942:13;10964:53;11010:6;11005:3;10998:4;10990:6;10986:17;10964:53;:::i;:::-;11033:16;;;;;10781:274;-1:-1:-1;;10781:274:1:o;25495:1170::-;25723:13;;-1:-1:-1;;;;;9612:54:1;9600:67;;25691:3;25676:19;;25804:4;25796:6;25792:17;25786:24;25779:4;25768:9;25764:20;25757:54;25867:4;25859:6;25855:17;25849:24;25842:4;25831:9;25827:20;25820:54;25930:4;25922:6;25918:17;25912:24;25905:4;25894:9;25890:20;25883:54;25993:4;25985:6;25981:17;25975:24;25968:4;25957:9;25953:20;25946:54;26047:4;26039:6;26035:17;26029:24;26062:51;26107:4;26096:9;26092:20;26078:12;9748:13;9741:21;9729:34;;9678:91;26062:51;-1:-1:-1;26169:4:1;26157:17;;;26151:24;26129:20;;;26122:54;26232:4;26220:17;;;26214:24;26192:20;;;26185:54;26258:6;26306:15;;;26300:22;26280:18;;;26273:50;26342:6;26390:15;;;26384:22;26364:18;;;26357:50;26426:6;26474:15;;;26468:22;26448:18;;;26441:50;26510:6;26558:15;;;26552:22;26532:18;;;26525:50;26594:6;26642:15;;;26636:22;26616:18;;;;26609:50;;;;25495:1170;:::o;26670:432::-;26924:3;26909:19;;26937:55;26913:9;26974:6;26937:55;:::i;:::-;27029:6;27023:3;27012:9;27008:19;27001:35;27087:6;27080:14;27073:22;27067:3;27056:9;27052:19;27045:51;26670:432;;;;;;:::o;27107:811::-;27291:4;27333:3;27322:9;27318:19;27310:27;;-1:-1:-1;;;;;27444:2:1;27435:6;27429:13;27425:22;27414:9;27407:41;27504:4;27496:6;27492:17;27486:24;27479:4;27468:9;27464:20;27457:54;27579:2;27571:4;27563:6;27559:17;27553:24;27549:33;27542:4;27531:9;27527:20;27520:63;;27639:4;27631:6;27627:17;27621:24;27614:4;27603:9;27599:20;27592:54;27702:4;27694:6;27690:17;27684:24;27677:4;27666:9;27662:20;27655:54;27756:4;27748:6;27744:17;27738:24;27771:46;27804:12;27771:46;:::i;:::-;27848:4;27833:20;;27826:42;27899:3;27884:19;;;27877:35;;;;27107:811;;-1:-1:-1;27107:811:1:o;28368:378::-;28580:25;;;28568:2;28553:18;;28614:40;28647:6;28614:40;:::i;:::-;28685:2;28670:18;;28663:34;;;;28728:2;28713:18;28706:34;28368:378;;-1:-1:-1;28368:378:1:o;29012:454::-;29189:6;29178:9;29171:25;29232:2;29227;29216:9;29212:18;29205:30;29152:4;29264:6;29258:13;29307:6;29302:2;29291:9;29287:18;29280:34;29323:66;29382:6;29377:2;29366:9;29362:18;29357:2;29349:6;29345:15;29323:66;:::i;:::-;29450:2;29429:15;-1:-1:-1;;29425:29:1;29410:45;;;;29457:2;29406:54;;29012:454;-1:-1:-1;;;29012:454:1:o;29471:349::-;29716:25;;;29703:3;29688:19;;29750:64;29810:2;29795:18;;29787:6;29750:64;:::i;30340:409::-;30412:2;30406:9;30454:6;30442:19;;30491:18;30476:34;;30512:22;;;30473:62;30470:242;;;-1:-1:-1;;;30565:1:1;30558:88;30669:4;30666:1;30659:15;30697:4;30694:1;30687:15;30470:242;30728:2;30721:22;30340:409;:::o;30754:401::-;30821:2;30815:9;30863:3;30851:16;;30897:18;30882:34;;30918:22;;;30879:62;30876:242;;;-1:-1:-1;;;30971:1:1;30964:88;31075:4;31072:1;31065:15;31103:4;31100:1;31093:15;31160:128;31200:3;31231:1;31227:6;31224:1;31221:13;31218:39;;;31237:18;;:::i;:::-;-1:-1:-1;31273:9:1;;31160:128::o;31293:274::-;31333:1;31359;31349:189;;-1:-1:-1;;;31391:1:1;31384:88;31495:4;31492:1;31485:15;31523:4;31520:1;31513:15;31349:189;-1:-1:-1;31552:9:1;;31293:274::o;31572:168::-;31612:7;31678:1;31674;31670:6;31666:14;31663:1;31660:21;31655:1;31648:9;31641:17;31637:45;31634:71;;;31685:18;;:::i;:::-;-1:-1:-1;31725:9:1;;31572:168::o;31745:125::-;31785:4;31813:1;31810;31807:8;31804:34;;;31818:18;;:::i;:::-;-1:-1:-1;31855:9:1;;31745:125::o;31875:258::-;31947:1;31957:113;31971:6;31968:1;31965:13;31957:113;;;32047:11;;;32041:18;32028:11;;;32021:39;31993:2;31986:10;31957:113;;;32088:6;32085:1;32082:13;32079:48;;;32123:1;32114:6;32109:3;32105:16;32098:27;32079:48;;31875:258;;;:::o;32138:184::-;-1:-1:-1;;;32187:1:1;32180:88;32287:4;32284:1;32277:15;32311:4;32308:1;32301:15;32327:184;-1:-1:-1;;;32376:1:1;32369:88;32476:4;32473:1;32466:15;32500:4;32497:1;32490:15;32516:269;32599:1;32592:5;32589:12;32579:200;;-1:-1:-1;;;32632:1:1;32625:88;32736:4;32733:1;32726:15;32764:4;32761:1;32754:15;32579:200;32516:269;:::o;32790:154::-;-1:-1:-1;;;;;32869:5:1;32865:54;32858:5;32855:65;32845:93;;32934:1;32931;32924:12;32949:118;33035:5;33028:13;33021:21;33014:5;33011:32;33001:60;;33057:1;33054;33047:12

Swarm Source

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