Contract 0x142fe126773df5de10148028d516a9da8a1d71ad

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa6485258331700961d848f081d8a87d76699012342ecf41ba59de3f08acdac3aTrigger Callback92441492021-10-19 6:53:2348 secs ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014128155 2.25
0x5b4d52764097666b5811a513b0466f5806e4c422211d7d53ed70e5fedf0633edTrigger Callback92441272021-10-19 6:52:171 min ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014127885 2.25
0xc885dc08d6900cef473eefd142a03ad56d5ded57375532acba5a6b32c01d0f52Trigger Callback92441052021-10-19 6:51:113 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001406997 2.25
0xfc3699380c974369a9a8ecb6075ef7749dfe0cd4525f81f81905e77525285081Trigger Callback92440422021-10-19 6:48:026 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001412793 2.25
0x13979450cd279f3af96366497ce1f22c2a8a390bd0f6b9c66ff418d2afd05277Trigger Callback92439172021-10-19 6:41:4712 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140072625 2.25
0xc042fe3a66614d7616cf0d3a4ce248fc79c51a51f90cce91ae2fda7d5857be36Trigger Callback92438542021-10-19 6:38:3815 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00160886475 2.25
0xa4142b498cb5cdbdb5912c792f613bd260c02515c9b7c6bdaf11cc281c131714Trigger Callback92437502021-10-19 6:33:2620 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001510614 2.25
0x99377b33246c578a9d20453672397cf8742bc41735e820ac1b32ae583d149b32Trigger Callback92436872021-10-19 6:30:1723 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140069925 2.25
0xff23d131417704ceaa64ff2376d013dfb4f5480fbca43115229936b759fce013Trigger Callback92436442021-10-19 6:28:0826 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014127615 2.25
0x2c5b101ea1197968a222772f517715c2624401afb0a1012caa4bee55c7c29a09Trigger Callback92434982021-10-19 6:20:5033 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014128155 2.25
0xb5d4cea8f6ae8f8e05b1e3f2e928d81a5ae8819666ecb359bd7705d37ff2103aTrigger Callback92434352021-10-19 6:17:4136 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001615131 2.25
0x5605e3e899c5c24180d91108860114cb9e4c4e9db5d4e75a883ff01706b6e687Trigger Callback92433312021-10-19 6:12:2941 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001406952 2.25
0x87fbcfcc5a8b444d4c7b2b7e8b5035afe707118700d8fbc4d1164b6af72ccf5bTrigger Callback92432882021-10-19 6:10:2043 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140329125 2.25
0x0a7879ee185143ea7f70192f462b0c4ca3221ea127feff4136bbc4b6bc4a0fa7Trigger Callback92432662021-10-19 6:09:1444 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140326875 2.25
0xbe9e5ae3096606cc8f69b1cec41bbf6b068b4428c5288c539aa46bb390e04e79Trigger Callback92431002021-10-19 6:00:5653 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140321925 2.25
0xd76753dfa84f852004d97be17bf6dcab84e4ee8d8f2f9adb2492676c5a93ae16Trigger Callback92430162021-10-19 5:56:4457 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00160541325 2.25
0x54587f1090f4aed4caf25ec6d92f6764def10083126a58059867672dc50f5967Trigger Callback92429122021-10-19 5:51:321 hr 2 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014068845 2.25
0xca8b75846c200b25eced1a87dce3ba629c62f612aee15d469dadd1a0d5040160Trigger Callback92428692021-10-19 5:49:231 hr 4 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0013956615 2.25
0xcfac01b97d305a3c64e0a70d7ea5ac18b1794d5030533d5c3fc814be9e2d4eadTrigger Callback92428472021-10-19 5:48:171 hr 5 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0013982805 2.25
0xfdd029748676b86f8f386ef299aa17cf3dbf876ece004aba90dcc51a5147f461Trigger Callback92426802021-10-19 5:39:561 hr 14 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.001406862 2.25
0xab6f436fd7f88b966253ed38acc2eeaba93e4adeb9aa3af9f81e1e975419b6ddTrigger Callback92425962021-10-19 5:35:441 hr 18 mins ago0xbc0796239836854cbf3ae9f5bfdba8864a7d439e IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00160282575 2.25
0xd2e4d1b5d754a06e9a140d7593d561651a3cf36ab1a119bc67b235e3db137623Trigger Callback92424922021-10-19 5:30:321 hr 23 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00139461525 2.25
0x9def027ff3d9eeae9387bfb0654f88bcb4fedf0450c66969f9ea3138b902d1d5Trigger Callback92424482021-10-19 5:28:201 hr 25 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140324625 2.25
0x9c2dea8ba21e2a5f210e7fa95187aad42444b9e5aead1c6ed40e93cf74392df9Trigger Callback92424252021-10-19 5:27:111 hr 27 mins ago0x82ca8718a5885f30377de1bba59c8e4d2471d6df IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.00140329125 2.25
0x2b36c638b229d023b6e849e53615b9020f398569468a19e75c993ca482c7947eTrigger Callback92422592021-10-19 5:18:531 hr 35 mins ago0x6acb9294b0ef6b1962551e01efe58230c4f79bbd IN  0x142fe126773df5de10148028d516a9da8a1d71ad0 HT0.0014069295 2.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DOSProxy

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-03-10
*/

pragma solidity ^0.5.0;

library BN256 {
    struct G1Point {
        uint x;
        uint y;
    }

    struct G2Point {
        uint[2] x;
        uint[2] y;
    }

    function P1() internal pure returns (G1Point memory) {
        return G1Point(1, 2);
    }

    function P2() internal pure returns (G2Point memory) {
        return G2Point(
            [11559732032986387107991004021392285783925812861821192530917403151452391805634,
            10857046999023057135944570762232829481370756359578518086990519993285655852781],

            [4082367875863433681332203403145435568316851327593401208105741076214120093531,
            8495653923123431417604973247489272438418190587263600148770280649306958101930]
        );
    }

    function pointAdd(G1Point memory p1, G1Point memory p2) internal returns (G1Point memory r) {
        uint[4] memory input;
        input[0] = p1.x;
        input[1] = p1.y;
        input[2] = p2.x;
        input[3] = p2.y;
        assembly {
            if iszero(call(sub(gas, 2000), 0x6, 0, input, 0x80, r, 0x40)) {
                revert(0, 0)
            }
        }
    }

    function scalarMul(G1Point memory p, uint s) internal returns (G1Point memory r) {
        uint[3] memory input;
        input[0] = p.x;
        input[1] = p.y;
        input[2] = s;
        assembly {
            if iszero(call(sub(gas, 2000), 0x7, 0, input, 0x60, r, 0x40)) {
                revert(0, 0)
            }
        }
    }

    function negate(G1Point memory p) internal pure returns (G1Point memory) {
        if (p.x == 0 && p.y == 0) {
            return p;
        }
        uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
        return G1Point(p.x, q - p.y % q);
    }

    function hashToG1(bytes memory data) internal returns (G1Point memory) {
        uint256 h = uint256(keccak256(data));
        return scalarMul(P1(), h);
    }

    function G2Equal(G2Point memory p1, G2Point memory p2) internal pure returns (bool) {
        return p1.x[0] == p2.x[0] && p1.x[1] == p2.x[1] && p1.y[0] == p2.y[0] && p1.y[1] == p2.y[1];
    }

    // @return the result of computing the pairing check
    // check passes if e(p1[0], p2[0]) *  .... * e(p1[n], p2[n]) == 1
    // E.g. pairing([p1, p1.negate()], [p2, p2]) should return true.
    function pairingCheck(G1Point[] memory p1, G2Point[] memory p2) internal returns (bool) {
        require(p1.length == p2.length);
        uint elements = p1.length;
        uint inputSize = elements * 6;
        uint[] memory input = new uint[](inputSize);

        for (uint i = 0; i < elements; i++)
        {
            input[i * 6 + 0] = p1[i].x;
            input[i * 6 + 1] = p1[i].y;
            input[i * 6 + 2] = p2[i].x[0];
            input[i * 6 + 3] = p2[i].x[1];
            input[i * 6 + 4] = p2[i].y[0];
            input[i * 6 + 5] = p2[i].y[1];
        }

        uint[1] memory out;
        bool success;
        assembly {
            success := call(
                sub(gas, 2000),
                0x8,
                0,
                add(input, 0x20),
                mul(inputSize, 0x20),
                out, 0x20
            )
        }
        return success && (out[0] != 0);
    }
}

contract IUserContract {
    // Query callback.
    function __callback__(uint, bytes calldata) external;
    // Random number callback.
    function __callback__(uint, uint) external;
}

contract ICommitReveal {
    function startCommitReveal(uint, uint, uint, uint) public returns(uint);
    function getRandom(uint) public returns(uint);
}

contract IDOSAddressBridge {
    function getCommitRevealAddress() public view returns(address);
    function getPaymentAddress() public view returns(address);
    function getStakingAddress() public view returns(address);
}

contract IDOSPayment {
    function hasServiceFee(address, uint) public view returns (bool);
    function chargeServiceFee(address, uint, uint) public;
    function recordServiceFee(uint, address, address[] memory) public;
    function claimGuardianReward(address) public;
    function setPaymentMethod(address, address) public;
}

contract IDOSStaking {
    function nodeStart(address _nodeAddr) public;
    function nodeStop(address _nodeAddr) public;
    function isValidStakingNode(address _nodeAddr) public view returns(bool);
}

contract DOSProxy {
    using BN256 for *;

    // Metadata of pending request.
    struct PendingRequest {
        uint requestId;
        uint groupId;
        BN256.G2Point handledGroupPubKey;
        // Calling contract who issues the request.
        address callbackAddr;
    }

    // Metadata of registered group.
    struct Group {
        uint groupId;
        BN256.G2Point groupPubKey;
        uint life;
        uint birthBlkN;
        address[] members;
    }

    // Metadata of a to-be-registered group whose members are determined already.
    struct PendingGroup {
        uint groupId;
        uint startBlkNum;
        mapping(bytes32 => uint) pubKeyCounts;
        // 0x1 (HEAD) -> member1 -> member2 -> ... -> memberN -> 0x1 (HEAD)
        mapping(address => address) memberList;
    }

    address private owner;
    uint public initBlkN;
    // calling requestId => PendingQuery metadata
    mapping(uint => PendingRequest) PendingRequests;

    uint public relayRespondLimit = 128; // in blocks
    uint public refreshSystemRandomHardLimit = 2048; // in blocks
    uint public groupMaturityPeriod = refreshSystemRandomHardLimit * 32; // in blocks
    uint public lifeDiversity = refreshSystemRandomHardLimit * 4; // in blocks
    // avoid looping in a big loop that causing over gas.
    uint public loopLimit = 50;

    // Minimum 4 groups to bootstrap
    uint public bootstrapGroups = 4;
    // When regrouping, picking @groupToPick working groups, plus one group from pending nodes.
    uint public groupToPick = 2;
    uint public groupSize = 3;

    // Bootstrapping related arguments, in blocks.
    uint public bootstrapCommitDuration = 40;
    uint public bootstrapRevealDuration = 40;
    uint public bootstrapStartThreshold = groupSize * bootstrapGroups;
    uint public bootstrapRound;
    uint public bootstrapEndBlk;

    IDOSAddressBridge public addressBridge;
    address public proxyFundsAddr;
    address public proxyFundsTokenAddr;

    uint private constant UINTMAX = uint(-1);
    // Dummy head and placeholder used in linkedlists.
    uint private constant HEAD_I = 0x1;
    address private constant HEAD_A = address(0x1);

    // Linkedlist of newly registered ungrouped nodes, with HEAD points to the earliest and pendingNodeTail points to the latest.
    // Initial state: pendingNodeList[HEAD_A] == HEAD_A && pendingNodeTail == HEAD_A.
    mapping(address => address) public pendingNodeList;
    address public pendingNodeTail;
    uint public numPendingNodes;

    // node => working/pending GroupId
    // Unregisted node: { nodeAddr : 0 }
    // { nodeAddr : HEAD_I } -> registered node but not in any group
    mapping(address => uint) public nodeToGroupId;

    // groupId => Group
    mapping(uint => Group) workingGroups;
    // Index:groupId
    uint[] public workingGroupIds;
    uint[] public expiredWorkingGroupIds;

    // groupId => PendingGroup
    mapping(uint => PendingGroup) public pendingGroups;
    uint public pendingGroupMaxLife = 20;  // in blocks

    // Initial state: pendingGroupList[HEAD_I] == HEAD_I && pendingGroupTail == HEAD_I
    mapping(uint => uint) public pendingGroupList;
    uint public pendingGroupTail;
    uint public numPendingGroups;

    uint public cachedUpdatedBlock;
    uint public lastUpdatedBlock;
    uint public lastRandomness;
    uint public lastFormGrpReqId;
    Group lastHandledGroup;

    // Only whitelised guardian are permitted to kick off signalUnregister process
    // TODO : Chose a random group to check and has a consensus about which nodes should be unregister in v2.0.
    mapping(address => bool) public guardianListed;
    enum TrafficType {
        SystemRandom,
        UserRandom,
        UserQuery
    }

    event LogUrl(uint queryId, uint timeout, string dataSource, string selector, uint randomness, uint dispatchedGroupId);
    event LogRequestUserRandom(uint requestId, uint lastSystemRandomness, uint userSeed, uint dispatchedGroupId);
    event LogNonSupportedType(string invalidSelector);
    event LogNonContractCall(address from);
    event LogCallbackTriggeredFor(address callbackAddr);
    event LogRequestFromNonExistentUC();
    event LogUpdateRandom(uint lastRandomness, uint dispatchedGroupId);
    event LogValidationResult(uint8 trafficType, uint trafficId, bytes message, uint[2] signature, uint[4] pubKey, bool pass);
    event LogInsufficientPendingNode(uint numPendingNodes);
    event LogInsufficientWorkingGroup(uint numWorkingGroups, uint numPendingGroups);
    event LogGrouping(uint groupId, address[] nodeId);
    event LogPublicKeyAccepted(uint groupId, uint[4] pubKey, uint numWorkingGroups);
    event LogPublicKeySuggested(uint groupId, uint pubKeyCount);
    event LogGroupDissolve(uint groupId);
    event LogRegisteredNewPendingNode(address node);
    event LogUnRegisteredNewPendingNode(address node, uint8 unregisterFrom);
    event LogGroupingInitiated(uint pendingNodePool, uint groupsize);
    event LogNoPendingGroup(uint groupId);
    event LogPendingGroupRemoved(uint groupId);
    event LogMessage(string info);
    event GuardianReward(uint blkNum, address guardian);

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    modifier fromValidStakingNode {
        require(IDOSStaking(addressBridge.getStakingAddress()).isValidStakingNode(msg.sender),
                "invalid-staking-node");
        _;
    }

    modifier hasOracleFee(address from, uint serviceType) {
        require(
            IDOSPayment(addressBridge.getPaymentAddress()).hasServiceFee(from, serviceType),
            "not-enough-fee-to-oracle");
        _;
    }

    modifier onlyGuardianListed {
        require(guardianListed[msg.sender], "not-guardian");
        _;
    }

    constructor(address _bridgeAddr, address _proxyFundsAddr, address _proxyFundsTokenAddr) public {
        owner = msg.sender;
        initBlkN = block.number;
        pendingNodeList[HEAD_A] = HEAD_A;
        pendingNodeTail = HEAD_A;
        pendingGroupList[HEAD_I] = HEAD_I;
        pendingGroupTail = HEAD_I;
        addressBridge = IDOSAddressBridge(_bridgeAddr);
        proxyFundsAddr = _proxyFundsAddr;
        proxyFundsTokenAddr = _proxyFundsTokenAddr;
        IDOSPayment(addressBridge.getPaymentAddress()).setPaymentMethod(proxyFundsAddr, proxyFundsTokenAddr);
    }

    function addToGuardianList(address _addr) public onlyOwner {
        guardianListed[_addr] = true;
    }

    function removeFromGuardianList(address _addr) public onlyOwner {
        delete guardianListed[_addr];
    }

    function setProxyFund(address newFund, address newFundToken) public onlyOwner {
        require(newFund != proxyFundsAddr && newFund != address(0x0), "invalid-parameter");
        require(newFundToken != proxyFundsTokenAddr && newFundToken != address(0x0), "invalid-parameter");
        proxyFundsAddr = newFund;
        proxyFundsTokenAddr = newFundToken;
        IDOSPayment(addressBridge.getPaymentAddress()).setPaymentMethod(proxyFundsAddr, proxyFundsTokenAddr);
    }

    // groupSize must be an odd number.
    function setGroupSize(uint newSize) public onlyOwner {
        require(newSize != groupSize && newSize % 2 != 0, "invalid-parameter");
        groupSize = newSize;
    }

    function setBootstrapStartThreshold(uint newThreshold) public onlyOwner {
        require(newThreshold != bootstrapStartThreshold, "invalid-parameter");
        bootstrapStartThreshold = newThreshold;
    }

    function setBootstrapCommitDuration(uint newDuration) public onlyOwner {
        require(newDuration != bootstrapCommitDuration && newDuration != 0, "invalid-parameter");
        bootstrapCommitDuration = newDuration;
    }

    function setBootstrapRevealDuration(uint newDuration) public onlyOwner {
        require(newDuration != bootstrapRevealDuration && newDuration != 0, "invalid-parameter");
        bootstrapRevealDuration = newDuration;
    }

    function setGroupMaturityPeriod(uint newPeriod) public onlyOwner {
        require(newPeriod != groupMaturityPeriod && newPeriod != 0, "invalid-parameter");
        groupMaturityPeriod = newPeriod;
    }

    function setLifeDiversity(uint newDiversity) public onlyOwner {
        require(newDiversity != lifeDiversity && newDiversity != 0, "invalid-parameter");
        lifeDiversity = newDiversity;
    }

    function setPendingGroupMaxLife(uint newLife) public onlyOwner {
        require(newLife != pendingGroupMaxLife && newLife != 0, "invalid-parameter");
        pendingGroupMaxLife = newLife;
    }

    function setRelayRespondLimit(uint newLimit) public onlyOwner {
        require(newLimit != relayRespondLimit, "invalid-parameter");
        relayRespondLimit = newLimit;
    }

    function setSystemRandomHardLimit(uint newLimit) public onlyOwner {
        require(newLimit != refreshSystemRandomHardLimit && newLimit != 0, "invalid-parameter");
        refreshSystemRandomHardLimit = newLimit;
    }

    function getWorkingGroupById(uint groupId) public view returns(uint, uint[4] memory, uint, uint, address[] memory) {
        BN256.G2Point storage pubKey = workingGroups[groupId].groupPubKey;
        return (
            workingGroups[groupId].groupId,
            [pubKey.x[0], pubKey.x[1], pubKey.y[0], pubKey.y[1]],
            workingGroups[groupId].life,
            workingGroups[groupId].birthBlkN,
            workingGroups[groupId].members
        );
    }

    function getCodeSize(address addr) private view returns (uint size) {
        assembly {
            size := extcodesize(addr)
        }
    }

    function dispatchJobCore(TrafficType trafficType, uint pseudoSeed) private returns(uint idx) {
        uint dissolveIdx = 0;
        do {
            if (workingGroupIds.length == 0) {
                return UINTMAX;
            }
            if (dissolveIdx >= workingGroupIds.length ||
                dissolveIdx >= loopLimit) {
                uint rnd = uint(keccak256(abi.encodePacked(trafficType, pseudoSeed, lastRandomness, block.number)));
                return rnd % workingGroupIds.length;
            }
            Group storage group = workingGroups[workingGroupIds[dissolveIdx]];
            if (groupMaturityPeriod + group.birthBlkN + group.life <= block.number) {
                // Dissolving expired working groups happens in another phase for gas reasons.
                expiredWorkingGroupIds.push(workingGroupIds[dissolveIdx]);
                workingGroupIds[dissolveIdx] = workingGroupIds[workingGroupIds.length - 1];
                workingGroupIds.length--;
            }
            dissolveIdx++;
        } while (true);
    }

    function dispatchJob(TrafficType trafficType, uint pseudoSeed) private returns(uint) {
        kickoffRandomOnCondition();
        return dispatchJobCore(trafficType, pseudoSeed);
    }

    function kickoffRandomOnCondition() private returns (bool) {
        if (lastUpdatedBlock + refreshSystemRandomHardLimit > block.number || cachedUpdatedBlock + relayRespondLimit > block.number) {
            return false;
        }

        uint idx = dispatchJobCore(TrafficType.SystemRandom, uint(blockhash(block.number - 1)));
        // TODO: keep id receipt and handle later in v2.0.
        if (idx == UINTMAX) {
            emit LogMessage("no-live-wgrp,try-bootstrap");
            return false;
        }

        cachedUpdatedBlock = block.number;
        lastHandledGroup = workingGroups[workingGroupIds[idx]];
        // Signal off-chain clients
        emit LogUpdateRandom(lastRandomness, lastHandledGroup.groupId);
        IDOSPayment(addressBridge.getPaymentAddress()).chargeServiceFee(proxyFundsAddr, /*requestId=*/lastRandomness, uint(TrafficType.SystemRandom));
        return true;
    }

    function insertToPendingGroupListTail(uint groupId) private {
        pendingGroupList[groupId] = pendingGroupList[pendingGroupTail];
        pendingGroupList[pendingGroupTail] = groupId;
        pendingGroupTail = groupId;
        numPendingGroups++;
    }

    function insertToPendingNodeListTail(address node) private {
        pendingNodeList[node] = pendingNodeList[pendingNodeTail];
        pendingNodeList[pendingNodeTail] = node;
        pendingNodeTail = node;
        numPendingNodes++;
    }

    function insertToPendingNodeListHead(address node) private {
        pendingNodeList[node] = pendingNodeList[HEAD_A];
        pendingNodeList[HEAD_A] = node;
        numPendingNodes++;
    }

    function insertToListHead(mapping(uint => uint) storage list, uint id) private {
        list[id] = list[HEAD_I];
        list[HEAD_I] = id;
    }

    /// Remove Node from a storage linkedlist.
    function removeNodeFromList(mapping(address => address) storage list, address node) private returns(address, bool) {
        (address prev, bool found) = findNodeFromList(list, node);
        if (found) {
            list[prev] = list[node];
            delete list[node];
        }
        return (prev, found);
    }

    /// Find Node from a storage linkedlist.
    function findNodeFromList(mapping(address => address) storage list, address node) private view returns(address, bool) {
        address prev = HEAD_A;
        address curr = list[prev];
        while (curr != HEAD_A && curr != node) {
            prev = curr;
            curr = list[prev];
        }
        if (curr == HEAD_A) {
            return (HEAD_A, false);
        } else {
            return (prev, true);
        }
    }

    /// Remove id from a storage linkedlist. Need to check tail after this done
    function removeIdFromList(mapping(uint => uint) storage list, uint id) private returns(uint, bool) {
        uint prev = HEAD_I;
        uint curr = list[prev];
        while (curr != HEAD_I && curr != id) {
            prev = curr;
            curr = list[prev];
        }
        if (curr == HEAD_I) {
            return (HEAD_I, false);
        } else {
            list[prev] = list[curr];
            delete list[curr];
            return (prev, true);
        }
    }

    /// Remove node from a storage linkedlist.
    function checkAndRemoveFromPendingGroup(address node) private returns(bool) {
        uint prev = HEAD_I;
        uint curr = pendingGroupList[prev];
        while (curr != HEAD_I) {
            PendingGroup storage pgrp = pendingGroups[curr];
            (, bool found) = findNodeFromList(pgrp.memberList, node);
            if (found) {
                cleanUpPendingGroup(curr, node);
                return true;
            }
            prev = curr;
            curr = pendingGroupList[prev];
        }
        return false;
    }

    /// @notice Caller ensures no index overflow. Put members back to pendingNodeList's tail if necessary.
    /// Skip pushing member into pendingNodeList if that_member == skipNode, even when backToPendingPool is set.
    function dissolveWorkingGroup(uint groupId, bool backToPendingPool, address skipNode) private {
        /// Deregister expired working group and remove metadata.
        Group storage grp = workingGroups[groupId];
        for (uint i = 0; i < grp.members.length; i++) {
            address member = grp.members[i];
            // Update nodeToGroupId[member] and put members back to pendingNodeList's tail if necessary.
            // Notice: Guardian may need to signal group formation.
            if (nodeToGroupId[member] == groupId) {
                nodeToGroupId[member] = HEAD_I;
                if (backToPendingPool && member != skipNode && pendingNodeList[member] == address(0)) {
                    insertToPendingNodeListTail(member);
                }
            }
        }
        delete workingGroups[groupId];
        emit LogGroupDissolve(groupId);
    }

    // Returns query id.
    function query(
        address from,
        uint timeout,
        string calldata dataSource,
        string calldata selector
    )
        external
        hasOracleFee(from, uint(TrafficType.UserQuery))
        returns (uint)
    {
        if (getCodeSize(from) > 0) {
            bytes memory bs = bytes(selector);
            // '': Return whole raw response;
            // Starts with '$': response format is parsed as json.
            // Starts with '/': response format is parsed as xml/html.
            if (bs.length == 0 || bs[0] == '$' || bs[0] == '/') {
                uint queryId = uint(keccak256(abi.encode(block.timestamp, from, timeout, dataSource, selector)));
                uint idx = dispatchJob(TrafficType.UserQuery, queryId);
                // TODO: keep id receipt and handle later in v2.0.
                if (idx == UINTMAX) {
                    emit LogMessage("skipped-user-query-no-live-wgrp");
                    return 0;
                }
                Group storage grp = workingGroups[workingGroupIds[idx]];
                PendingRequests[queryId] = PendingRequest(queryId, grp.groupId, grp.groupPubKey, from);
                emit LogUrl(
                    queryId,
                    timeout,
                    dataSource,
                    selector,
                    lastRandomness,
                    grp.groupId
                );
                IDOSPayment(addressBridge.getPaymentAddress()).chargeServiceFee(from, queryId, uint(TrafficType.UserQuery));
                return queryId;
            } else {
                emit LogNonSupportedType(selector);
                return 0;
            }
        } else {
            // Skip if @from is not contract address.
            emit LogNonContractCall(from);
            return 0;
        }
    }

    // Request a new user-level random number.
    function requestRandom(address from, uint userSeed)
        public
        hasOracleFee(from, uint(TrafficType.UserRandom))
        returns (uint)
    {
        uint requestId = uint(keccak256(abi.encode(block.timestamp, from, userSeed)));
        uint idx = dispatchJob(TrafficType.UserRandom, requestId);
        // TODO: keep id receipt and handle later in v2.0.
        if (idx == UINTMAX) {
            emit LogMessage("skipped-user-rnd-no-live-wgrp");
            return 0;
        }
        Group storage grp = workingGroups[workingGroupIds[idx]];
        PendingRequests[requestId] = PendingRequest(requestId, grp.groupId, grp.groupPubKey, from);
        // sign(requestId ||lastSystemRandomness || userSeed ||
        // selected sender in group)
        emit LogRequestUserRandom(
            requestId,
            lastRandomness,
            userSeed,
            grp.groupId
        );
        IDOSPayment(addressBridge.getPaymentAddress()).chargeServiceFee(
            from == address(this) ? proxyFundsAddr : from,
            requestId,
            uint(TrafficType.UserRandom)
        );
        return requestId;
    }

    // Random submitter validation + group signature verification.
    function validateAndVerify(
        uint8 trafficType,
        uint trafficId,
        bytes memory data,
        BN256.G1Point memory signature,
        BN256.G2Point memory grpPubKey
    )
        private
        returns (bool)
    {
        // Validation. Clients actually signs (data || addr(selected_submitter)).
        bytes memory message = abi.encodePacked(data, msg.sender);

        // Verification
        BN256.G1Point[] memory p1 = new BN256.G1Point[](2);
        BN256.G2Point[] memory p2 = new BN256.G2Point[](2);
        p1[0] = BN256.negate(signature);
        p1[1] = BN256.hashToG1(message);
        p2[0] = BN256.P2();
        p2[1] = grpPubKey;
        bool passVerify = BN256.pairingCheck(p1, p2);
        emit LogValidationResult(
            trafficType,
            trafficId,
            message,
            [signature.x, signature.y],
            [grpPubKey.x[0], grpPubKey.x[1], grpPubKey.y[0], grpPubKey.y[1]],
            passVerify
        );
        return passVerify;
    }

    function triggerCallback(
        uint requestId,
        uint8 trafficType,
        bytes calldata result,
        uint[2] calldata sig
    )
        external
        fromValidStakingNode
    {
        address ucAddr = PendingRequests[requestId].callbackAddr;
        if (ucAddr == address(0x0)) {
            emit LogRequestFromNonExistentUC();
            return;
        }

        if (!validateAndVerify(
                trafficType,
                requestId,
                result,
                BN256.G1Point(sig[0], sig[1]),
                PendingRequests[requestId].handledGroupPubKey))
        {
            return;
        }

        emit LogCallbackTriggeredFor(ucAddr);
        delete PendingRequests[requestId];
        if (trafficType == uint8(TrafficType.UserQuery)) {
            IUserContract(ucAddr).__callback__(requestId, result);
        } else if (trafficType == uint8(TrafficType.UserRandom)) {
            // Safe random number is the collectively signed threshold signature
            // of the message (requestId || lastRandomness || userSeed ||
            // selected sender in group).
            emit LogMessage("UserRandom");
            IUserContract(ucAddr).__callback__(
                requestId, uint(keccak256(abi.encodePacked(sig[0], sig[1]))));
        } else {
            revert("unsupported-traffic-type");
        }
        Group memory grp = workingGroups[PendingRequests[requestId].groupId];
        IDOSPayment(addressBridge.getPaymentAddress()).recordServiceFee(requestId, msg.sender, grp.members);
    }

    function toBytes(uint x) private pure returns (bytes memory b) {
        b = new bytes(32);
        assembly { mstore(add(b, 32), x) }
    }

    // System-level secure distributed random number generator.
    function updateRandomness(uint[2] calldata sig) external fromValidStakingNode {
        if (!validateAndVerify(
                uint8(TrafficType.SystemRandom),
                lastRandomness,
                toBytes(lastRandomness),
                BN256.G1Point(sig[0], sig[1]),
                lastHandledGroup.groupPubKey))
        {
            return;
        }

        cachedUpdatedBlock = 0;
        lastUpdatedBlock = block.number;
        uint claimFeeId = lastRandomness;
        // Update new randomness = sha3(collectively signed group signature)
        lastRandomness = uint(keccak256(abi.encodePacked(sig[0], sig[1])));
        IDOSPayment(addressBridge.getPaymentAddress()).recordServiceFee(claimFeeId, msg.sender, lastHandledGroup.members);
    }

    function cleanUpPendingGroup(uint gid, address skipNode) private {
        PendingGroup storage pgrp = pendingGroups[gid];
        address member = pgrp.memberList[HEAD_A];
        while (member != HEAD_A) {
            // 1. Put member that shouldn't be skipped back to pendingNodeList's head if it's not in any workingGroup.
            // Dissolved pendingGroup members have priority to form into a workingGroup.
            if (nodeToGroupId[member] == HEAD_I && member != skipNode && pendingNodeList[member] == address(0)) {
                insertToPendingNodeListHead(member);
            }
            member = pgrp.memberList[member];
        }
        // 2. Update pendingGroupList
        (uint prev, bool removed) = removeIdFromList(pendingGroupList, gid);
        // Reset pendingGroupTail if necessary.
        if (removed && pendingGroupTail == gid) {
            pendingGroupTail = prev;
        }

        // 3. Update pendingGroup
        delete pendingGroups[gid];
        numPendingGroups--;
        emit LogPendingGroupRemoved(gid);
    }

    /// Guardian node functions
    /// @dev Guardian signals expiring system randomness and kicks off distributed random engine again.
    ///  Anyone including but not limited to DOS client node can be a guardian and claim rewards.
    function signalRandom() public {
        if (kickoffRandomOnCondition()) {
            emit GuardianReward(block.number, msg.sender);
            IDOSPayment(addressBridge.getPaymentAddress()).claimGuardianReward(msg.sender);
        } else {
            emit LogMessage("sys-random-not-expired");
        }
    }

    /// @dev Guardian signals to dissolve expired (workingGroup + pendingGroup) and claim guardian rewards.
    function signalGroupDissolve() public {
        // Clean up oldest expired PendingGroup and related metadata. Might be due to failed DKG.
        uint gid = pendingGroupList[HEAD_I];
        if (gid != HEAD_I && pendingGroups[gid].startBlkNum + pendingGroupMaxLife < block.number) {
            cleanUpPendingGroup(gid, HEAD_A);
            emit GuardianReward(block.number, msg.sender);
            IDOSPayment(addressBridge.getPaymentAddress()).claimGuardianReward(msg.sender);
        } else {
            emit LogMessage("no-expired-pgrp-to-clean");
        }
    }
    /// @dev Guardian signals to trigger group formation when there're enough pending nodes.
    ///  If there aren't enough working groups to choose to dossolve, probably a new bootstrap is needed.
    function signalGroupFormation() public {
        if (formGroup()) {
            emit GuardianReward(block.number, msg.sender);
            IDOSPayment(addressBridge.getPaymentAddress()).claimGuardianReward(msg.sender);
        } else {
            emit LogMessage("no-grp-formation");
        }
    }
    function signalBootstrap(uint _cid) public {
        require(bootstrapRound == _cid, "not-in-bootstrap");

        if (block.number <= bootstrapEndBlk) {
            emit LogMessage("wait-to-collect-more-entropy");
            return;
        }
        if (numPendingNodes < bootstrapStartThreshold) {
            emit LogMessage("not-enough-p-node-to-bootstrap");
            return;
        }
        // Reset.
        bootstrapRound = 0;
        bootstrapEndBlk = 0;
        uint rndSeed = ICommitReveal(addressBridge.getCommitRevealAddress()).getRandom(_cid);
        if (rndSeed == 0) {
            emit LogMessage("bootstrap-commit-reveal-failure");
            return;
        }
        cachedUpdatedBlock = 0;
        lastUpdatedBlock = block.number;
        lastRandomness = uint(keccak256(abi.encodePacked(lastRandomness, rndSeed)));

        uint arrSize = bootstrapStartThreshold / groupSize * groupSize;
        address[] memory candidates = new address[](arrSize);

        pick(arrSize, 0, candidates);
        shuffle(candidates, lastRandomness);
        regroup(candidates, arrSize / groupSize);
        emit GuardianReward(block.number, msg.sender);
        IDOSPayment(addressBridge.getPaymentAddress()).claimGuardianReward(msg.sender);
    }
    // TODO: Chose a random group to check and has a consensus about which nodes should be unregister in v2.0
    function signalUnregister(address member) public onlyGuardianListed {
        if (unregister(member)) {
            emit GuardianReward(block.number, msg.sender);
            IDOSPayment(addressBridge.getPaymentAddress()).claimGuardianReward(msg.sender);
        } else {
            emit LogMessage("nothing-to-unregister");
        }
    }
    /// End of Guardian functions

    function unregisterNode() public fromValidStakingNode returns (bool) {
        return unregister(msg.sender);
    }

    // Returns true if successfully unregistered node.
    function unregister(address node) private returns (bool) {
        uint groupId = nodeToGroupId[node];
        bool removed = false;
        uint8 unregisteredFrom = 0;
        // Check if node is in workingGroups or expiredWorkingGroup
        if (groupId != 0 && groupId != HEAD_I) {
            dissolveWorkingGroup(groupId, true, node);
            for (uint idx = 0; idx < workingGroupIds.length; idx++) {
                if (workingGroupIds[idx] == groupId) {
                    if (idx != (workingGroupIds.length - 1)) {
                        workingGroupIds[idx] = workingGroupIds[workingGroupIds.length - 1];
                    }
                    workingGroupIds.length--;
                    removed = true;
                    unregisteredFrom |= 0x1;
                    break;
                }
            }
            if (!removed) {
                for (uint idx = 0; idx < expiredWorkingGroupIds.length; idx++) {
                    if (expiredWorkingGroupIds[idx] == groupId) {
                        if (idx != (expiredWorkingGroupIds.length - 1)) {
                            expiredWorkingGroupIds[idx] = expiredWorkingGroupIds[expiredWorkingGroupIds.length - 1];
                        }
                        expiredWorkingGroupIds.length--;
                        removed = true;
                        unregisteredFrom |= 0x2;
                        break;
                    }
                }
            }
        }

        // Check if node is in pendingGroups
        if (!removed && checkAndRemoveFromPendingGroup(node)) {
            unregisteredFrom |= 0x4;
        }

        // Check if node is in pendingNodeList
        if (pendingNodeList[node] != address(0)) {
            // Update pendingNodeList
            address prev;
            (prev, removed) = removeNodeFromList(pendingNodeList, node);
            if (removed) {
                numPendingNodes--;
                // Reset pendingNodeTail if necessary.
                if (pendingNodeTail == node) {
                    pendingNodeTail = prev;
                }
                unregisteredFrom |= 0x8;
            }
        }
        delete nodeToGroupId[node];
        IDOSStaking(addressBridge.getStakingAddress()).nodeStop(node);
        emit LogUnRegisteredNewPendingNode(node, unregisteredFrom);
        return (unregisteredFrom != 0);
    }

    function getWorkingGroupSize() public view returns (uint) {
        return workingGroupIds.length;
    }

    function getExpiredWorkingGroupSize() public view returns (uint) {
        return expiredWorkingGroupIds.length;
    }

    function registerNewNode() public fromValidStakingNode {
        // Duplicated pending node
        if (pendingNodeList[msg.sender] != address(0)) {
            return;
        }
        // Already registered in pending or working groups
        if (nodeToGroupId[msg.sender] != 0) {
            return;
        }
        nodeToGroupId[msg.sender] = HEAD_I;
        insertToPendingNodeListTail(msg.sender);
        emit LogRegisteredNewPendingNode(msg.sender);
        IDOSStaking(addressBridge.getStakingAddress()).nodeStart(msg.sender);
        formGroup();
    }

    // Form into new working groups or bootstrap if necessary.
    // Return true if forms a new group.
    function formGroup() private returns(bool) {
        // Clean up oldest expiredWorkingGroup and push back nodes to pendingNodeList if:
        // 1. There's not enough pending nodes to form a group;
        // 2. There's no working group and not enough pending nodes to restart bootstrap.
        if (numPendingNodes < groupSize ||
            (workingGroupIds.length == 0 && numPendingNodes < bootstrapStartThreshold)) {
            if (expiredWorkingGroupIds.length > 0) {
                dissolveWorkingGroup(expiredWorkingGroupIds[0], true, HEAD_A);
                expiredWorkingGroupIds[0] = expiredWorkingGroupIds[expiredWorkingGroupIds.length - 1];
                expiredWorkingGroupIds.length--;
            }
        }

        if (numPendingNodes < groupSize) {
            emit LogInsufficientPendingNode(numPendingNodes);
            return false;
        }

        if (workingGroupIds.length > 0) {
            if (expiredWorkingGroupIds.length >= groupToPick) {
                if (lastFormGrpReqId == 0) {
                    lastFormGrpReqId = requestRandom(address(this), block.number);
                    if (lastFormGrpReqId == 0) return false;
                    emit LogGroupingInitiated(numPendingNodes, groupSize);
                    return true;
                } else {
                    emit LogMessage("already-in-formation");
                    return false;
                }
            } else {
                emit LogMessage("skipped-formation-not-enough-expired-wgrp");
            }
        } else if (numPendingNodes >= bootstrapStartThreshold) { // No working group alive and satisfies system re-bootstrap condition.
            if (bootstrapRound == 0) {
                bootstrapRound = ICommitReveal(addressBridge.getCommitRevealAddress()).startCommitReveal(
                    block.number,
                    bootstrapCommitDuration,
                    bootstrapRevealDuration,
                    bootstrapStartThreshold
                );
                bootstrapEndBlk = block.number + bootstrapCommitDuration + bootstrapRevealDuration;
                return true;
            } else {
                emit LogMessage("already-in-bootstrap");
            }
        }
        return false;
    }

    // callback to handle re-grouping using generated random number as random seed.
    function __callback__(uint requestId, uint rndSeed) external {
        require(msg.sender == address(this), "unauthenticated-resp");
        require(expiredWorkingGroupIds.length >= groupToPick, "regroup-not-enough-expired-wgrp");
        require(numPendingNodes >= groupSize, "regroup-not-enough-p-node");

        lastFormGrpReqId = 0;
        uint arrSize = groupSize * (groupToPick + 1);
        address[] memory candidates = new address[](arrSize);
        for (uint i = 0; i < groupToPick; i++) {
            uint idx = uint(keccak256(abi.encodePacked(rndSeed, requestId, i))) % expiredWorkingGroupIds.length;
            Group storage grpToDissolve = workingGroups[expiredWorkingGroupIds[idx]];
            for (uint j = 0; j < groupSize; j++) {
                candidates[i * groupSize + j] = grpToDissolve.members[j];
            }
            // Do not put selected to-be-dissolved expired working group back to pending node pool.
            dissolveWorkingGroup(grpToDissolve.groupId, false, HEAD_A);
            expiredWorkingGroupIds[idx] = expiredWorkingGroupIds[expiredWorkingGroupIds.length - 1];
            expiredWorkingGroupIds.length--;
        }

        pick(groupSize, groupSize * groupToPick, candidates);
        shuffle(candidates, rndSeed);
        regroup(candidates, groupToPick + 1);
    }

    // Pick @num nodes from pendingNodeList's head and put into the @candidates array from @startIndex.
    function pick(uint num, uint startIndex, address[] memory candidates) private {
        for (uint i = 0; i < num; i++) {
            address curr = pendingNodeList[HEAD_A];
            pendingNodeList[HEAD_A] = pendingNodeList[curr];
            delete pendingNodeList[curr];
            candidates[startIndex + i] = curr;
        }
        numPendingNodes -= num;
        // Reset pendingNodeTail if necessary.
        if (numPendingNodes == 0) {
            pendingNodeTail = HEAD_A;
        }
    }

    // Shuffle a memory array using a secure random seed.
    function shuffle(address[] memory arr, uint rndSeed) private pure {
        for (uint i = arr.length - 1; i > 0; i--) {
            uint j = uint(keccak256(abi.encodePacked(rndSeed, i, arr[i]))) % (i + 1);
            address tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }

    // Regroup a shuffled node array.
    function regroup(address[] memory candidates, uint num) private {
        require(candidates.length == groupSize * num, "candidate-length-mismatch");

        address[] memory members = new address[](groupSize);
        uint groupId;
        for (uint i = 0; i < num; i++) {
            groupId = 0;
            for (uint j = 0; j < groupSize; j++) {
                members[j] = candidates[i * groupSize + j];
                groupId = uint(keccak256(abi.encodePacked(groupId, members[j])));
            }
            // groupId = sha3{ sha3(...(sha3(sha3(member 1), member 2), ...), member n), timestamp}
            // This ensures unique groupId even for the same members.
            groupId = uint(keccak256(abi.encodePacked(groupId, block.timestamp)));
            pendingGroups[groupId] = PendingGroup(groupId, block.number);
            mapping(address => address) storage memberList = pendingGroups[groupId].memberList;
            memberList[HEAD_A] = HEAD_A;
            for (uint j = 0; j < groupSize; j++) {
                memberList[members[j]] = memberList[HEAD_A];
                memberList[HEAD_A] = members[j];
            }
            insertToPendingGroupListTail(groupId);
            emit LogGrouping(groupId, members);
        }
    }

    function registerGroupPubKey(uint groupId, uint[4] calldata suggestedPubKey)
        external
        fromValidStakingNode
    {
        PendingGroup storage pgrp = pendingGroups[groupId];
        if (pgrp.groupId == 0) {
            emit LogNoPendingGroup(groupId);
            return;
        }

        require(pgrp.memberList[msg.sender] != address(0), "not-from-authorized-grp-member");

        bytes32 hashedPubKey = keccak256(abi.encodePacked(
            suggestedPubKey[0], suggestedPubKey[1], suggestedPubKey[2], suggestedPubKey[3]));
        pgrp.pubKeyCounts[hashedPubKey]++;
        emit LogPublicKeySuggested(groupId, pgrp.pubKeyCounts[hashedPubKey]);
        if (pgrp.pubKeyCounts[hashedPubKey] > groupSize / 2) {
            address[] memory memberArray = new address[](groupSize);
            uint idx = 0;
            address member = pgrp.memberList[HEAD_A];
            while (member != HEAD_A) {
                memberArray[idx++] = member;
                nodeToGroupId[member] = groupId;
                member = pgrp.memberList[member];
            }

            workingGroupIds.push(groupId);
            workingGroups[groupId] = Group(
                groupId,
                BN256.G2Point([suggestedPubKey[0], suggestedPubKey[1]], [suggestedPubKey[2], suggestedPubKey[3]]),
                numPendingGroups * lifeDiversity,
                block.number,
                memberArray
            );
            // Update pendingGroupList
            (uint prev, bool removed) = removeIdFromList(pendingGroupList, groupId);
            // Reset pendingGroupTail if necessary.
            if (removed && pendingGroupTail == groupId) {
                pendingGroupTail = prev;
            }
            // Update pendingGroup
            delete pendingGroups[groupId];
            numPendingGroups--;
            emit LogPendingGroupRemoved(groupId);
            emit LogPublicKeyAccepted(groupId, suggestedPubKey, workingGroupIds.length);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bridgeAddr","type":"address"},{"internalType":"address","name":"_proxyFundsAddr","type":"address"},{"internalType":"address","name":"_proxyFundsTokenAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blkNum","type":"uint256"},{"indexed":false,"internalType":"address","name":"guardian","type":"address"}],"name":"GuardianReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"callbackAddr","type":"address"}],"name":"LogCallbackTriggeredFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"}],"name":"LogGroupDissolve","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"nodeId","type":"address[]"}],"name":"LogGrouping","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingNodePool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"groupsize","type":"uint256"}],"name":"LogGroupingInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numPendingNodes","type":"uint256"}],"name":"LogInsufficientPendingNode","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numWorkingGroups","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numPendingGroups","type":"uint256"}],"name":"LogInsufficientWorkingGroup","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"info","type":"string"}],"name":"LogMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"}],"name":"LogNoPendingGroup","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"LogNonContractCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"invalidSelector","type":"string"}],"name":"LogNonSupportedType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"}],"name":"LogPendingGroupRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"},{"indexed":false,"internalType":"uint256[4]","name":"pubKey","type":"uint256[4]"},{"indexed":false,"internalType":"uint256","name":"numWorkingGroups","type":"uint256"}],"name":"LogPublicKeyAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"groupId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pubKeyCount","type":"uint256"}],"name":"LogPublicKeySuggested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"node","type":"address"}],"name":"LogRegisteredNewPendingNode","type":"event"},{"anonymous":false,"inputs":[],"name":"LogRequestFromNonExistentUC","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastSystemRandomness","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userSeed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dispatchedGroupId","type":"uint256"}],"name":"LogRequestUserRandom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"node","type":"address"},{"indexed":false,"internalType":"uint8","name":"unregisterFrom","type":"uint8"}],"name":"LogUnRegisteredNewPendingNode","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lastRandomness","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dispatchedGroupId","type":"uint256"}],"name":"LogUpdateRandom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"queryId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeout","type":"uint256"},{"indexed":false,"internalType":"string","name":"dataSource","type":"string"},{"indexed":false,"internalType":"string","name":"selector","type":"string"},{"indexed":false,"internalType":"uint256","name":"randomness","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dispatchedGroupId","type":"uint256"}],"name":"LogUrl","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"trafficType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"trafficId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"},{"indexed":false,"internalType":"uint256[2]","name":"signature","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[4]","name":"pubKey","type":"uint256[4]"},{"indexed":false,"internalType":"bool","name":"pass","type":"bool"}],"name":"LogValidationResult","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256","name":"rndSeed","type":"uint256"}],"name":"__callback__","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToGuardianList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"addressBridge","outputs":[{"internalType":"contract IDOSAddressBridge","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapCommitDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapEndBlk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapGroups","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapRevealDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bootstrapStartThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cachedUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"expiredWorkingGroupIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExpiredWorkingGroupSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"groupId","type":"uint256"}],"name":"getWorkingGroupById","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[4]","name":"","type":"uint256[4]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWorkingGroupSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"groupMaturityPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"groupSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"groupToPick","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"guardianListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initBlkN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastFormGrpReqId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRandomness","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lifeDiversity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"loopLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nodeToGroupId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPendingGroups","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numPendingNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingGroupList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGroupMaxLife","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGroupTail","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingGroups","outputs":[{"internalType":"uint256","name":"groupId","type":"uint256"},{"internalType":"uint256","name":"startBlkNum","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingNodeList","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingNodeTail","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proxyFundsAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proxyFundsTokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"timeout","type":"uint256"},{"internalType":"string","name":"dataSource","type":"string"},{"internalType":"string","name":"selector","type":"string"}],"name":"query","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refreshSystemRandomHardLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"groupId","type":"uint256"},{"internalType":"uint256[4]","name":"suggestedPubKey","type":"uint256[4]"}],"name":"registerGroupPubKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"registerNewNode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"relayRespondLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromGuardianList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"userSeed","type":"uint256"}],"name":"requestRandom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"setBootstrapCommitDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"setBootstrapRevealDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setBootstrapStartThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setGroupMaturityPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newSize","type":"uint256"}],"name":"setGroupSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newDiversity","type":"uint256"}],"name":"setLifeDiversity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newLife","type":"uint256"}],"name":"setPendingGroupMaxLife","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newFund","type":"address"},{"internalType":"address","name":"newFundToken","type":"address"}],"name":"setProxyFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setRelayRespondLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setSystemRandomHardLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_cid","type":"uint256"}],"name":"signalBootstrap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"signalGroupDissolve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"signalGroupFormation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"signalRandom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"member","type":"address"}],"name":"signalUnregister","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint8","name":"trafficType","type":"uint8"},{"internalType":"bytes","name":"result","type":"bytes"},{"internalType":"uint256[2]","name":"sig","type":"uint256[2]"}],"name":"triggerCallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unregisterNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[2]","name":"sig","type":"uint256[2]"}],"name":"updateRandomness","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"workingGroupIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040819052600390815561080060049081556201000060055561200060065560326007556008556002600955600a556028600b819055600c908155600d556014601b553480156200005157600080fd5b5060405162005f6c38038062005f6c833981810160405260608110156200007757600080fd5b50805160208083015160409384015160008054336001600160a01b0319918216178255436001908155918290527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d805482168317905560148054821683179055601c85527f6de76108811faf2f94afbe5ac6c98e8393206cd093932de1fbfd61bbeec43a02829055601d919091556010805482166001600160a01b038088169190911791829055601180548416828716179055601280549093168185161790925586516313a4cbcb60e31b81529651959693959294911692639d265e589260048281019392829003018186803b1580156200017157600080fd5b505afa15801562000186573d6000803e3d6000fd5b505050506040513d60208110156200019d57600080fd5b50516011546012546040805163b73a3f8f60e01b81526001600160a01b039384166004820152918316602483015251919092169163b73a3f8f91604480830192600092919082900301818387803b158015620001f857600080fd5b505af11580156200020d573d6000803e3d6000fd5b50505050505050615d4880620002246000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c8063863bc0a1116101f4578063ba419d0c1161011a578063df37c617116100ad578063f2a3072d1161007c578063f2a3072d14610a32578063f41a158714610a3a578063f90ce5ba14610a42578063fc84dde414610a4a576103af565b8063df37c617146109f4578063ef112dfc146109fc578063efde068b14610a04578063f19398d514610a0c576103af565b8063ca2aabcc116100e9578063ca2aabcc14610973578063d18c81b714610990578063d79351b2146109c6578063dd6ceddf146109ec576103af565b8063ba419d0c146108fc578063c457aa8f14610904578063c58ebe1c14610921578063c7c3f4a514610947576103af565b8063a60b007d11610192578063b7fb8fd711610161578063b7fb8fd7146107de578063b836ccea146108b5578063b8fa82e0146108d7578063b9424b35146108f4576103af565b8063a60b007d1461078b578063aeb3da73146107b1578063b45ef79d146107b9578063b5372264146107d6576103af565b8063962ba8a4116101ce578063962ba8a41461074157806399ca2d30146107495780639e71857314610751578063a54fb00e1461076e576103af565b8063863bc0a114610714578063925fc6c91461071c57806395071cf614610739576103af565b806340e4a5af116102d95780636c460899116102775780637c1cf083116102465780637c1cf083146106d65780637c48d1a0146106fc5780637e55acb41461070457806385ed42231461070c576103af565b80636c4608991461064057806374ad3a061461064857806376cffa53146106c657806377f10192146106ce576103af565b80635be6c3af116102b35780635be6c3af146105f65780635c0e159f146105fe5780635d3812041461061b57806363b635ea14610638576103af565b806340e4a5af1461058e5780634a28a74d146105bc578063559ea9de146105d9576103af565b806311bc5311116103515780631971720311610320578063197172031461056e57806331bf646414610576578063372a53cc1461057e5780633d385cf514610586576103af565b806311bc531114610533578063155fa82c1461053b57806318a1908d14610543578063190ca29e14610566576103af565b8063094c36121161038d578063094c3612146104b757806309ac86d3146104db5780630dfc09cb146104f9578063100063ec14610516576103af565b806302957d53146103b45780630434ccd21461046357806309011cb91461047d575b600080fd5b6103d1600480360360208110156103ca57600080fd5b5035610a52565b6040518581526020810185608080838360005b838110156103fc5781810151838201526020016103e4565b5050505090500184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561044b578181015183820152602001610433565b50505050905001965050505050505060405180910390f35b61046b610b2b565b60408051918252519081900360200190f35b6104a36004803603602081101561049357600080fd5b50356001600160a01b0316610b31565b604080519115158252519081900360200190f35b6104bf610b46565b604080516001600160a01b039092168252519081900360200190f35b6104f7600480360360408110156104f157600080fd5b50610b55565b005b6104f76004803603602081101561050f57600080fd5b5035610e9b565b6104f76004803603602081101561052c57600080fd5b5035610f10565b61046b610f77565b6104f7610f7d565b6104f76004803603604081101561055957600080fd5b50803590602001356110d6565b61046b61139b565b61046b6113a1565b61046b6113a7565b61046b6113ad565b6104a36113b3565b6104f7600480360360408110156105a457600080fd5b506001600160a01b03813581169160200135166114ef565b6104f7600480360360208110156105d257600080fd5b50356116cb565b6104f7600480360360208110156105ef57600080fd5b503561173d565b6104f76117af565b6104f76004803603602081101561061457600080fd5b503561196b565b61046b6004803603602081101561063157600080fd5b5035611d72565b61046b611d90565b61046b611d96565b6104f7600480360360a081101561065e57600080fd5b81359160ff6020820135169181019060608101604082013564010000000081111561068857600080fd5b82018360208201111561069a57600080fd5b803590602001918460018302840111640100000000831117156106bc57600080fd5b9193509150611d9c565b6104bf6124a1565b61046b6124b0565b6104f7600480360360208110156106ec57600080fd5b50356001600160a01b03166124b6565b61046b6125d6565b61046b6125dc565b61046b6125e2565b61046b6125e8565b6104f76004803603602081101561073257600080fd5b50356125ee565b61046b612660565b61046b612666565b6104bf61266c565b6104f76004803603602081101561076757600080fd5b503561267b565b61046b6004803603602081101561078457600080fd5b50356126ed565b6104bf600480360360208110156107a157600080fd5b50356001600160a01b03166126ff565b6104f761271a565b61046b600480360360208110156107cf57600080fd5b50356129bf565b61046b6129cc565b61046b600480360360808110156107f457600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561082457600080fd5b82018360208201111561083657600080fd5b8035906020019184600183028401116401000000008311171561085857600080fd5b91939092909160208101903564010000000081111561087657600080fd5b82018360208201111561088857600080fd5b803590602001918460018302840111640100000000831117156108aa57600080fd5b5090925090506129d2565b6104f7600480360360a08110156108cb57600080fd5b508035906020016130a4565b6104f7600480360360208110156108ed57600080fd5b5035613601565b6104f7613673565b61046b61373f565b6104f76004803603602081101561091a57600080fd5b5035613745565b6104f76004803603602081101561093757600080fd5b50356001600160a01b03166137b7565b61046b6004803603604081101561095d57600080fd5b506001600160a01b0381351690602001356137ef565b6104f76004803603602081101561098957600080fd5b5035613c9c565b6109ad600480360360208110156109a657600080fd5b5035613d03565b6040805192835260208301919091528051918290030190f35b6104f7600480360360208110156109dc57600080fd5b50356001600160a01b0316613d1c565b61046b613d57565b6104bf613d5d565b61046b613d6c565b61046b613d72565b61046b60048036036020811015610a2257600080fd5b50356001600160a01b0316613d78565b61046b613d8a565b61046b613d90565b61046b613d96565b61046b613d9c565b6000610a5c615a26565b600083815260176020818152604080842080548251608081018452600183018054825260028401548287015260038401548286015260048401546060808401919091528b895296865260058401546006850154600790950180548751818a0281018a019098528088528a9998939795969495929493919291839190830182828015610b1057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610af2575b50505050509050955095509550955095505091939590929450565b60095481565b602b6020526000908152604090205460ff1681565b6014546001600160a01b031681565b601060009054906101000a90046001600160a01b03166001600160a01b0316630e9ed68b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d6020811015610bcd57600080fd5b50516040805163151d156760e31b815233600482015290516001600160a01b039092169163a8e8ab3891602480820192602092909190829003018186803b158015610c1757600080fd5b505afa158015610c2b573d6000803e3d6000fd5b505050506040513d6020811015610c4157600080fd5b5051610c8b576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642d7374616b696e672d6e6f646560601b604482015290519081900360640190fd5b610d286000602154610c9c81613da2565b604080518082018252863581526020808801359082015281516080810180845291929091602491839190820190839060029082845b815481526020019060010190808311610cd157505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d0757505050505081525050613dcc565b610d3157610e98565b6000601f5543602090815560218054604080518535818601528585013581830152815180820383018152606082018084528151918701919091209094556010546313a4cbcb60e31b909452905191936001600160a01b0390931692639d265e5892606480840193829003018186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506040513d6020811015610dd657600080fd5b5051604051632100fdf760e21b8152600481018381523360248301819052606060448401908152602a8054606486018190526001600160a01b0390961695638403f7dc95889592939160849091019084908015610e5c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e3e575b5050945050505050600060405180830381600087803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b50505050505b50565b6000546001600160a01b03163314610eb257600080fd5b600a548114158015610ec657506002810615155b610f0b576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600a55565b6000546001600160a01b03163314610f2757600080fd5b600d54811415610f72576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600d55565b600d5481565b610f856140f3565b1561109257604080514381523360208201528151600080516020615cab833981519152929181900390910190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561100057600080fd5b505afa158015611014573d6000803e3d6000fd5b505050506040513d602081101561102a57600080fd5b5051604080516323ff34cb60e01b815233600482015290516001600160a01b03909216916323ff34cb9160248082019260009290919082900301818387803b15801561107557600080fd5b505af1158015611089573d6000803e3d6000fd5b505050506110d4565b6040805160208082526010908201526f373796b3b93816b337b936b0ba34b7b760811b818301529051600080516020615cf48339815191529181900360600190a15b565b333014611121576040805162461bcd60e51b81526020600482015260146024820152730756e61757468656e746963617465642d726573760641b604482015290519081900360640190fd5b600954601954101561117a576040805162461bcd60e51b815260206004820152601f60248201527f726567726f75702d6e6f742d656e6f7567682d657870697265642d7767727000604482015290519081900360640190fd5b600a5460155410156111d3576040805162461bcd60e51b815260206004820152601960248201527f726567726f75702d6e6f742d656e6f7567682d702d6e6f646500000000000000604482015290519081900360640190fd5b60006022819055506000600954600101600a54029050606081604051908082528060200260200182016040528015611215578160200160208202803883390190505b50905060005b6009548110156113685760195460408051602080820188905281830189905260608083018690528351808403909101815260809092019092528051910120600091908161126457fe5b0690506000601760006019848154811061127a57fe5b90600052602060002001548152602001908152602001600020905060008090505b600a54811015611304578160070181815481106112b457fe5b9060005260206000200160009054906101000a90046001600160a01b03168582600a54870201815181106112e457fe5b6001600160a01b039092166020928302919091019091015260010161129b565b5080546113149060006001614468565b60198054600019810190811061132657fe5b90600052602060002001546019838154811061133e57fe5b600091825260209091200155601980549061135d906000198301615a44565b50505060010161121b565b5061137c600a54600954600a5402836145c7565b6113868184614686565b6113958160095460010161478d565b50505050565b601d5481565b600f5481565b60085481565b600b5481565b60105460408051630e9ed68b60e01b815290516000926001600160a01b031691630e9ed68b916004808301926020929190829003018186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d602081101561142257600080fd5b50516040805163151d156760e31b815233600482015290516001600160a01b039092169163a8e8ab3891602480820192602092909190829003018186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b50516114e0576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642d7374616b696e672d6e6f646560601b604482015290519081900360640190fd5b6114e933614ab1565b90505b90565b6000546001600160a01b0316331461150657600080fd5b6011546001600160a01b0383811691161480159061152c57506001600160a01b03821615155b611571576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b6012546001600160a01b0382811691161480159061159757506001600160a01b03811615155b6115dc576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b601180546001600160a01b038085166001600160a01b031992831617909255601280548484169216919091179055601054604080516313a4cbcb60e31b815290519190921691639d265e58916004808301926020929190829003018186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b50516011546012546040805163b73a3f8f60e01b81526001600160a01b039384166004820152918316602483015251919092169163b73a3f8f91604480830192600092919082900301818387803b158015610e7e57600080fd5b6000546001600160a01b031633146116e257600080fd5b601b5481141580156116f357508015155b611738576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b601b55565b6000546001600160a01b0316331461175457600080fd5b600654811415801561176557508015155b6117aa576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600655565b60016000819052601c6020527f6de76108811faf2f94afbe5ac6c98e8393206cd093932de1fbfd61bbeec43a02549081148015906118025750601b546000828152601a6020526040902060010154439101105b1561191a57611812816001614dfa565b604080514381523360208201528151600080516020615cab833981519152929181900390910190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561188857600080fd5b505afa15801561189c573d6000803e3d6000fd5b505050506040513d60208110156118b257600080fd5b5051604080516323ff34cb60e01b815233600482015290516001600160a01b03909216916323ff34cb9160248082019260009290919082900301818387803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b50505050610e98565b6040805160208082526018908201527f6e6f2d657870697265642d706772702d746f2d636c65616e0000000000000000818301529051600080516020615cf48339815191529181900360600190a150565b80600e54146119b4576040805162461bcd60e51b815260206004820152601060248201526f06e6f742d696e2d626f6f7473747261760841b604482015290519081900360640190fd5b600f544311611a1057604080516020808252601c908201527f776169742d746f2d636f6c6c6563742d6d6f72652d656e74726f707900000000818301529051600080516020615cf48339815191529181900360600190a1610e98565b600d546015541015611a6f57604080516020808252601e908201527f6e6f742d656e6f7567682d702d6e6f64652d746f2d626f6f7473747261700000818301529051600080516020615cf48339815191529181900360600190a1610e98565b6000600e819055600f819055601054604080516306b810cf60e21b815290516001600160a01b0390921691631ae0433c91600480820192602092909190829003018186803b158015611ac057600080fd5b505afa158015611ad4573d6000803e3d6000fd5b505050506040513d6020811015611aea57600080fd5b505160408051633352da4560e21b81526004810185905290516001600160a01b039092169163cd4b6914916024808201926020929091908290030181600087803b158015611b3757600080fd5b505af1158015611b4b573d6000803e3d6000fd5b505050506040513d6020811015611b6157600080fd5b5051905080611bbe57604080516020808252601f908201527f626f6f7473747261702d636f6d6d69742d72657665616c2d6661696c75726500818301529051600080516020615cf48339815191529181900360600190a150610e98565b6000601f8190554360209081556021805460408051808501929092528181018690528051808303820181526060909201905280519201919091209055600a54600d54819081611c0957fe5b04029050606081604051908082528060200260200182016040528015611c39578160200160208202803883390190505b509050611c48826000836145c7565b611c5481602154614686565b611c6981600a548481611c6357fe5b0461478d565b604080514381523360208201528151600080516020615cab833981519152929181900390910190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611cdf57600080fd5b505afa158015611cf3573d6000803e3d6000fd5b505050506040513d6020811015611d0957600080fd5b5051604080516323ff34cb60e01b815233600482015290516001600160a01b03909216916323ff34cb9160248082019260009290919082900301818387803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b5050505050505050565b60188181548110611d7f57fe5b600091825260209091200154905081565b600a5481565b60035481565b601060009054906101000a90046001600160a01b03166001600160a01b0316630e9ed68b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d6020811015611e1457600080fd5b50516040805163151d156760e31b815233600482015290516001600160a01b039092169163a8e8ab3891602480820192602092909190829003018186803b158015611e5e57600080fd5b505afa158015611e72573d6000803e3d6000fd5b505050506040513d6020811015611e8857600080fd5b5051611ed2576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642d7374616b696e672d6e6f646560601b604482015290519081900360640190fd5b6000858152600260205260409020600601546001600160a01b031680611f21576040517f40d87958cd48e8b698a94f35390a9020a9127528227647da089cc6bfd7931f4290600090a15061249a565b612000858786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915288358152915050602081018760016020908102919091013590915260008c8152600291829052604090819020815160808101808452828501805494830194855291949193859390928592909160030160608601808311610cd157505050918352505060408051808201918290526002848101805483526020948501949293909260038701908501808311610d0757505050505081525050613dcc565b61200a575061249a565b604080516001600160a01b038316815290517f065d5d7c942a87321bf774d2780cfd4928766b9f04dc6728ab8b4490ef5edaf09181900360200190a16000868152600260208190526040822082815560018101839055919082018161206f8282615a68565b61207d600283016000615a68565b50505060060180546001600160a01b031916905560ff8516600214156121345760408051636d11297760e01b81526004810188815260248201928352604482018690526001600160a01b03841692636d112977928a9289928992606401848480828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561211757600080fd5b505af115801561212b573d6000803e3d6000fd5b50505050612240565b60ff8516600114156121f357604080516020808252600a90820152695573657252616e646f6d60b01b818301529051600080516020615cf48339815191529181900360600190a1604080518335602082810191909152808501358284015282518083038401815260608301808552815191909201206318a1908d60e01b90915260648201899052608482015290516001600160a01b038316916318a1908d9160a480830192600092919082900301818387803b15801561211757600080fd5b6040805162461bcd60e51b815260206004820152601860248201527f756e737570706f727465642d747261666669632d747970650000000000000000604482015290519081900360640190fd5b612248615a76565b600087815260026020818152604080842060019081015485526017835293819020815160a081018352815481528251608081018085529196929594870194909392860192849290830191849182845b81548152602001906001019080831161229757505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116122cd57505050505081525050815260200160058201548152602001600682015481526020016007820180548060200260200160405190810160405280929190818152602001828054801561235a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161233c575b5050505050815250509050601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b357600080fd5b505afa1580156123c7573d6000803e3d6000fd5b505050506040513d60208110156123dd57600080fd5b50516080820151604051632100fdf760e21b8152600481018a815233602483018190526060604484019081528451606485015284516001600160a01b0390961695638403f7dc958e95939490939092916084909101906020858101910280838360005b83811015612458578181015183820152602001612440565b50505050905001945050505050600060405180830381600087803b15801561247f57600080fd5b505af1158015612493573d6000803e3d6000fd5b5050505050505b5050505050565b6010546001600160a01b031681565b60225481565b336000908152602b602052604090205460ff16612509576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b3bab0b93234b0b760a11b604482015290519081900360640190fd5b61251281614ab1565b1561258d57604080514381523360208201528151600080516020615cab833981519152929181900390910190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561188857600080fd5b604080516020808252601590820152743737ba3434b73396ba3796bab73932b3b4b9ba32b960591b818301529051600080516020615cf48339815191529181900360600190a150565b60055481565b60075481565b600e5481565b601e5481565b6000546001600160a01b0316331461260557600080fd5b600554811415801561261657508015155b61265b576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600555565b60015481565b60045481565b6012546001600160a01b031681565b6000546001600160a01b0316331461269257600080fd5b600b5481141580156126a357508015155b6126e8576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600b55565b601c6020526000908152604090205481565b6013602052600090815260409020546001600160a01b031681565b601060009054906101000a90046001600160a01b03166001600160a01b0316630e9ed68b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d602081101561279257600080fd5b50516040805163151d156760e31b815233600482015290516001600160a01b039092169163a8e8ab3891602480820192602092909190829003018186803b1580156127dc57600080fd5b505afa1580156127f0573d6000803e3d6000fd5b505050506040513d602081101561280657600080fd5b5051612850576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642d7374616b696e672d6e6f646560601b604482015290519081900360640190fd5b336000908152601360205260409020546001600160a01b031615612873576110d4565b336000908152601660205260409020541561288d576110d4565b336000818152601660205260409020600190556128a990614f4c565b6040805133815290517f707a6d64786780aac9cd0c5813ea04241eb135ddd2280c06eea6719afb9131519181900360200190a1601060009054906101000a90046001600160a01b03166001600160a01b0316630e9ed68b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d602081101561295457600080fd5b505160408051634c542d3d60e01b815233600482015290516001600160a01b0390921691634c542d3d9160248082019260009290919082900301818387803b15801561299f57600080fd5b505af11580156129b3573d6000803e3d6000fd5b50505050610e986140f3565b60198181548110611d7f57fe5b60185490565b6000866002601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612a2557600080fd5b505afa158015612a39573d6000803e3d6000fd5b505050506040513d6020811015612a4f57600080fd5b5051604080516371b281b360e11b81526001600160a01b038581166004830152602482018590529151919092169163e3650366916044808301926020929190829003018186803b158015612aa257600080fd5b505afa158015612ab6573d6000803e3d6000fd5b505050506040513d6020811015612acc57600080fd5b5051612b1a576040805162461bcd60e51b81526020600482015260186024820152776e6f742d656e6f7567682d6665652d746f2d6f7261636c6560401b604482015290519081900360640190fd5b6000612b258a614fae565b111561305757606085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508251929350509015905080612b95575080600081518110612b7e57fe5b6020910101516001600160f81b031916600960fa1b145b80612bbf575080600081518110612ba857fe5b6020910101516001600160f81b031916602f60f81b145b15612fed576000428b8b8b8b8b8b60405160200180888152602001876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505099505050505050505050506040516020818303038152906040528051906020012060001c90506000612c81600283614fb2565b9050600019811415612ce757604080516020808252601f908201527f736b69707065642d757365722d71756572792d6e6f2d6c6976652d7767727000818301529051600080516020615cf48339815191529181900360600190a160009550505050613098565b60006017600060188481548110612cfa57fe5b6000918252602080832090910154835282810193909352604091820190208151608080820184528782528254948201949094528251938401835290935091828201916001850190829081018260028282826020028201915b815481526020019060010190808311612d5257505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612d88575050509190925250505081526001600160a01b038f166020918201526000858152600280835260409182902084518155928401516001840155908301518051909183810191612dec91839190615aab565b506020820151612e029060028084019190615aab565b50505060608201518160060160006101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507f05e1614af4efb13caeba2369a57a05ee5830f33364f82e2c899fd5710cb56ef3838d8d8d8d8d60215488600001546040518089815260200188815260200180602001806020018581526020018481526020018381038352898982818152602001925080828437600083820152601f01601f191690910184810383528781526020019050878780828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612f3557600080fd5b505afa158015612f49573d6000803e3d6000fd5b505050506040513d6020811015612f5f57600080fd5b50516001600160a01b0316637aa9181b8e8560026040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015612fc957600080fd5b505af1158015612fdd573d6000803e3d6000fd5b5050505082965050505050613098565b7f70714cf695ae953ee67221716a4b4dc9e944909fd2b66f07e790a49d9ac29b41868660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a16000935050613098565b604080516001600160a01b038b16815290517f6cea43bb3db7220931a7c8ac633e65cbc8e7ba129f2ed84db2e71bc0adb73bb59181900360200190a1600092505b50509695505050505050565b601060009054906101000a90046001600160a01b03166001600160a01b0316630e9ed68b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130f257600080fd5b505afa158015613106573d6000803e3d6000fd5b505050506040513d602081101561311c57600080fd5b50516040805163151d156760e31b815233600482015290516001600160a01b039092169163a8e8ab3891602480820192602092909190829003018186803b15801561316657600080fd5b505afa15801561317a573d6000803e3d6000fd5b505050506040513d602081101561319057600080fd5b50516131da576040805162461bcd60e51b8152602060048201526014602482015273696e76616c69642d7374616b696e672d6e6f646560601b604482015290519081900360640190fd5b6000828152601a602052604090208054613227576040805184815290517f71047c0893a51085656a2894bba10bc6ef51a654f25e1ead1929b076487a95699181900360200190a1506135fd565b3360009081526003820160205260409020546001600160a01b0316613293576040805162461bcd60e51b815260206004820152601e60248201527f6e6f742d66726f6d2d617574686f72697a65642d6772702d6d656d6265720000604482015290519081900360640190fd5b6040805183356020808301919091528085013582840152848301356060808401919091528501356080808401919091528351808403909101815260a08301808552815191830191909120600081815260028701909352918490208054600101908190559087905260c083015291517f717e526bce26f8e67908004294b35133bbe2a9c7f611384cb0f484aca9223d019181900360e00190a16002600a548161333757fe5b60008381526002850160205260409020549190041015611395576060600a5460405190808252806020026020018201604052801561337f578160200160208202803883390190505b5060016000908152600385016020526040812054919250906001600160a01b03165b6001600160a01b03811660011461340557808383806001019450815181106133c557fe5b6001600160a01b0392831660209182029290920181019190915291811660009081526016835260408082208a9055600388019093529190912054166133a1565b6018805460018082019092557fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018890556040805160a0810182528981528151608080820184528a358285019081526020808d0135606080860191909152918452855180870187528d8701358152828e01358183015281850152808501938452600654601e540285870152439185019190915290830188905260008c8152601790915292909220815181559151805191939091908301906134c99082906002615aab565b5060208201516134df9060028084019190615aab565b505050604082015160058201556060820151600682015560808201518051613511916007840191602090910190615ae9565b50905050600080613523601c8a614fd0565b91509150808015613535575088601d54145b1561354057601d8290555b6000898152601a6020908152604080832083815560010192909255601e805460001901905581518b815291517f156927b06a61046135669011768a03b2592ee3667374525502b62b0aef4cbd219281900390910190a16018546040518a81527f9ad0d0bfff7f0fc653b03785685d46101b09e3cb1f50081915bc8101662e4a88918b918b91906020810183608080828437600083820152601f01601f191690910192835250506040519081900360200192509050a1505050505050505b5050565b6000546001600160a01b0316331461361857600080fd5b600c54811415801561362957508015155b61366e576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600c55565b61367b615059565b156136f657604080514381523360208201528151600080516020615cab833981519152929181900390910190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561100057600080fd5b604080516020808252601690820152751cde5ccb5c985b991bdb4b5b9bdd0b595e1c1a5c995960521b818301529051600080516020615cf48339815191529181900360600190a1565b601f5481565b6000546001600160a01b0316331461375c57600080fd5b600454811415801561376d57508015155b6137b2576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600455565b6000546001600160a01b031633146137ce57600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19169055565b6000826001601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561384257600080fd5b505afa158015613856573d6000803e3d6000fd5b505050506040513d602081101561386c57600080fd5b5051604080516371b281b360e11b81526001600160a01b038581166004830152602482018590529151919092169163e3650366916044808301926020929190829003018186803b1580156138bf57600080fd5b505afa1580156138d3573d6000803e3d6000fd5b505050506040513d60208110156138e957600080fd5b5051613937576040805162461bcd60e51b81526020600482015260186024820152776e6f742d656e6f7567682d6665652d746f2d6f7261636c6560401b604482015290519081900360640190fd5b60408051426020808301919091526001600160a01b0388168284015260608083018890528351808403909101815260809092019092528051910120600061397f600183614fb2565b90506000198114156139e457604080516020808252601d908201527f736b69707065642d757365722d726e642d6e6f2d6c6976652d77677270000000818301529051600080516020615cf48339815191529181900360600190a1600094505050613c94565b600060176000601884815481106139f757fe5b6000918252602080832090910154835282810193909352604091820190208151608080820184528782528254948201949094528251938401835290935091828201916001850190829081018260028282826020028201915b815481526020019060010190808311613a4f57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311613a85575050509190925250505081526001600160a01b038a166020918201526000858152600280835260409182902084518155928401516001840155908301518051909183810191613ae991839190615aab565b506020820151613aff9060028084019190615aab565b505050606091820151600690910180546001600160a01b039092166001600160a01b031990921691909117905560215482546040805187815260208101939093528281018b90529282015290517fd587179d80d44e74955fa5d651db2f31b5470fcee8f9736f07ae3b24456a2cf09181900360800190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b158015613bc457600080fd5b505afa158015613bd8573d6000803e3d6000fd5b505050506040513d6020811015613bee57600080fd5b50516001600160a01b0390811690637aa9181b908a163014613c105789613c1d565b6011546001600160a01b03165b8560016040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015613c7657600080fd5b505af1158015613c8a573d6000803e3d6000fd5b5094975050505050505b505092915050565b6000546001600160a01b03163314613cb357600080fd5b600354811415613cfe576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b216b830b930b6b2ba32b960791b604482015290519081900360640190fd5b600355565b601a602052600090815260409020805460019091015482565b6000546001600160a01b03163314613d3357600080fd5b6001600160a01b03166000908152602b60205260409020805460ff19166001179055565b60065481565b6011546001600160a01b031681565b600c5481565b60195490565b60166020526000908152604090205481565b60215481565b60155481565b60205481565b601b5481565b60408051602080825281830190925260609160208201818038833950505060208101929092525090565b6000606084336040516020018083805190602001908083835b60208310613e045780518252601f199092019160209182019101613de5565b5181516020939093036101000a6000190180199091169216919091179052606094851b6bffffffffffffffffffffffff191692019182525060408051808303600b19018152600260148401818152607485019093529096509394509291506034015b613e6e615b4a565b815260200190600190039081613e6657505060408051600280825260608083019093529293509091602082015b613ea3615b64565b815260200190600190039081613e9b579050509050613ec1866152bc565b82600081518110613ece57fe5b6020026020010181905250613ee283615335565b82600181518110613eef57fe5b6020026020010181905250613f0261535c565b81600081518110613f0f57fe5b60200260200101819052508481600181518110613f2857fe5b60200260200101819052506000613f3f838361541c565b90507fd33c44f7ce166bcd2616c8f4d811261d4d24e1af815f78614683e0c7682c42a58a8a8660405180604001604052808c6000015181526020018c6020015181525060405180608001604052808c60000151600060028110613f9e57fe5b602002015181526020018c60000151600160028110613fb957fe5b602002015181526020018c60200151600060028110613fd457fe5b602002015181526020018c60200151600160028110613fef57fe5b602002015181525086604051808760ff1660ff1681526020018681526020018060200185600260200280838360005b8381101561403657818101518382015260200161401e565b5050505090500184600460200280838360005b83811015614061578181015183820152602001614049565b5050505090500183151515158152602001828103825286818151815260200191508051906020019080838360005b838110156140a757818101518382015260200161408f565b50505050905090810190601f1680156140d45780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a19998505050505050505050565b6000600a54601554108061411557506018541580156141155750600d54601554105b15614192576019541561419257614146601960008154811061413357fe5b9060005260206000200154600180614468565b60198054600019810190811061415857fe5b9060005260206000200154601960008154811061417157fe5b6000918252602090912001556019805490614190906000198301615a44565b505b600a5460155410156141db5760155460408051918252517fc03848aa1689c7c291dcc68fa62d6109e13f16b25e89bdef5a6c8598b36b80199181900360200190a15060006114ec565b601854156142e657600954601954106142a85760225461425b576141ff30436137ef565b6022819055614210575060006114ec565b7f5ee79c79dd5be1f25f86c7028ec8fb6849839e8a23f676afc907eade45946986601554600a54604051808381526020018281526020019250505060405180910390a15060016114ec565b6040805160208082526014908201527330b63932b0b23c96b4b716b337b936b0ba34b7b760611b818301529051600080516020615cf48339815191529181900360600190a15060006114ec565b600080516020615cf4833981519152604051808060200182810382526029815260200180615ccb6029913960400191505060405180910390a1614462565b600d546015541061446257600e5461441c57601060009054906101000a90046001600160a01b03166001600160a01b0316631ae0433c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d602081101561437057600080fd5b5051600b54600c54600d546040805163b917b5a560e01b8152436004820152602481019490945260448401929092526064830152516001600160a01b039092169163b917b5a5916084808201926020929091908290030181600087803b1580156143d957600080fd5b505af11580156143ed573d6000803e3d6000fd5b505050506040513d602081101561440357600080fd5b5051600e5550600c54600b54430101600f5560016114ec565b604080516020808252601490820152730616c72656164792d696e2d626f6f7473747261760641b818301529051600080516020615cf48339815191529181900360600190a15b50600090565b6000838152601760205260408120905b600782015481101561453a57600082600701828154811061449557fe5b60009182526020808320909101546001600160a01b03168083526016909152604090912054909150861415614531576001600160a01b0381166000908152601660205260409020600190558480156144ff5750836001600160a01b0316816001600160a01b031614155b801561452357506001600160a01b0381811660009081526013602052604090205416155b156145315761453181614f4c565b50600101614478565b50600084815260176020526040812081815590600182018161455c8282615a68565b61456a600283016000615a68565b50506005820160009055600682016000905560078201600061458c9190615b89565b50506040805185815290517ff7377b41bdc770cc22a1bad318571f0ae6d65188371bdbe0cb660c0de57b31509181900360200190a150505050565b60005b8381101561465d5760136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d80546001600160a01b0380821660008181526040902080549092166001600160a01b0319938416179093558054909116905582518190849084870190811061463c57fe5b6001600160a01b0390921660209283029190910190910152506001016145ca565b50601580548490039081905561468157601480546001600160a01b03191660011790555b505050565b8151600019015b80156146815760008160010183838685815181106146a757fe5b602002602001015160405160200180848152602001838152602001826001600160a01b03166001600160a01b031660601b815260140193505050506040516020818303038152906040528051906020012060001c8161470257fe5b069050600084838151811061471357fe5b6020026020010151905084828151811061472957fe5b602002602001015185848151811061473d57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508085838151811061476a57fe5b6001600160a01b039092166020928302919091019091015250506000190161468d565b80600a54028251146147e6576040805162461bcd60e51b815260206004820152601960248201527f63616e6469646174652d6c656e6774682d6d69736d6174636800000000000000604482015290519081900360640190fd5b6060600a54604051908082528060200260200182016040528015614814578160200160208202803883390190505b5090506000805b8381101561249a5760009150815b600a548110156148d6578581600a548402018151811061484557fe5b602002602001015184828151811061485957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508284828151811061488657fe5b602090810291909101810151604080518084019490945260609190911b6bffffffffffffffffffffffff191683820152805180840360340181526054909301905281519101209250600101614829565b506040805160208082019490945242818301528151808203830181526060820180845281519186019190912060a0830184528082524360809093019283526000818152601a875284812092518355925160018084019190915580845260039092019586905292822080546001600160a01b03191690911790559092905b600a54811015614a2157600160009081526020839052604081205486516001600160a01b0390911691849188908590811061498a57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508481815181106149e257fe5b6020908102919091018101516001600081815292859052604090922080546001600160a01b0319166001600160a01b0390921691909117905501614953565b50614a2b8361561f565b7f78bf54a42d1b98e6c809c3e5904898c5b3304ede546b6f070e83d9a32e544d4f83856040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015614a94578181015183820152602001614a7c565b50505050905001935050505060405180910390a15060010161481b565b6001600160a01b03811660009081526016602052604081205481808215801590614adc575060018314155b15614c2957614aed83600187614468565b60005b601854811015614b86578360188281548110614b0857fe5b90600052602060002001541415614b7e57601854600019018114614b5d57601880546000198101908110614b3857fe5b906000526020600020015460188281548110614b5057fe5b6000918252602090912001555b6018805490614b70906000198301615a44565b506001925090821790614b86565b600101614af0565b5081614c295760005b601954811015614c27578360198281548110614ba757fe5b90600052602060002001541415614c1f57601954600019018114614bfc57601980546000198101908110614bd757fe5b906000526020600020015460198281548110614bef57fe5b6000918252602090912001555b6019805490614c0f906000198301615a44565b5060019250600282179150614c27565b600101614b8f565b505b81158015614c3b5750614c3b8561564f565b15614c44576004175b6001600160a01b038581166000908152601360205260409020541615614cc0576000614c716013876156e8565b935090508215614cbe57601580546000190190556014546001600160a01b0387811691161415614cb757601480546001600160a01b0319166001600160a01b0383161790555b6008821791505b505b6001600160a01b038086166000908152601660209081526040808320929092556010548251630e9ed68b60e01b81529251931692630e9ed68b926004808201939291829003018186803b158015614d1657600080fd5b505afa158015614d2a573d6000803e3d6000fd5b505050506040513d6020811015614d4057600080fd5b50516040805163c5375c2960e01b81526001600160a01b0388811660048301529151919092169163c5375c2991602480830192600092919082900301818387803b158015614d8d57600080fd5b505af1158015614da1573d6000803e3d6000fd5b5050604080516001600160a01b038916815260ff8516602082015281517faa40dce54d678a8a16fc3cf106c1ddf0b34b66a43c7a365af3268c63bb95fead9450908190039091019150a160ff161515925050505b919050565b6000828152601a602090815260408083206001845260038101909252909120546001600160a01b03165b6001600160a01b038116600114614ec3576001600160a01b0381166000908152601660205260409020546001148015614e6f5750826001600160a01b0316816001600160a01b031614155b8015614e9357506001600160a01b0381811660009081526013602052604090205416155b15614ea157614ea181615750565b6001600160a01b03908116600090815260038301602052604090205416614e24565b600080614ed1601c87614fd0565b91509150808015614ee3575085601d54145b15614eee57601d8290555b6000868152601a6020908152604080832083815560010192909255601e8054600019019055815188815291517f156927b06a61046135669011768a03b2592ee3667374525502b62b0aef4cbd219281900390910190a1505050505050565b601480546001600160a01b039081166000908152601360205260408082205494831680835281832080549685166001600160a01b0319978816179055845490931682529020805484168217905581549092169091179055601580546001019055565b3b90565b6000614fbc615059565b50614fc783836157bd565b90505b92915050565b6001600081815260208490526040812054909182915b60018114158015614ff75750848114155b1561501357600081815260208790526040902054909150614fe6565b600181141561502b5760016000935093505050615052565b60008181526020879052604080822080548584529183209190915591815290559150600190505b9250929050565b600043600454602054011180615074575043600354601f5401115b15615081575060006114ec565b6000615092816000194301406157bd565b90506000198114156150f657604080516020808252601a908201527f6e6f2d6c6976652d776772702c7472792d626f6f747374726170000000000000818301529051600080516020615cf48339815191529181900360600190a160009150506114ec565b43601f81905550601760006018838154811061510e57fe5b6000918252602080832090910154835282019290925260400190208054602390815560018201602461514281836002615ba7565b5061515560028281019084810190615ba7565b50505060058201548160050155600682015481600601556007820181600701908054615182929190615bd2565b505060215460235460408051928352602083019190915280517ffaa99731d2c5abc7ee76b2e31b6b7e293a30e1e2274f59396a7a59cabd5eadf39350918290030190a1601060009054906101000a90046001600160a01b03166001600160a01b0316639d265e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561521357600080fd5b505afa158015615227573d6000803e3d6000fd5b505050506040513d602081101561523d57600080fd5b505160115460215460408051637aa9181b60e01b81526001600160a01b039384166004820152602481019290925260006044830181905290519290931692637aa9181b9260648084019382900301818387803b15801561529c57600080fd5b505af11580156152b0573d6000803e3d6000fd5b50505050600191505090565b6152c4615b4a565b81511580156152d557506020820151155b156152e1575080614df5565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790506040518060400160405280846000015181526020018285602001518161532857fe5b0690920390915292915050565b61533d615b4a565b8151602083012061535561534f615921565b82615942565b9392505050565b615364615b64565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b82527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60208381019190915281019190915290565b6000815183511461542c57600080fd5b8251604080516006830280825260c08402820160200190925260609082801561545f578160200160208202803883390190505b50905060005b838110156155e45786818151811061547957fe5b60200260200101516000015182826006026000018151811061549757fe5b6020026020010181815250508681815181106154af57fe5b6020026020010151602001518282600602600101815181106154cd57fe5b6020026020010181815250508581815181106154e557fe5b60209081029190910101515151825183906002600685020190811061550657fe5b60200260200101818152505085818151811061551e57fe5b6020908102919091010151516001602002015182826006026003018151811061554357fe5b60200260200101818152505085818151811061555b57fe5b60200260200101516020015160006002811061557357fe5b602002015182826006026004018151811061558a57fe5b6020026020010181815250508581815181106155a257fe5b6020026020010151602001516001600281106155ba57fe5b60200201518282600602600501815181106155d157fe5b6020908102919091010152600101615465565b506155ed615c12565b60006020826020860260208601600060086107d05a03f190508080156156135750815115155b98975050505050505050565b601d80546000908152601c6020526040808220548483528183205582548252902082905555601e80546001019055565b60016000818152601c6020527f6de76108811faf2f94afbe5ac6c98e8393206cd093932de1fbfd61bbeec43a02549091905b600181146156de576000818152601a60205260408120906156a56003830187615986565b91505080156156c5576156b88387614dfa565b6001945050505050614df5565b50506000818152601c6020526040902054909150615681565b5060009392505050565b6000806000806156f88686615986565b915091508015615745576001600160a01b03858116600081815260208990526040808220805487861684529183208054929095166001600160a01b03199283161790945591905281541690555b909590945092505050565b60136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d80546001600160a01b039283166000818152604081208054959093166001600160a01b03199586161790925560019182905282549093169092179055601580549091019055565b6000805b6018546157d357600019915050614fca565b601854811015806157e657506007548110155b1561585c5760008484602154436040516020018085600281111561580657fe5b60ff1660f81b81526001018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050601880549050818161585257fe5b0692505050614fca565b6000601760006018848154811061586f57fe5b9060005260206000200154815260200190815260200160002090504381600501548260060154600554010111615918576019601883815481106158ae57fe5b600091825260208083209091015483546001810185559383529120909101556018805460001981019081106158df57fe5b9060005260206000200154601883815481106158f757fe5b6000918252602090912001556018805490615916906000198301615a44565b505b506001016157c1565b615929615b4a565b5060408051808201909152600181526002602082015290565b61594a615b4a565b615952615c30565b8351815260208085015190820152604080820184905282606083600060076107d05a03f161597f57600080fd5b5092915050565b6001600081815260208490526040812054909182916001600160a01b03165b6001600160a01b0381166001148015906159d15750846001600160a01b0316816001600160a01b031614155b156159f9576001600160a01b03808216600090815260208890526040902054919250166159a5565b6001600160a01b03811660011415615a1a5760016000935093505050615052565b50915060019050615052565b60405180608001604052806004906020820280388339509192915050565b81548183558181111561468157600083815260209020614681918101908301615c4e565b506000815560010160009055565b6040518060a0016040528060008152602001615a90615b64565b81526020016000815260200160008152602001606081525090565b8260028101928215615ad9579160200282015b82811115615ad9578251825591602001919060010190615abe565b50615ae5929150615c4e565b5090565b828054828255906000526020600020908101928215615b3e579160200282015b82811115615b3e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615b09565b50615ae5929150615c68565b604051806040016040528060008152602001600081525090565b6040518060400160405280615b77615c8c565b8152602001615b84615c8c565b905290565b5080546000825590600052602060002090810190610e989190615c4e565b8260028101928215615ad9579182015b82811115615ad9578254825591600101919060010190615bb7565b828054828255906000526020600020908101928215615b3e5760005260206000209182015b82811115615b3e578254825591600101919060010190615bf7565b60405180602001604052806001906020820280388339509192915050565b60405180606001604052806003906020820280388339509192915050565b6114ec91905b80821115615ae55760008155600101615c54565b6114ec91905b80821115615ae55780546001600160a01b0319168155600101615c6e565b6040518060400160405280600290602082028038833950919291505056fea60d55093b21f740878d9871e95e5031eaf5cf08a167c898ed3c62b1fb24f887736b69707065642d666f726d6174696f6e2d6e6f742d656e6f7567682d657870697265642d7767727096561394bac381230de4649200e8831afcab1f451881bbade9ef209f6dd30480a265627a7a723158203da425af19cd39c2bd6b04d126ac1204d6bea7d813db50dcbad8f39d51a7820264736f6c634300051100320000000000000000000000009ee7f642d3955ecf17d7223705dcb285dba679fc000000000000000000000000c25079a8a14fca9a588616ebacd7b68745a3f709000000000000000000000000f50821f0a136a4514d476dc4cc2a731e7728afaf

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

0000000000000000000000009ee7f642d3955ecf17d7223705dcb285dba679fc000000000000000000000000c25079a8a14fca9a588616ebacd7b68745a3f709000000000000000000000000f50821f0a136a4514d476dc4cc2a731e7728afaf

-----Decoded View---------------
Arg [0] : _bridgeAddr (address): 0x9ee7f642d3955ecf17d7223705dcb285dba679fc
Arg [1] : _proxyFundsAddr (address): 0xc25079a8a14fca9a588616ebacd7b68745a3f709
Arg [2] : _proxyFundsTokenAddr (address): 0xf50821f0a136a4514d476dc4cc2a731e7728afaf

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ee7f642d3955ecf17d7223705dcb285dba679fc
Arg [1] : 000000000000000000000000c25079a8a14fca9a588616ebacd7b68745a3f709
Arg [2] : 000000000000000000000000f50821f0a136a4514d476dc4cc2a731e7728afaf


Deployed ByteCode Sourcemap

4469:39250:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4469:39250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13643:474;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13643:474:0;;:::i;:::-;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13643:474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13643:474:0;;;;;;;;;;;;;;;;;;;;;6030:27;;;:::i;:::-;;;;;;;;;;;;;;;;8161:46;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8161:46:0;-1:-1:-1;;;;;8161:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;6983:30;;;:::i;:::-;;;;-1:-1:-1;;;;;6983:30:0;;;;;;;;;;;;;;26607:782;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26607:782:0;:::i;:::-;;11733:172;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11733:172:0;;:::i;11913:209::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11913:209:0;;:::i;6244:65::-;;;:::i;29945:307::-;;;:::i;37997:1344::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37997:1344:0;;;;;;;:::i;7721:28::-;;;:::i;6349:27::-;;;:::i;5895:31::-;;;:::i;6150:40::-;;;:::i;32058:117::-;;;:::i;11206:478::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11206:478:0;;;;;;;;;;:::i;13020:198::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13020:198:0;;:::i;12812:200::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12812:200:0;;:::i;29159:579::-;;;:::i;30258:1292::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30258:1292:0;;:::i;7352:29::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7352:29:0;;:::i;6064:25::-;;;:::i;5474:35::-;;;:::i;24784:1599::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24784:1599:0;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;24784:1599:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24784:1599:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24784:1599:0;;-1:-1:-1;24784:1599:0;-1:-1:-1;24784:1599:0;:::i;6385:38::-;;;:::i;7898:28::-;;;:::i;31667:348::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31667:348:0;-1:-1:-1;;;;;31667:348:0;;:::i;5596:67::-;;;:::i;5822:26::-;;;:::i;6316:::-;;;:::i;7756:28::-;;;:::i;12598:206::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12598:206:0;;:::i;5340:20::-;;;:::i;5529:47::-;;;:::i;6466:34::-;;;:::i;12130:226::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12130:226:0;;:::i;7669:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7669:45:0;;:::i;6926:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6926:50:0;-1:-1:-1;;;;;6926:50:0;;:::i;34911:579::-;;;:::i;7388:36::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7388:36:0;;:::i;34669:106::-;;;:::i;20581:1860::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;20581:1860:0;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20581:1860:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20581:1860:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20581:1860:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20581:1860:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20581:1860:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;20581:1860:0;;-1:-1:-1;20581:1860:0;-1:-1:-1;20581:1860:0;:::i;41690:2026::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;41690:2026:0;;;;;;:::i;12364:226::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12364:226:0;;:::i;28722:320::-;;;:::i;7793:30::-;;;:::i;13413:222::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13413:222:0;;:::i;11087:111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11087:111:0;-1:-1:-1;;;;;11087:111:0;;:::i;22497:1165::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22497:1165:0;;;;;;;;:::i;13226:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13226:179:0;;:::i;7465:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7465:50:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10973:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10973:106:0;-1:-1:-1;;;;;10973:106:0;;:::i;5683:60::-;;;:::i;6430:29::-;;;:::i;6197:40::-;;;:::i;34783:120::-;;;:::i;7208:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7208:45:0;-1:-1:-1;;;;;7208:45:0;;:::i;7865:26::-;;;:::i;7020:27::-;;;:::i;7830:28::-;;;:::i;7522:36::-;;;:::i;13643:474::-;13706:4;13712:14;;:::i;:::-;13728:4;13800:22;;;:13;:22;;;;;;;;13867:30;;13845:264;;;;;;;13800:34;;;13913:11;;13845:264;;13926:11;;;;13845:264;;;;13939:8;;;:11;13845:264;;;;13952:11;;;;13740:16;13845:264;;;;;;;13979:22;;;;;;:27;;;;14021:32;;;;14068:30;;;;13845:264;;;;;;;;;;;;;;;;;13728:4;;13740:16;13800:34;;13867:30;;13845:264;;13979:27;;14021:32;14068:30;;13845:264;14068:30;;13845:264;;;14068:30;13845:264;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13845:264:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13643:474;;;;;;;:::o;6030:27::-;;;;:::o;8161:46::-;;;;;;;;;;;;;;;:::o;6983:30::-;;;-1:-1:-1;;;;;6983:30:0;;:::o;26607:782::-;9888:13;;;;;;;;;-1:-1:-1;;;;;9888:13:0;-1:-1:-1;;;;;9888:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:33:0;9876:77;;;-1:-1:-1;;;9876:77:0;;9942:10;9876:77;;;;;;-1:-1:-1;;;;;9876:65:0;;;;;;:77;;;;;9888:33;;9876:77;;;;;;;;:65;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;9876:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9876:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9876:77:0;9868:127;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;;;;26701:238;26743:24;26787:14;;26820:23;26787:14;26820:7;:23::i;:::-;26862:29;;;;;;;;26876:6;;26862:29;;26876:6;26884;;;;26862:29;;;;26701:238;;;;;;;;26862:29;;26701:238;;26910:28;;26701:238;;;;;;26910:28;;26701:238;;26910:28;26701:238;;;;;;;;;;;;;;;;;-1:-1:-1;;;26701:238:0;;;-1:-1:-1;;26701:238:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:238::i;:::-;26696:287;;26965:7;;26696:287;27016:1;26995:18;:22;27047:12;27028:16;:31;;;27088:14;;;27223:32;;;27240:6;;27223:32;;;;27248:6;;;;27223:32;;;;;;26:21:-1;;;22:32;;6:49;;27223:32:0;;;;;;27213:43;;;;;;;;;27191:66;;;27280:13;;-1:-1:-1;;;27280:33:0;;;;;27088:14;;-1:-1:-1;;;;;27280:13:0;;;;:31;;:33;;;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;27280:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27280:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27280:33:0;27268:113;;-1:-1:-1;;;27268:113:0;;;;;;;;27344:10;27268:113;;;;;;;;;;;;;27356:24;27268:113;;;;;;;;-1:-1:-1;;;;;27268:63:0;;;;;;27332:10;;27356:24;;27268:113;;;;;;27356:24;;27268:113;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27268:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27268:113:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27268:113:0;;;;10006:1;;26607:782;:::o;11733:172::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;11816:9;;11805:7;:20;;:40;;;;-1:-1:-1;11839:1:0;11829:7;:11;:16;;11805:40;11797:70;;;;;-1:-1:-1;;;11797:70:0;;;;;;;;;;;;-1:-1:-1;;;11797:70:0;;;;;;;;;;;;;;;11878:9;:19;11733:172::o;11913:209::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;12020:23;;12004:12;:39;;11996:69;;;;;-1:-1:-1;;;11996:69:0;;;;;;;;;;;;-1:-1:-1;;;11996:69:0;;;;;;;;;;;;;;;12076:23;:38;11913:209::o;6244:65::-;;;;:::o;29945:307::-;29999:11;:9;:11::i;:::-;29995:250;;;30032:40;;;30047:12;30032:40;;30061:10;30032:40;;;;;;-1:-1:-1;;;;;;;;;;;30032:40:0;;;;;;;;;;30099:13;;;;;;;;;-1:-1:-1;;;;;30099:13:0;-1:-1:-1;;;;;30099:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30099:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30099:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30099:33:0;30087:78;;;-1:-1:-1;;;30087:78:0;;30154:10;30087:78;;;;;;-1:-1:-1;;;;;30087:66:0;;;;;;:78;;;;;-1:-1:-1;;30087:78:0;;;;;;;;-1:-1:-1;30087:66:0;:78;;;5:2:-1;;;;30:1;27;20:12;5:2;30087:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30087:78:0;;;;29995:250;;;30203:30;;;;;;;;;;;;-1:-1:-1;;;30203:30:0;;;;;;-1:-1:-1;;;;;;;;;;;30203:30:0;;;;;;;;29995:250;29945:307::o;37997:1344::-;38077:10;38099:4;38077:27;38069:60;;;;;-1:-1:-1;;;38069:60:0;;;;;;;;;;;;-1:-1:-1;;;38069:60:0;;;;;;;;;;;;;;;38181:11;;38148:22;:29;:44;;38140:88;;;;;-1:-1:-1;;;38140:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:9;;38247:15;;:28;;38239:66;;;;;-1:-1:-1;;;38239:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38337:1;38318:16;:20;;;;38349:12;38377:11;;38391:1;38377:15;38364:9;;:29;38349:44;;38404:27;38448:7;38434:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;38434:22:0;-1:-1:-1;38404:52:0;-1:-1:-1;38472:6:0;38467:716;38488:11;;38484:1;:15;38467:716;;;38591:22;:29;38547:39;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38547:39:0;;;;;;;38537:50;;;;;38521:8;;38591:29;;38532:88;;;;;38521:99;;38635:27;38665:13;:42;38679:22;38702:3;38679:27;;;;;;;;;;;;;;;;38665:42;;;;;;;;;;;38635:72;;38727:6;38736:1;38727:10;;38722:128;38743:9;;38739:1;:13;38722:128;;;38810:13;:21;;38832:1;38810:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38810:24:0;38778:10;38805:1;38793:9;;38789:1;:13;:17;38778:29;;;;;;;;-1:-1:-1;;;;;38778:56:0;;;:29;;;;;;;;;;;:56;38754:3;;38722:128;;;-1:-1:-1;38986:21:0;;38965:58;;38986:21;6695:3;38965:20;:58::i;:::-;39068:22;39091:29;;-1:-1:-1;;39091:33:0;;;39068:57;;;;;;;;;;;;;;39038:22;39061:3;39038:27;;;;;;;;;;;;;;;;;:87;39140:22;:31;;;;;-1:-1:-1;;39140:31:0;;;:::i;:::-;-1:-1:-1;;;38501:3:0;;38467:716;;;;39195:52;39200:9;;39223:11;;39211:9;;:23;39236:10;39195:4;:52::i;:::-;39258:28;39266:10;39278:7;39258;:28::i;:::-;39297:36;39305:10;39317:11;;39331:1;39317:15;39297:7;:36::i;:::-;37997:1344;;;;:::o;7721:28::-;;;;:::o;6349:27::-;;;;:::o;5895:31::-;;;;:::o;6150:40::-;;;;:::o;32058:117::-;9888:13;;:33;;;-1:-1:-1;;;9888:33:0;;;;32121:4;;-1:-1:-1;;;;;9888:13:0;;:31;;:33;;;;;;;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;9888:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:33:0;9876:77;;;-1:-1:-1;;;9876:77:0;;9942:10;9876:77;;;;;;-1:-1:-1;;;;;9876:65:0;;;;;;:77;;;;;9888:33;;9876:77;;;;;;;;:65;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;9876:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9876:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9876:77:0;9868:127;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;;;;32145:22;32156:10;32145;:22::i;:::-;32138:29;;10006:1;32058:117;:::o;11206:478::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;11314:14;;-1:-1:-1;;;;;11303:25:0;;;11314:14;;11303:25;;;;:52;;-1:-1:-1;;;;;;11332:23:0;;;;11303:52;11295:82;;;;;-1:-1:-1;;;11295:82:0;;;;;;;;;;;;-1:-1:-1;;;11295:82:0;;;;;;;;;;;;;;;11412:19;;-1:-1:-1;;;;;11396:35:0;;;11412:19;;11396:35;;;;:67;;-1:-1:-1;;;;;;11435:28:0;;;;11396:67;11388:97;;;;;-1:-1:-1;;;11388:97:0;;;;;;;;;;;;-1:-1:-1;;;11388:97:0;;;;;;;;;;;;;;;11496:14;:24;;-1:-1:-1;;;;;11496:24:0;;;-1:-1:-1;;;;;;11496:24:0;;;;;;;11531:19;:34;;;;;;;;;;;;;11588:13;;:33;;;-1:-1:-1;;;11588:33:0;;;;:13;;;;;:31;;:33;;;;;;;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;11588:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11588:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11588:33:0;11640:14;;11656:19;;11576:100;;;-1:-1:-1;;;11576:100:0;;-1:-1:-1;;;;;11640:14:0;;;11576:100;;;;11656:19;;;11576:100;;;;;:63;;;;;;;:100;;;;;11640:14;;11576:100;;;;;;;11640:14;11576:63;:100;;;5:2:-1;;;;30:1;27;20:12;13020:198:0;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;13113:19;;13102:7;:30;;:46;;;;-1:-1:-1;13136:12:0;;;13102:46;13094:76;;;;;-1:-1:-1;;;13094:76:0;;;;;;;;;;;;-1:-1:-1;;;13094:76:0;;;;;;;;;;;;;;;13181:19;:29;13020:198::o;12812:200::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;12909:13;;12893:12;:29;;:50;;;;-1:-1:-1;12926:17:0;;;12893:50;12885:80;;;;;-1:-1:-1;;;12885:80:0;;;;;;;;;;;;-1:-1:-1;;;12885:80:0;;;;;;;;;;;;;;;12976:13;:28;12812:200::o;29159:579::-;6643:3;29307:8;29318:24;;;:16;:24;;;;;29357:13;;;;;:84;;-1:-1:-1;29407:19:0;;29374:18;;;;:13;:18;;;;;:30;;;29429:12;29374:52;;:67;29357:84;29353:378;;;29458:32;29478:3;6695;29458:19;:32::i;:::-;29510:40;;;29525:12;29510:40;;29539:10;29510:40;;;;;;-1:-1:-1;;;;;;;;;;;29510:40:0;;;;;;;;;;29577:13;;;;;;;;;-1:-1:-1;;;;;29577:13:0;-1:-1:-1;;;;;29577:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29577:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29577:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29577:33:0;29565:78;;;-1:-1:-1;;;29565:78:0;;29632:10;29565:78;;;;;;-1:-1:-1;;;;;29565:66:0;;;;;;:78;;;;;-1:-1:-1;;29565:78:0;;;;;;;;-1:-1:-1;29565:66:0;:78;;;5:2:-1;;;;30:1;27;20:12;5:2;29565:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29565:78:0;;;;29353:378;;;29681:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29681:38:0;;;;;;;;29159:579;:::o;30258:1292::-;30338:4;30320:14;;:22;30312:51;;;;;-1:-1:-1;;;30312:51:0;;;;;;;;;;;;-1:-1:-1;;;30312:51:0;;;;;;;;;;;;;;;30396:15;;30380:12;:31;30376:132;;30433:42;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30433:42:0;;;;;;;;30490:7;;30376:132;30540:23;;30522:15;;:41;30518:144;;;30585:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30585:44:0;;;;;;;;30644:7;;30518:144;30708:1;30691:14;:18;;;30720:15;:19;;;30779:13;;:38;;;-1:-1:-1;;;30779:38:0;;;;-1:-1:-1;;;;;30779:13:0;;;;:36;;:38;;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;30779:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30779:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30779:38:0;30765:69;;;-1:-1:-1;;;30765:69:0;;;;;;;;;;-1:-1:-1;;;;;30765:63:0;;;;;;:69;;;;;30779:38;;30765:69;;;;;;;;-1:-1:-1;30765:63:0;:69;;;5:2:-1;;;;30:1;27;20:12;5:2;30765:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30765:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30765:69:0;;-1:-1:-1;30849:12:0;30845:116;;30883:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30883:45:0;;;;;;;;30943:7;;;30845:116;30992:1;30971:18;:22;;;31023:12;31004:16;:31;;;31095:14;;;31078:41;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;31078:41:0;;;;;;31068:52;;;;;;;;31046:75;;31187:9;;31149:23;;31187:9;;;31149:35;;;;;:47;31134:62;;31207:27;31251:7;31237:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;31237:22:0;;31207:52;;31272:28;31277:7;31286:1;31289:10;31272:4;:28::i;:::-;31311:35;31319:10;31331:14;;31311:7;:35::i;:::-;31357:40;31365:10;31387:9;;31377:7;:19;;;;;;31357:7;:40::i;:::-;31413;;;31428:12;31413:40;;31442:10;31413:40;;;;;;-1:-1:-1;;;;;;;;;;;31413:40:0;;;;;;;;;;31476:13;;;;;;;;;-1:-1:-1;;;;;31476:13:0;-1:-1:-1;;;;;31476:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31476:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31476:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31476:33:0;31464:78;;;-1:-1:-1;;;31464:78:0;;31531:10;31464:78;;;;;;-1:-1:-1;;;;;31464:66:0;;;;;;:78;;;;;-1:-1:-1;;31464:78:0;;;;;;;;-1:-1:-1;31464:66:0;:78;;;5:2:-1;;;;30:1;27;20:12;5:2;31464:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31464:78:0;;;;30258:1292;;;;:::o;7352:29::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7352:29:0;:::o;6064:25::-;;;;:::o;5474:35::-;;;;:::o;24784:1599::-;9888:13;;;;;;;;;-1:-1:-1;;;;;9888:13:0;-1:-1:-1;;;;;9888:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:33:0;9876:77;;;-1:-1:-1;;;9876:77:0;;9942:10;9876:77;;;;;;-1:-1:-1;;;;;9876:65:0;;;;;;:77;;;;;9888:33;;9876:77;;;;;;;;:65;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;9876:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9876:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9876:77:0;9868:127;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;;;;24996:14;25013:26;;;:15;:26;;;;;:39;;;-1:-1:-1;;;;;25013:39:0;25067:22;25063:110;;25111:29;;;;;;;25155:7;;;25063:110;25190:213;25226:11;25256:9;25284:6;;25190:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;25309:29:0;;;;;;;;;25323:6;;25309:29;;;-1:-1:-1;;25323:6:0;25309:29;;25323:3;25335:1;25331:6;;;;;;;;;25309:29;;;25357:26;;;;:15;:26;;;;;;;;;25190:213;;;;;;;;25357:45;;;25190:213;;;;;;;;;;25357:45;;25190:213;;;;25357:45;;:15;;25190:213;;;;;;;;;;-1:-1:-1;;;25190:213:0;;;-1:-1:-1;;25190:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:213::i;:::-;25185:262;;25429:7;;;25185:262;25464:31;;;-1:-1:-1;;;;;25464:31:0;;;;;;;;;;;;;;;25513:26;;;;:15;:26;;;;;;;25506:33;;;;;;;;;25513:26;;25506:33;;25513:26;25506:33;;25513:26;25506:33;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;25506:33:0;;;;-1:-1:-1;;;;;;25506:33:0;;;25554:43;;;25575:21;25554:43;25550:637;;;25614:53;;;-1:-1:-1;;;25614:53:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25614:34:0;;;;;25649:9;;25660:6;;;;25614:53;;25660:6;;;;25614:53;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25614:53:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25614:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25614:53:0;;;;25550:637;;;25689:44;;;25710:22;25689:44;25685:502;;;25955:24;;;;;;;;;;;;-1:-1:-1;;;25955:24:0;;;;;;-1:-1:-1;;;;;;;;;;;25955:24:0;;;;;;;;26073:32;;;26090:6;;;26073:32;;;;;;;26098:6;;;;26073:32;;;;;;26:21:-1;;;22:32;;6:49;;26073:32:0;;;;;;26063:43;;;;;;;-1:-1:-1;;;25994:114:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25994:34:0;;;;;:114;;;;;26094:1;;25994:114;;;;;;;26094:1;25994:34;:114;;;5:2:-1;;;;30:1;27;20:12;25685:502:0;26141:34;;;-1:-1:-1;;;26141:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;25685:502;26197:16;;:::i;:::-;26216:49;26230:26;;;:15;:26;;;;;;;;:34;;;;;26216:49;;:13;:49;;;;;;26197:68;;;;;;;;;;;;;;;;;;;;;26216:49;;26197:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26197:68:0;;;-1:-1:-1;;26197:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26197:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26288:13;;;;;;;;;-1:-1:-1;;;;;26288:13:0;-1:-1:-1;;;;;26288:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26288:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26288:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26288:33:0;26363:11;;;;26276:99;;-1:-1:-1;;;26276:99:0;;;;;;;;26351:10;26276:99;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26276:63:0;;;;;;26340:9;;26351:10;;26363:11;;26276:99;;;;;;;;26288:33;26276:99;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26276:99:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26276:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26276:99:0;;;;10006:1;;;24784:1599;;;;;:::o;6385:38::-;;;-1:-1:-1;;;;;6385:38:0;;:::o;7898:28::-;;;;:::o;31667:348::-;10321:10;10306:26;;;;:14;:26;;;;;;;;10298:51;;;;;-1:-1:-1;;;10298:51:0;;;;;;;;;;;;-1:-1:-1;;;10298:51:0;;;;;;;;;;;;;;;31750:18;31761:6;31750:10;:18::i;:::-;31746:262;;;31790:40;;;31805:12;31790:40;;31819:10;31790:40;;;;;;-1:-1:-1;;;;;;;;;;;31790:40:0;;;;;;;;;;31857:13;;;;;;;;;-1:-1:-1;;;;;31857:13:0;-1:-1:-1;;;;;31857:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;31746:262:0;31961:35;;;;;;;;;;;;-1:-1:-1;;;31961:35:0;;;;;;-1:-1:-1;;;;;;;;;;;31961:35:0;;;;;;;;31667:348;:::o;5596:67::-;;;;:::o;5822:26::-;;;;:::o;6316:::-;;;;:::o;7756:28::-;;;;:::o;12598:206::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;12695:19;;12682:9;:32;;:50;;;;-1:-1:-1;12718:14:0;;;12682:50;12674:80;;;;;-1:-1:-1;;;12674:80:0;;;;;;;;;;;;-1:-1:-1;;;12674:80:0;;;;;;;;;;;;;;;12765:19;:31;12598:206::o;5340:20::-;;;;:::o;5529:47::-;;;;:::o;6466:34::-;;;-1:-1:-1;;;;;6466:34:0;;:::o;12130:226::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;12235:23;;12220:11;:38;;:58;;;;-1:-1:-1;12262:16:0;;;12220:58;12212:88;;;;;-1:-1:-1;;;12212:88:0;;;;;;;;;;;;-1:-1:-1;;;12212:88:0;;;;;;;;;;;;;;;12311:23;:37;12130:226::o;7669:45::-;;;;;;;;;;;;;:::o;6926:50::-;;;;;;;;;;;;-1:-1:-1;;;;;6926:50:0;;:::o;34911:579::-;9888:13;;;;;;;;;-1:-1:-1;;;;;9888:13:0;-1:-1:-1;;;;;9888:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:33:0;9876:77;;;-1:-1:-1;;;9876:77:0;;9942:10;9876:77;;;;;;-1:-1:-1;;;;;9876:65:0;;;;;;:77;;;;;9888:33;;9876:77;;;;;;;;:65;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;9876:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9876:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9876:77:0;9868:127;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;;;;35033:10;35056:1;35017:27;;;:15;:27;;;;;;-1:-1:-1;;;;;35017:27:0;:41;35013:80;;35075:7;;35013:80;35181:10;35167:25;;;;:13;:25;;;;;;:30;35163:69;;35214:7;;35163:69;35256:10;35242:25;;;;:13;:25;;;;;6643:3;35242:34;;35287:39;;:27;:39::i;:::-;35342;;;35370:10;35342:39;;;;;;;;;;;;;35404:13;;;;;;;;;-1:-1:-1;;;;;35404:13:0;-1:-1:-1;;;;;35404:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35404:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35404:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35404:33:0;35392:68;;;-1:-1:-1;;;35392:68:0;;35449:10;35392:68;;;;;;-1:-1:-1;;;;;35392:56:0;;;;;;:68;;;;;-1:-1:-1;;35392:68:0;;;;;;;;-1:-1:-1;35392:56:0;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;35392:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35392:68:0;;;;35471:11;:9;:11::i;7388:36::-;;;;;;;;;;34669:106;34745:15;:22;34669:106;:::o;20581:1860::-;20814:4;20761;20772:21;10122:13;;;;;;;;;-1:-1:-1;;;;;10122:13:0;-1:-1:-1;;;;;10122:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10122:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10122:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10122:33:0;10110:79;;;-1:-1:-1;;;10110:79:0;;-1:-1:-1;;;;;10110:79:0;;;;;;;;;;;;;;;:60;;;;;;;:79;;;;;10122:33;;10110:79;;;;;;;:60;:79;;;5:2:-1;;;;30:1;27;20:12;5:2;10110:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10110:79:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10110:79:0;10088:143;;;;;-1:-1:-1;;;10088:143:0;;;;;;;;;;;;-1:-1:-1;;;10088:143:0;;;;;;;;;;;;;;;20860:1;20840:17;20852:4;20840:11;:17::i;:::-;:21;20836:1598;;;20878:15;20902:8;;20878:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;21117:9:0;;20878:33;;-1:-1:-1;;21117:14:0;;;-1:-1:-1;21117:14:0;:30;;;21135:2;21138:1;21135:5;;;;;;;;;;;;;-1:-1:-1;;;;;;21135:5:0;-1:-1:-1;;;21135:12:0;21117:30;:46;;;;21151:2;21154:1;21151:5;;;;;;;;;;;;;-1:-1:-1;;;;;;21151:5:0;-1:-1:-1;;;21151:12:0;21117:46;21113:1170;;;21184:12;21225:15;21242:4;21248:7;21257:10;;21269:8;;21214:64;;;;;;;;;;;-1:-1:-1;;;;;21214:64:0;-1:-1:-1;;;;;21214:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;21214:64:0;;;;;;;;;;;-1:-1:-1;21214:64:0;;;;;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;21214:64:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21214:64:0;;;21204:75;;;;;;21199:81;;21184:96;;21299:8;21310:43;21322:21;21345:7;21310:11;:43::i;:::-;21299:54;;-1:-1:-1;;21444:3:0;:14;21440:144;;;21488:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21488:45:0;;;;;;;;21563:1;21556:8;;;;;;;21440:144;21602:17;21622:13;:35;21636:15;21652:3;21636:20;;;;;;;;;;;;;;;;;;;;21622:35;;;;;;;;;;;;;;;21703:59;;;;;;;;;;;21727:11;;21703:59;;;;;;;;;;;;;;21622:35;;-1:-1:-1;21703:59:0;;;;;21740:15;;;;21703:59;;;;21740:15;21703:59;;21740:15;21703:59;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21703:59:0;;;-1:-1:-1;;21703:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21703:59:0;;;;-1:-1:-1;;;21703:59:0;;-1:-1:-1;;;;;21703:59:0;;;;;;;-1:-1:-1;21676:24:0;;;:15;:24;;;;;;;;:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21676:86:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21676:86:0;;;;;-1:-1:-1;;;;;21676:86:0;;;;;;;;;21786:220;21815:7;21845;21875:10;;21908:8;;21939:14;;21976:3;:11;;;21786:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;21786:220:0;;;;;;;;;;;-1:-1:-1;21786:220:0;;;;;1:33:-1;99:1;81:16;;;74:27;21786:220:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;21786:220:0;;;;-1:-1:-1;21786:220:0;;-1:-1:-1;;;;;;;;;;;21786:220:0;22037:13;;;;;;;;;-1:-1:-1;;;;;22037:13:0;-1:-1:-1;;;;;22037:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22037:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22037:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22037:33:0;-1:-1:-1;;;;;22025:63:0;;22089:4;22095:7;22109:21;22025:107;;;;;;;;;;;;;-1:-1:-1;;;;;22025:107:0;-1:-1:-1;;;;;22025:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22025:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22025:107:0;;;;22158:7;22151:14;;;;;;;;21113:1170;22211:29;22231:8;;22211:29;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;22211:29:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;22211:29:0;;;;-1:-1:-1;22211:29:0;;-1:-1:-1;;;;22211:29:0;22266:1;22259:8;;;;;20836:1598;22375:24;;;-1:-1:-1;;;;;22375:24:0;;;;;;;;;;;;;;;22421:1;22414:8;;20836:1598;20581:1860;;;;;;;;;;:::o;41690:2026::-;9888:13;;;;;;;;;-1:-1:-1;;;;;9888:13:0;-1:-1:-1;;;;;9888:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:33:0;9876:77;;;-1:-1:-1;;;9876:77:0;;9942:10;9876:77;;;;;;-1:-1:-1;;;;;9876:65:0;;;;;;:77;;;;;9888:33;;9876:77;;;;;;;;:65;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;9876:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9876:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9876:77:0;9868:127;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;-1:-1:-1;;;9868:127:0;;;;;;;;;;;;;;;41831:25;41859:22;;;:13;:22;;;;;41896:12;;41892:102;;41935:26;;;;;;;;;;;;;;;;;41976:7;;;41892:102;42030:10;42053:1;42014:27;;;:15;;;:27;;;;;;-1:-1:-1;;;;;42014:27:0;42006:84;;;;;-1:-1:-1;;;42006:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42207:18;42136:110;;42167:18;;;42136:110;;;;;;;42187:18;;;;42136:110;;;;42207:18;;;;42136:110;;;;;;;;42227:18;;;42136:110;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;42136:110:0;;;;;;42126:121;;;;;;;;;-1:-1:-1;42258:31:0;;;42223:1;42258:17;;:31;;;;;;;:33;;42203:1;42258:33;;;;;42307:63;;;;;;;;;;;;;;;;;;;42431:1;42419:9;;:13;;;;;42385:31;;;;:17;;;:31;;;;;;42419:13;;;-1:-1:-1;42381:1328:0;;;42449:28;42494:9;;42480:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;42480:24:0;-1:-1:-1;6695:3:0;42519:8;42563:23;;;:15;;;:23;;;;;;42449:55;;-1:-1:-1;42519:8:0;-1:-1:-1;;;;;42563:23:0;42601:188;-1:-1:-1;;;;;42608:16:0;;6695:3;42608:16;42601:188;;42666:6;42645:11;42657:5;;;;;;42645:18;;;;;;;;-1:-1:-1;;;;;42645:27:0;;;:18;;;;;;;;;;:27;;;;42691:21;;;;;;;:13;:21;;;;;;:31;;;42750:15;;;:23;;;;;;;;;42601:188;;;42805:15;27:10:-1;;39:1;23:18;;;45:23;;;42805:29:0;;;;;42874:274;;;;;;;;;;;42924:97;;;;;;;;42939:18;;42924:97;;;;;;42805:29;42959:18;;;;42924:97;;;;;;;;;;;;;;;;;;42981:18;;;;42924:97;;43001:18;;;;42924:97;;;;-1:-1:-1;;;42924:97:0;42874:274;;;;;;43059:13;;43040:16;;:32;42874:274;;;;43091:12;42874:274;;;;;;;;;;;;;-1:-1:-1;42849:22:0;;;:13;:22;;;;;;;:299;;;;;;;;42874:274;;42849:299;;;;;;;;;;;;:::i;:::-;-1:-1:-1;42849:299:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;42849:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;43204:9;43215:12;43231:43;43248:16;43266:7;43231:16;:43::i;:::-;43203:71;;;;43346:7;:38;;;;;43377:7;43357:16;;:27;43346:38;43342:102;;;43405:16;:23;;;43342:102;43501:22;;;;:13;:22;;;;;;;;43494:29;;;;;;;;;43538:16;:18;;-1:-1:-1;;43538:18:0;;;43576:31;;;;;;;;;;;;;;;;;43674:15;:22;43627:70;;;;;;;43648:7;;43657:15;;43674:22;43627:70;;;43657:15;43627:70;;43657:15;43627:70;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;43627:70:0;;;-1:-1:-1;;43627:70:0;;;;;;;;;-1:-1:-1;43627:70:0;-1:-1:-1;43627:70:0;42381:1328;;;;;10006:1;;;41690:2026;;:::o;12364:226::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;12469:23;;12454:11;:38;;:58;;;;-1:-1:-1;12496:16:0;;;12454:58;12446:88;;;;;-1:-1:-1;;;12446:88:0;;;;;;;;;;;;-1:-1:-1;;;12446:88:0;;;;;;;;;;;;;;;12545:23;:37;12364:226::o;28722:320::-;28768:26;:24;:26::i;:::-;28764:271;;;28816:40;;;28831:12;28816:40;;28845:10;28816:40;;;;;;-1:-1:-1;;;;;;;;;;;28816:40:0;;;;;;;;;;28883:13;;;;;;;;;-1:-1:-1;;;;;28883:13:0;-1:-1:-1;;;;;28883:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;28764:271:0;28987:36;;;;;;;;;;;;-1:-1:-1;;;28987:36:0;;;;;;-1:-1:-1;;;;;;;;;;;28987:36:0;;;;;;;;28722:320::o;7793:30::-;;;;:::o;13413:222::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;13510;;13498:8;:40;;:57;;;;-1:-1:-1;13542:13:0;;;13498:57;13490:87;;;;;-1:-1:-1;;;13490:87:0;;;;;;;;;;;;-1:-1:-1;;;13490:87:0;;;;;;;;;;;;;;;13588:28;:39;13413:222::o;11087:111::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;-1:-1:-1;;;;;11169:21:0;;;;;:14;:21;;;;;11162:28;;-1:-1:-1;;11162:28:0;;;11087:111::o;22497:1165::-;22641:4;22587;22598:22;10122:13;;;;;;;;;-1:-1:-1;;;;;10122:13:0;-1:-1:-1;;;;;10122:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10122:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10122:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10122:33:0;10110:79;;;-1:-1:-1;;;10110:79:0;;-1:-1:-1;;;;;10110:79:0;;;;;;;;;;;;;;;:60;;;;;;;:79;;;;;10122:33;;10110:79;;;;;;;:60;:79;;;5:2:-1;;;;30:1;27;20:12;5:2;10110:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10110:79:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10110:79:0;10088:143;;;;;-1:-1:-1;;;10088:143:0;;;;;;;;;;;;-1:-1:-1;;;10088:143:0;;;;;;;;;;;;;;;22695:43;;;22706:15;22695:43;;;;;;;;-1:-1:-1;;;;;22695:43:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22695:43:0;;;;;;;22685:54;;;;;22663:14;22762:46;22774:22;22685:54;22762:11;:46::i;:::-;22751:57;;-1:-1:-1;;22883:3:0;:14;22879:118;;;22919:43;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22919:43:0;;;;;;;;22984:1;22977:8;;;;;;22879:118;23007:17;23027:13;:35;23041:15;23057:3;23041:20;;;;;;;;;;;;;;;;;;;;23027:35;;;;;;;;;;;;;;;23102:61;;;;;;;;;;;23128:11;;23102:61;;;;;;;;;;;;;;23027:35;;-1:-1:-1;23102:61:0;;;;;23141:15;;;;23102:61;;;;23141:15;23102:61;;23141:15;23102:61;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23102:61:0;;;-1:-1:-1;;23102:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23102:61:0;;;;-1:-1:-1;;;23102:61:0;;-1:-1:-1;;;;;23102:61:0;;;;;;;-1:-1:-1;23073:26:0;;;:15;:26;;;;;;;;:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23073:90:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;23073:90:0;;;;;;;;;;;-1:-1:-1;;;;;23073:90:0;;;-1:-1:-1;;;;;;23073:90:0;;;;;;;;;23341:14;;23393:11;;23282:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23438:13;;;;;;;;;-1:-1:-1;;;;;23438:13:0;-1:-1:-1;;;;;23438:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23438:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23438:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23438:33:0;-1:-1:-1;;;;;23426:63:0;;;;;;23504:21;;23520:4;23504:21;:45;;23545:4;23504:45;;;23528:14;;-1:-1:-1;;;;;23528:14:0;23504:45;23564:9;23593:22;23426:201;;;;;;;;;;;;;-1:-1:-1;;;;;23426:201:0;-1:-1:-1;;;;;23426:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23426:201:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;23645:9:0;;-1:-1:-1;;;;;;10242:1:0;22497:1165;;;;;;:::o;13226:179::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;13319:17;;13307:8;:29;;13299:59;;;;;-1:-1:-1;;;13299:59:0;;;;;;;;;;;;-1:-1:-1;;;13299:59:0;;;;;;;;;;;;;;;13369:17;:28;13226:179::o;7465:50::-;;;;;;;;;;;;;;;;;;;:::o;10973:106::-;9793:5;;-1:-1:-1;;;;;9793:5:0;9779:10;:19;9771:28;;;;;;-1:-1:-1;;;;;11043:21:0;;;;;:14;:21;;;;;:28;;-1:-1:-1;;11043:28:0;11067:4;11043:28;;;10973:106::o;5683:60::-;;;;:::o;6430:29::-;;;-1:-1:-1;;;;;6430:29:0;;:::o;6197:40::-;;;;:::o;34783:120::-;34866:22;:29;34783:120;:::o;7208:45::-;;;;;;;;;;;;;:::o;7865:26::-;;;;:::o;7020:27::-;;;;:::o;7830:28::-;;;;:::o;7522:36::-;;;;:::o;26391:143::-;26469:13;;;26479:2;26469:13;;;;;;;;;26438:14;;26469:13;;;21:6:-1;;104:10;26469:13:0;87:34:-1;-1:-1;;;26518:2:0;26511:10;;26504:21;;;;-1:-1:-1;26511:10:0;26502:25::o;23738:1038::-;23970:4;24075:20;24115:4;24121:10;24098:34;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;24098:34:0;;;;-1:-1:-1;;24098:34:0;;;;;;-1:-1:-1;24098:34:0;;;26:21:-1;;;-1:-1;;22:32;6:49;;24218:1:0;24098:34;;;24198:22;;;;;;;;;24098:34;;-1:-1:-1;24098:34:0;;-1:-1:-1;24098:34:0;24218:1;-1:-1:-1;24198:22:0;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;24259:22:0;;;24279:1;24259:22;;;24231:25;24259:22;;;;;;24170:50;;-1:-1:-1;24231:25:0;;24259:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24231:50;;24300:23;24313:9;24300:12;:23::i;:::-;24292:2;24295:1;24292:5;;;;;;;;;;;;;:31;;;;24342:23;24357:7;24342:14;:23::i;:::-;24334:2;24337:1;24334:5;;;;;;;;;;;;;:31;;;;24384:10;:8;:10::i;:::-;24376:2;24379:1;24376:5;;;;;;;;;;;;;:18;;;;24413:9;24405:2;24408:1;24405:5;;;;;;;;;;;;;:17;;;;24433:15;24451:26;24470:2;24474;24451:18;:26::i;:::-;24433:44;;24493:247;24527:11;24553:9;24577:7;24493:247;;;;;;;;24600:9;:11;;;24493:247;;;;24613:9;:11;;;24493:247;;;;;;;;;;;24641:9;:11;;;24653:1;24641:14;;;;;;;;;;;24493:247;;;;24657:9;:11;;;24669:1;24657:14;;;;;;;;;;;24493:247;;;;24673:9;:11;;;24685:1;24673:14;;;;;;;;;;;24493:247;;;;24689:9;:11;;;24701:1;24689:14;;;;;;;;;;;24493:247;;;24719:10;24493:247;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24493:247:0;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24493:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24493:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24758:10;23738:1038;-1:-1:-1;;;;;;;;;23738:1038:0:o;35604:2300::-;35641:4;35927:9;;35909:15;;:27;:118;;;-1:-1:-1;35954:15:0;:22;:27;:72;;;;;36003:23;;35985:15;;:41;35954:72;35905:439;;;36048:22;:29;:33;36044:289;;36102:61;36123:22;36146:1;36123:25;;;;;;;;;;;;;;;;36150:4;6695:3;36102:20;:61::i;:::-;36210:22;36233:29;;-1:-1:-1;;36233:33:0;;;36210:57;;;;;;;;;;;;;;36182:22;36205:1;36182:25;;;;;;;;;;;;;;;;;:85;36286:22;:31;;;;;-1:-1:-1;;36286:31:0;;;:::i;:::-;;36044:289;36378:9;;36360:15;;:27;36356:135;;;36436:15;;36409:43;;;;;;;;;;;;;;;;-1:-1:-1;36474:5:0;36467:12;;36356:135;36507:15;:22;:26;36503:1371;;36587:11;;36554:22;:29;:44;36550:611;;36623:16;;36619:426;;36688:42;36710:4;36717:12;36688:13;:42::i;:::-;36669:16;:61;;;36753:39;;-1:-1:-1;36787:5:0;36780:12;;36753:39;36820:48;36841:15;;36858:9;;36820:48;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36898:4:0;36891:11;;36619:426;36956:34;;;;;;;;;;;;-1:-1:-1;;;36956:34:0;;;;;;-1:-1:-1;;;;;;;;;;;36956:34:0;;;;;;;;-1:-1:-1;37020:5:0;37013:12;;36550:611;-1:-1:-1;;;;;;;;;;;37090:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36503:1371;;;37201:23;;37182:15;;:42;37178:696;;37316:14;;37312:551;;37387:13;;;;;;;;;-1:-1:-1;;;;;37387:13:0;-1:-1:-1;;;;;37387:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37387:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37387:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37387:38:0;37502:23;;37548;;37594;;37373:263;;;-1:-1:-1;;;37373:263:0;;37467:12;37373:263;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37373:71:0;;;;;;:263;;;;;37387:38;;37373:263;;;;;;;;-1:-1:-1;37373:71:0;:263;;;5:2:-1;;;;30:1;27;20:12;5:2;37373:263:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37373:263:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37373:263:0;37356:14;:280;-1:-1:-1;37714:23:0;;37688;;37673:12;:38;:64;37655:15;:82;37763:4;37756:11;;37312:551;37813:34;;;;;;;;;;;;-1:-1:-1;;;37813:34:0;;;;;;-1:-1:-1;;;;;;;;;;;37813:34:0;;;;;;;;37312:551;-1:-1:-1;37891:5:0;35604:2300;:::o;19656:891::-;19828:17;19848:22;;;:13;:22;;;;;;19881:578;19902:11;;;:18;19898:22;;19881:578;;;19942:14;19959:3;:11;;19971:1;19959:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19959:14:0;20167:21;;;:13;:21;;;;;;;;19959:14;;-1:-1:-1;20167:32:0;;20163:285;;;-1:-1:-1;;;;;20220:21:0;;;;;;:13;:21;;;;;6643:3;20220:30;;20273:17;:39;;;;;20304:8;-1:-1:-1;;;;;20294:18:0;:6;-1:-1:-1;;;;;20294:18:0;;;20273:39;:80;;;;-1:-1:-1;;;;;;20316:23:0;;;20351:1;20316:23;;;:15;:23;;;;;;;:37;20273:80;20269:164;;;20378:35;20406:6;20378:27;:35::i;:::-;-1:-1:-1;19922:3:0;;19881:578;;;-1:-1:-1;20476:22:0;;;;:13;:22;;;;;20469:29;;;20476:22;20469:29;;;20476:22;20469:29;;20476:22;20469:29;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;20514:25:0;;;;;;;;;;;;;;;;;19656:891;;;;:::o;39454:513::-;39548:6;39543:249;39564:3;39560:1;:7;39543:249;;;39604:15;:23;;;;;-1:-1:-1;;;;;39604:23:0;;;39589:12;39668:21;;;39604:23;39668:21;;;;;;;-1:-1:-1;;;;;;39642:47:0;;;;;;;39704:28;;;;;;;39747:26;;39604:23;;39747:26;;39758:14;;;;39747:26;;;;;;-1:-1:-1;;;;;39747:33:0;;;:26;;;;;;;;;;;:33;-1:-1:-1;39569:3:0;;39543:249;;;-1:-1:-1;39802:15:0;:22;;;;;;;;;39883:77;;39924:15;:24;;-1:-1:-1;;;;;;39924:24:0;6695:3;39924:24;;;39883:77;39454:513;;;:::o;40034:317::-;40125:10;;-1:-1:-1;;40125:14:0;40111:233;40141:5;;40111:233;;40168:6;40234:1;40238;40234:5;40209:7;40218:1;40221:3;40225:1;40221:6;;;;;;;;;;;;;;40192:36;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40192:36:0;-1:-1:-1;;;;;40192:36:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;40192:36:0;;;40182:47;;;;;;40177:53;;:63;;;;;;40168:72;;40255:11;40269:3;40273:1;40269:6;;;;;;;;;;;;;;40255:20;;40299:3;40303:1;40299:6;;;;;;;;;;;;;;40290:3;40294:1;40290:6;;;;;;;;;;;;;:15;-1:-1:-1;;;;;40290:15:0;;;-1:-1:-1;;;;;40290:15:0;;;;;40329:3;40320;40324:1;40320:6;;;;;;;;-1:-1:-1;;;;;40320:12:0;;;:6;;;;;;;;;;;:12;-1:-1:-1;;;;40148:3:0;40111:233;;40398:1284;40514:3;40502:9;;:15;40481:10;:17;:36;40473:74;;;;;-1:-1:-1;;;40473:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40560:24;40601:9;;40587:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;40587:24:0;-1:-1:-1;40560:51:0;-1:-1:-1;40622:12:0;;40645:1030;40666:3;40662:1;:7;40645:1030;;;40701:1;;-1:-1:-1;40701:1:0;40717:197;40738:9;;40734:1;:13;40717:197;;;40786:10;40813:1;40801:9;;40797:1;:13;:17;40786:29;;;;;;;;;;;;;;40773:7;40781:1;40773:10;;;;;;;;;;;;;:42;-1:-1:-1;;;;;40773:42:0;;;-1:-1:-1;;;;;40773:42:0;;;;;40876:7;40885;40893:1;40885:10;;;;;;;;;;;;;;;;;;;40859:37;;;;;;;;;;;;;;;-1:-1:-1;;40859:37:0;;;;;;;26:21:-1;;;22:32;;6:49;;40859:37:0;;;;;;40849:48;;;;;;-1:-1:-1;40749:3:0;;40717:197;;;-1:-1:-1;41125:42:0;;;;;;;;;;;41151:15;41125:42;;;;;;26:21:-1;;;22:32;;6:49;;41125:42:0;;;;;;41115:53;;;;;;;;;41209:35;;;;;;;;41231:12;41209:35;;;;;;;-1:-1:-1;41184:22:0;;;:13;:22;;;;;:60;;;;;;;;;;;;;;41356:18;;;41308:33;;;;41356:18;;;;;;;:27;;-1:-1:-1;;;;;;41356:27:0;;;;;;41115:53;;41308:33;41398:165;41419:9;;41415:1;:13;41398:165;;;6695:3;41479:18;;;;;;;;;;;;41465:10;;-1:-1:-1;;;;;41479:18:0;;;;;;41465:10;;41473:1;;41465:10;;;;;;;;;;;;-1:-1:-1;;;;;41454:22:0;-1:-1:-1;;;;;41454:22:0;;;;;;;;;;;;;:43;;;;;-1:-1:-1;;;;;41454:43:0;;;;;-1:-1:-1;;;;;41454:43:0;;;;;;41537:7;41545:1;41537:10;;;;;;;;;;;;;;;;;;;6695:3;41516:18;;;;;;;;;;;;:31;;-1:-1:-1;;;;;;41516:31:0;-1:-1:-1;;;;;41516:31:0;;;;;;;;;41430:3;41398:165;;;;41577:37;41606:7;41577:28;:37::i;:::-;41634:29;41646:7;41655;41634:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;41634:29:0;;;;;;;;;;;;;;;;;;-1:-1:-1;40671:3:0;;40645:1030;;32239:2422;-1:-1:-1;;;;;32322:19:0;;32290:4;32322:19;;;:13;:19;;;;;;32290:4;;32493:12;;;;;:33;;;6643:3;32509:7;:17;;32493:33;32489:1242;;;32543:41;32564:7;32573:4;32579;32543:20;:41::i;:::-;32604:8;32599:485;32624:15;:22;32618:28;;32599:485;;;32702:7;32678:15;32694:3;32678:20;;;;;;;;;;;;;;;;:31;32674:395;;;32746:15;:22;-1:-1:-1;;32746:26:0;32738:35;;32734:158;;32825:15;32841:22;;-1:-1:-1;;32841:26:0;;;32825:43;;;;;;;;;;;;;;32802:15;32818:3;32802:20;;;;;;;;;;;;;;;;;:66;32734:158;32914:15;:24;;;;;-1:-1:-1;;32914:24:0;;;:::i;:::-;-1:-1:-1;32971:4:0;;-1:-1:-1;32998:23:0;;;;33044:5;;32674:395;32648:5;;32599:485;;;;33103:7;33098:622;;33136:8;33131:574;33156:22;:29;33150:35;;33131:574;;;33252:7;33221:22;33244:3;33221:27;;;;;;;;;;;;;;;;:38;33217:469;;;33300:22;:29;-1:-1:-1;;33300:33:0;33292:42;;33288:194;;33397:22;33420:29;;-1:-1:-1;;33420:33:0;;;33397:57;;;;;;;;;;;;;;33367:22;33390:3;33367:27;;;;;;;;;;;;;;;;;:87;33288:194;33508:22;:31;;;;;-1:-1:-1;;33508:31:0;;;:::i;:::-;;33576:4;33566:14;;33627:3;33607:23;;;;33657:5;;33217:469;33187:5;;33131:574;;;;33098:622;33794:7;33793:8;:48;;;;;33805:36;33836:4;33805:30;:36::i;:::-;33789:104;;;33878:3;33858:23;33789:104;-1:-1:-1;;;;;33957:21:0;;;33990:1;33957:21;;;:15;:21;;;;;;;:35;33953:482;;34048:12;34093:41;34112:15;34129:4;34093:18;:41::i;:::-;34075:59;-1:-1:-1;34075:59:0;-1:-1:-1;34149:275:0;;;;34181:15;:17;;-1:-1:-1;;34181:17:0;;;34277:15;;-1:-1:-1;;;;;34277:23:0;;;:15;;:23;34273:94;;;34325:15;:22;;-1:-1:-1;;;;;;34325:22:0;-1:-1:-1;;;;;34325:22:0;;;;;34273:94;34405:3;34385:23;;;;34149:275;33953:482;;-1:-1:-1;;;;;34452:19:0;;;;;;;:13;:19;;;;;;;;34445:26;;;;34494:13;;:33;;-1:-1:-1;;;34494:33:0;;;;:13;;;:31;;:33;;;;;34452:19;34494:33;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;34494:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34494:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34494:33:0;34482:61;;;-1:-1:-1;;;34482:61:0;;-1:-1:-1;;;;;34482:61:0;;;;;;;;;:55;;;;;;;:61;;;;;-1:-1:-1;;34482:61:0;;;;;;;-1:-1:-1;34482:55:0;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;34482:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;34559:53:0;;;-1:-1:-1;;;;;34559:53:0;;;;;;;;;;;;;;;-1:-1:-1;34559:53:0;;;;;;;;-1:-1:-1;34559:53:0;34631:21;;;;;-1:-1:-1;;;32239:2422:0;;;;:::o;27397:1080::-;27473:25;27501:18;;;:13;:18;;;;;;;;6695:3;27547:23;;:15;;;:23;;;;;;;-1:-1:-1;;;;;27547:23:0;27581:478;-1:-1:-1;;;;;27588:16:0;;6695:3;27588:16;27581:478;;-1:-1:-1;;;;;27835:21:0;;;;;;:13;:21;;;;;;6643:3;27835:31;:53;;;;;27880:8;-1:-1:-1;;;;;27870:18:0;:6;-1:-1:-1;;;;;27870:18:0;;;27835:53;:94;;;;-1:-1:-1;;;;;;27892:23:0;;;27927:1;27892:23;;;:15;:23;;;;;;;:37;27835:94;27831:170;;;27950:35;27978:6;27950:27;:35::i;:::-;-1:-1:-1;;;;;28024:23:0;;;;;;;:15;;;:23;;;;;;;27581:478;;;28109:9;28120:12;28136:39;28153:16;28171:3;28136:16;:39::i;:::-;28108:67;;;;28239:7;:34;;;;;28270:3;28250:16;;:23;28239:34;28235:90;;;28290:16;:23;;;28235:90;28379:18;;;;:13;:18;;;;;;;;28372:25;;;;;;;;;28408:16;:18;;-1:-1:-1;;28408:18:0;;;28442:27;;;;;;;;;;;;;;;;;27397:1080;;;;;;:::o;16761:245::-;16871:15;;;-1:-1:-1;;;;;16871:15:0;;;16855:32;;;;:15;:32;;;;;;;16831:21;;;;;;;;;:56;;16855:32;;;-1:-1:-1;;;;;;16831:56:0;;;;;;16914:15;;;;;16898:32;;;;:39;;;;;;;;16948:22;;;;;;;;;;16981:15;:17;;-1:-1:-1;16981:17:0;;;16761:245::o;14125:146::-;14236:17;;14213:51::o;15362:188::-;15441:4;15458:26;:24;:26::i;:::-;;15502:40;15518:11;15531:10;15502:15;:40::i;:::-;15495:47;;15362:188;;;;;:::o;18333:487::-;6643:3;18420:4;18484:10;;;;;;;;;;;18420:4;;;;18505:107;6643:3;18512:4;:14;;:28;;;;;18538:2;18530:4;:10;;18512:28;18505:107;;;18590:10;;;;;;;;;;;;18564:4;;-1:-1:-1;18505:107:0;;;6643:3;18626:4;:14;18622:191;;;6643:3;18673:5;18657:22;;;;;;;;18622:191;18725:10;;;;;;;;;;;;;;18712;;;;;;:23;;;;18757:10;;;18750:17;;18717:4;-1:-1:-1;;;;18333:487:0;;;;;;:::o;15558:925::-;15611:4;15682:12;15651:28;;15632:16;;:47;:62;:119;;;;15739:12;15719:17;;15698:18;;:38;:53;15632:119;15628:164;;;-1:-1:-1;15775:5:0;15768:12;;15628:164;15804:8;15815:76;15804:8;-1:-1:-1;;15872:12:0;:16;15862:27;15815:15;:76::i;:::-;15804:87;;-1:-1:-1;;15966:3:0;:14;15962:119;;;16002:40;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16002:40:0;;;;;;;;16064:5;16057:12;;;;;15962:119;16114:12;16093:18;:33;;;;16156:13;:35;16170:15;16186:3;16170:20;;;;;;;;;;;;;;;;;;;;16156:35;;;;;;;;;;;;16137:54;;:16;:54;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16137:54:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;16260:14:0;;16276:16;:24;16244:57;;;;;;;;;;;;;;;;;-1:-1:-1;16244:57:0;;;;;;;16324:13;;;;;;;;;-1:-1:-1;;;;;16324:13:0;-1:-1:-1;;;;;16324:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16324:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16324:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16324:33:0;16376:14;;16406;;16312:141;;;-1:-1:-1;;;16312:141:0;;-1:-1:-1;;;;;16376:14:0;;;16312:141;;;;;;;;;;;16376:14;16312:141;;;;;;;;:63;;;;;;;:141;;;;;;;;;;16376:14;16312:63;:141;;;5:2:-1;;;;30:1;27;20:12;5:2;16312:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16312:141:0;;;;16471:4;16464:11;;;15558:925;:::o;1511:292::-;1568:14;;:::i;:::-;1599:3;;:8;:20;;;;-1:-1:-1;1611:3:0;;;;:8;1599:20;1595:61;;;-1:-1:-1;1643:1:0;1636:8;;1595:61;1666:6;1675:77;1666:86;;1770:25;;;;;;;;1778:1;:3;;;1770:25;;;;1793:1;1787;:3;;;:7;;;;;;1783:11;;;1770:25;;;1763:32;1511:292;-1:-1:-1;;1511:292:0:o;1811:162::-;1866:14;;:::i;:::-;1913:15;;;;;;1947:18;1957:4;:2;:4::i;:::-;1963:1;1947:9;:18::i;:::-;1940:25;1811:162;-1:-1:-1;;;1811:162:0:o;284:469::-;321:14;;:::i;:::-;-1:-1:-1;355:390:0;;;;;;;;378:77;355:390;;;;;;470:77;355:390;;;;;;;;;;;;;;566:76;355:390;;657:76;355:390;;;;;;;;;;;;;;284:469;:::o;2382:943::-;2464:4;2502:2;:9;2489:2;:9;:22;2481:31;;;;;;2539:9;;2621:21;;;2587:1;2576:12;;2621:21;;;;;;;;;;;;;2599:19;;2576:12;2621:21;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2621:21:0;-1:-1:-1;2599:43:0;-1:-1:-1;2660:6:0;2655:315;2676:8;2672:1;:12;2655:315;;;2734:2;2737:1;2734:5;;;;;;;;;;;;;;:7;;;2715:5;2721:1;2725;2721:5;2729:1;2721:9;2715:16;;;;;;;;;;;;;:26;;;;;2775:2;2778:1;2775:5;;;;;;;;;;;;;;:7;;;2756:5;2762:1;2766;2762:5;2770:1;2762:9;2756:16;;;;;;;;;;;;;:26;;;;;2816:2;2819:1;2816:5;;;;;;;;;;;;;;;;;;:7;:10;2797:16;;:5;;2811:1;2807;2803:5;;:9;;2797:16;;;;;;;;;;;:29;;;;;2860:2;2863:1;2860:5;;;;;;;;;;;;;;;;;;:7;2868:1;2860:10;;;;2841:5;2847:1;2851;2847:5;2855:1;2847:9;2841:16;;;;;;;;;;;;;:29;;;;;2904:2;2907:1;2904:5;;;;;;;;;;;;;;:7;;;2912:1;2904:10;;;;;;;;;;;2885:5;2891:1;2895;2891:5;2899:1;2891:9;2885:16;;;;;;;;;;;;;:29;;;;;2948:2;2951:1;2948:5;;;;;;;;;;;;;;:7;;;2956:1;2948:10;;;;;;;;;;;2929:5;2935:1;2939;2935:5;2943:1;2935:9;2929:16;;;;;;;;;;;;;;;;;:29;2686:3;;2655:315;;;;2982:18;;:::i;:::-;3011:12;3246:4;3241:3;3217:4;3206:9;3202:20;3178:4;3171:5;3167:16;3147:1;3125:3;3101:4;3096:3;3092:14;3069:196;3058:207;;3293:7;:24;;;;-1:-1:-1;3305:6:0;;:11;;3293:24;3286:31;2382:943;-1:-1:-1;;;;;;;;2382:943:0:o;16491:262::-;16607:16;;;16590:34;;;;:16;:34;;;;;;;16562:25;;;;;;:62;16652:16;;16635:34;;;;:44;;;16690:26;16727:16;:18;;;;;;16491:262::o;18876:550::-;6643:3;18946:4;19004:22;;;:16;:22;;;;18946:4;;6643:3;19037:359;6643:3;19044:4;:14;19037:359;;19075:25;19103:19;;;:13;:19;;;;;;19154:39;19171:15;;;19188:4;19154:16;:39::i;:::-;19137:56;;;19212:5;19208:107;;;19238:31;19258:4;19264;19238:19;:31::i;:::-;19295:4;19288:11;;;;;;;;19208:107;-1:-1:-1;;19362:22:0;;;;:16;:22;;;;;;19336:4;;-1:-1:-1;19037:359:0;;;-1:-1:-1;19413:5:0;;18876:550;-1:-1:-1;;;18876:550:0:o;17421:325::-;17521:7;17530:4;17548:12;17562:10;17576:28;17593:4;17599;17576:16;:28::i;:::-;17547:57;;;;17619:5;17615:93;;;-1:-1:-1;;;;;17654:10:0;;;;;;;;;;;;;;;;;17641;;;;;;;;:23;;17654:10;;;;-1:-1:-1;;;;;;17641:23:0;;;;;;;17686:10;;;17679:17;;;;;17615:93;17726:4;;;;-1:-1:-1;17421:325:0;-1:-1:-1;;;17421:325:0:o;17014:194::-;17108:15;:23;;;;;-1:-1:-1;;;;;17084:21:0;;;17108:23;17084:21;;;17108:23;17084:21;;:47;;17108:23;;;;-1:-1:-1;;;;;;17084:47:0;;;;;;;-1:-1:-1;17142:23:0;;;;:30;;;;;;;;;;17183:15;:17;;;;;;;17014:194::o;14279:1075::-;14362:8;;14414:933;14436:15;:22;14432:82;;-1:-1:-1;;14484:14:0;;;;;14432:82;14547:15;:22;14532:37;;;;:82;;;14605:9;;14590:11;:24;;14532:82;14528:276;;;14635:8;14678:11;14691:10;14703:14;;14719:12;14661:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14661:71:0;;;14651:82;;;;;;14646:88;;14635:99;;14766:15;:22;;;;14760:3;:28;;;;;;14753:35;;;;;;14528:276;14818:19;14840:13;:43;14854:15;14870:11;14854:28;;;;;;;;;;;;;;;;14840:43;;;;;;;;;;;14818:65;;14956:12;14942:5;:10;;;14924:5;:15;;;14902:19;;:37;:50;:66;14898:396;;15085:22;15113:15;15129:11;15113:28;;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;15085:57:0;;;;;;;;;15192:15;15208:22;;-1:-1:-1;;15208:26:0;;;15192:43;;;;;;;;;;;;;;15161:15;15177:11;15161:28;;;;;;;;;;;;;;;;;:74;15254:15;:24;;;;;-1:-1:-1;;15254:24:0;;;:::i;:::-;;14898:396;-1:-1:-1;15308:13:0;;14414:933;;184:92;221:14;;:::i;:::-;-1:-1:-1;255:13:0;;;;;;;;;263:1;255:13;;266:1;255:13;;;;184:92;:::o;1157:346::-;1220:16;;:::i;:::-;1249:20;;:::i;:::-;1291:3;;1280:14;;:8;1316:3;;;;1305:8;;;:14;1330:8;;;;:12;;;1429:1;1423:4;1280:14;-1:-1:-1;1408:3:0;1401:4;1396:3;1392:14;1387:50;1377:2;;1468:1;1465;1458:12;1377:2;1362:134;;;;;:::o;17800:444::-;6695:3;17903:7;17976:10;;;;;;;;;;;17903:7;;;;-1:-1:-1;;;;;17976:10:0;17997:109;-1:-1:-1;;;;;18004:14:0;;6695:3;18004:14;;;;:30;;;18030:4;-1:-1:-1;;;;;18022:12:0;:4;-1:-1:-1;;;;;18022:12:0;;;18004:30;17997:109;;;-1:-1:-1;;;;;18084:10:0;;;;;;;;;;;;;;;18058:4;;-1:-1:-1;18084:10:0;17997:109;;;-1:-1:-1;;;;;18120:14:0;;6695:3;18120:14;18116:121;;;6695:3;18167:5;18151:22;;;;;;;;18116:121;-1:-1:-1;18214:4:0;-1:-1:-1;18220:4:0;;-1:-1:-1;18206:19:0;;4469:39250;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;4469:39250:0;;;-1:-1:-1;;4469:39250:0:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4469:39250:0;;;-1:-1:-1;4469:39250:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4469:39250:0;-1:-1:-1;;;;;4469:39250:0;;;;;;;;;;;-1:-1:-1;4469:39250:0;;;;;;;-1:-1:-1;4469:39250:0;;;-1:-1:-1;4469:39250:0;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;4469:39250:0;;;-1:-1:-1;;4469:39250:0:o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;4469:39250:0;;;-1:-1:-1;;4469:39250:0:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4469:39250:0;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;4469:39250:0;;;-1:-1:-1;;4469:39250:0:o

Swarm Source

bzzr://3da425af19cd39c2bd6b04d126ac1204d6bea7d813db50dcbad8f39d51a78202
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading