Contract 0x83d3f4769a19f1b43337888b0290f5473cf508b2 2

Contract Overview

Balance:
0 GLMR

GLMR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcad7d7c7a29bc5fefaf69986f166db41f45f3c069a74b30b989f4a5e51777dc4Submit Answer ER...36702472023-05-30 2:59:062 hrs 1 min ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.013327595221
0xb8b8bdbb46f66514a06e979d87ddbc1adbd2a3dd7d4b126381fd60afe5bdee19Claim Multiple A...36697862023-05-30 1:24:063 hrs 36 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010920446283
0xc555124e381371b5eef55d1d8841694125b275e96f688f7db6270b4eac110075Claim Multiple A...36697862023-05-30 1:24:063 hrs 36 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010920446283
0x92325d3c22dc81fe6bc0cb5158f2d6c130ec9a763cdf520325c1b64651e0a15cClaim Multiple A...36697862023-05-30 1:24:063 hrs 36 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010921798192
0x5ec0646de8006ac84629191ed2aa1000ee50d14fc827e12767ff12eab7e28b6aClaim Multiple A...36697852023-05-30 1:23:543 hrs 36 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010907623639
0x566770beb814e7c391c48685fc4b83b846e55649a4520a8b29c8d5d4fe73f2dfClaim Multiple A...36697762023-05-30 1:22:063 hrs 38 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.01076797365
0x724d2dcb8e432abecf6017ae0858d29ed9f8e74f7dafba084e208a0d9df806d8Claim Multiple A...36697762023-05-30 1:22:063 hrs 38 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.01076797365
0x3b90c471eb54cafaa0c786884c3588aad7769c614387addded3a6c5515b3bf79Claim Multiple A...36697762023-05-30 1:22:063 hrs 38 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010766640782
0x96889fdf41ad37d982fe1ed93d3505b729ecb27a95da6f9b7255df1ff6beab57Claim Multiple A...36697762023-05-30 1:22:063 hrs 38 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010765307914
0x85a2b49b0a09c188cb659beaeeecba70bd3de7d762bdfc7f68ac7d5cf27c7e12Claim Multiple A...36697762023-05-30 1:22:063 hrs 38 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.01076797365
0x8765b455f98071a20d40948778cf4b99e199a2c3a9e05bcbb1ddeb6372e8e7ecClaim Multiple A...36697732023-05-30 1:21:303 hrs 39 mins ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.010724497129
0x101a05780ddff7a79a85a82e9095f13330f837a2810ca72583d66145a2d7b22dSubmit Answer ER...36678222023-05-29 18:44:0010 hrs 16 mins ago0x891da613d26ef051eca35ea337428c514d271c98 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.014806703776
0xb461670dba55eb6729125a3c77d55c726362c25eabde65efb5e4cf8198f4cfdaSubmit Answer ER...36638322023-05-29 5:09:2423 hrs 51 mins ago0x891da613d26ef051eca35ea337428c514d271c98 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.016674721357
0xca926e866216f846e62d49d043ae52326bf91d209022ee8ab4488c8039ef6b67Submit Answer ER...36581532023-05-28 9:47:001 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.0167097675
0x698530bfa76fab9ab7ee543349985fdfb857113393d43f5f2ee07b618850ea91Submit Answer ER...36581482023-05-28 9:46:001 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.016715684922
0x44b64cd47559c1dacd9c4cb91d1a7c5b4107f497c193f24a80a3c71004d4f97fSubmit Answer ER...36581462023-05-28 9:45:361 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.0167097675
0x9336da04051a7f8a058f43a0a081e13d0f1e7cebdc56c9d876eb6cb4f0cd9722Submit Answer ER...36581422023-05-28 9:44:481 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.0167097675
0xef498b56c73d9651f90600602f4ae5ede7450137705c3c480311ef76e0c0c794Submit Answer ER...36581402023-05-28 9:44:241 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.016721470097
0xcc86e288bc3d52b69a3d9e34a65abbec17a006339224b92eaca027a042e49010Submit Answer ER...36581362023-05-28 9:43:361 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.016719880757
0x68579af790fe9d5ab51f16e3f0c27e147877b9aedea76efe148575ff422e1355Submit Answer ER...36581342023-05-28 9:43:121 day 19 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.0167097675
0xccfa15b492275bc33ee98336e70dcf0b4ce73d885be7e32321c60072d7ce1766Submit Answer ER...36569802023-05-28 5:44:541 day 23 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.017159161006
0x7507aecd49eb6718069b9b33aaaa1fa1b73c504750ac7231920668363dfcc264Submit Answer ER...36569792023-05-28 5:44:421 day 23 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.017172033911
0x266e16abc287b6e60a70faebd7dc6b573df957f63976ecee32be43340930c8eeSubmit Answer ER...36568882023-05-28 5:25:541 day 23 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.017302378377
0x61aacc430aa8db0a06c5cab6952dc9aa98debcf4f49d138d9e2b08df5721330dSubmit Answer ER...36416392023-05-26 1:24:184 days 3 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.012512478313
0x2e9fa29417dcaf6dfe1cbc14eeb58135cdbbd0c0cfeaa1f9b600b8dc566b837aSubmit Answer ER...36416372023-05-26 1:23:544 days 3 hrs ago0x200f28a82317d84cd2932e4b6e7a9aa0376053d6 IN  0x83d3f4769a19f1b43337888b0290f5473cf508b20 GLMR0.012508779285
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RealitioERC20

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-02-03
*/

pragma solidity >0.4.24;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
pragma solidity >0.4.24;

/**
 * @title ReailtioSafeMath256
 * @dev Math operations with safety checks that throw on error
 */
library RealitioSafeMath256 {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}
pragma solidity >0.4.24;

/**
 * @title RealitioSafeMath32
 * @dev Math operations with safety checks that throw on error
 * @dev Copy of SafeMath but for uint32 instead of uint256
 * @dev Deleted functions we don't use
 */
library RealitioSafeMath32 {
  function add(uint32 a, uint32 b) internal pure returns (uint32) {
    uint32 c = a + b;
    assert(c >= a);
    return c;
  }
}
pragma solidity >0.4.18;


contract BalanceHolder {

    IERC20 public token;

    mapping(address => uint256) public balanceOf;

    event LogWithdraw(
        address indexed user,
        uint256 amount
    );

    function withdraw()
    public {
        uint256 bal = balanceOf[msg.sender];
        balanceOf[msg.sender] = 0;
        require(token.transfer(msg.sender, bal));
        emit LogWithdraw(msg.sender, bal);
    }

}
pragma solidity >0.4.24;


contract RealitioERC20 is BalanceHolder {

    using RealitioSafeMath256 for uint256;
    using RealitioSafeMath32 for uint32;

    address constant NULL_ADDRESS = address(0);

    // History hash when no history is created, or history has been cleared
    bytes32 constant NULL_HASH = bytes32(0);

    // An unitinalized finalize_ts for a question will indicate an unanswered question.
    uint32 constant UNANSWERED = 0;

    // An unanswered reveal_ts for a commitment will indicate that it does not exist.
    uint256 constant COMMITMENT_NON_EXISTENT = 0;

    // Commit->reveal timeout is 1/8 of the question timeout (rounded down).
    uint32 constant COMMITMENT_TIMEOUT_RATIO = 8;

    event LogSetQuestionFee(
        address arbitrator,
        uint256 amount
    );

    event LogNewTemplate(
        uint256 indexed template_id,
        address indexed user,
        string question_text
    );

    event LogNewQuestion(
        bytes32 indexed question_id,
        address indexed user,
        uint256 template_id,
        string question,
        bytes32 indexed content_hash,
        address arbitrator,
        uint32 timeout,
        uint32 opening_ts,
        uint256 nonce,
        uint256 created
    );

    event LogFundAnswerBounty(
        bytes32 indexed question_id,
        uint256 bounty_added,
        uint256 bounty,
        address indexed user
    );

    event LogNewAnswer(
        bytes32 answer,
        bytes32 indexed question_id,
        bytes32 history_hash,
        address indexed user,
        uint256 bond,
        uint256 ts,
        bool is_commitment
    );

    event LogAnswerReveal(
        bytes32 indexed question_id,
        address indexed user,
        bytes32 indexed answer_hash,
        bytes32 answer,
        uint256 nonce,
        uint256 bond
    );

    event LogNotifyOfArbitrationRequest(
        bytes32 indexed question_id,
        address indexed user
    );

    event LogFinalize(
        bytes32 indexed question_id,
        bytes32 indexed answer
    );

    event LogClaim(
        bytes32 indexed question_id,
        address indexed user,
        uint256 amount
    );

    struct Question {
        bytes32 content_hash;
        address arbitrator;
        uint32 opening_ts;
        uint32 timeout;
        uint32 finalize_ts;
        bool is_pending_arbitration;
        uint256 bounty;
        bytes32 best_answer;
        bytes32 history_hash;
        uint256 bond;
    }

    // Stored in a mapping indexed by commitment_id, a hash of commitment hash, question, bond.
    struct Commitment {
        uint32 reveal_ts;
        bool is_revealed;
        bytes32 revealed_answer;
    }

    // Only used when claiming more bonds than fits into a transaction
    // Stored in a mapping indexed by question_id.
    struct Claim {
        address payee;
        uint256 last_bond;
        uint256 queued_funds;
    }

    uint256 nextTemplateID = 0;
    mapping(uint256 => uint256) public templates;
    mapping(uint256 => bytes32) public template_hashes;
    mapping(bytes32 => Question) public questions;
    mapping(bytes32 => Claim) public question_claims;
    mapping(bytes32 => Commitment) public commitments;
    mapping(address => uint256) public arbitrator_question_fees;

    modifier onlyArbitrator(bytes32 question_id) {
        require(msg.sender == questions[question_id].arbitrator, "msg.sender must be arbitrator");
        _;
    }

    modifier stateAny() {
        _;
    }

    modifier stateNotCreated(bytes32 question_id) {
        require(questions[question_id].timeout == 0, "question must not exist");
        _;
    }

    modifier stateOpen(bytes32 question_id) {
        require(questions[question_id].timeout > 0, "question must exist");
        require(!questions[question_id].is_pending_arbitration, "question must not be pending arbitration");
        uint32 finalize_ts = questions[question_id].finalize_ts;
        require(finalize_ts == UNANSWERED || finalize_ts > uint32(now), "finalization deadline must not have passed");
        uint32 opening_ts = questions[question_id].opening_ts;
        require(opening_ts == 0 || opening_ts <= uint32(now), "opening date must have passed");
        _;
    }

    modifier statePendingArbitration(bytes32 question_id) {
        require(questions[question_id].is_pending_arbitration, "question must be pending arbitration");
        _;
    }

    modifier stateOpenOrPendingArbitration(bytes32 question_id) {
        require(questions[question_id].timeout > 0, "question must exist");
        uint32 finalize_ts = questions[question_id].finalize_ts;
        require(finalize_ts == UNANSWERED || finalize_ts > uint32(now), "finalization dealine must not have passed");
        uint32 opening_ts = questions[question_id].opening_ts;
        require(opening_ts == 0 || opening_ts <= uint32(now), "opening date must have passed");
        _;
    }

    modifier stateFinalized(bytes32 question_id) {
        require(isFinalized(question_id), "question must be finalized");
        _;
    }

    modifier bondMustDouble(bytes32 question_id, uint256 tokens) {
        require(tokens > 0, "bond must be positive");
        require(tokens >= (questions[question_id].bond.mul(2)), "bond must be double at least previous bond");
        _;
    }

    modifier previousBondMustNotBeatMaxPrevious(bytes32 question_id, uint256 max_previous) {
        if (max_previous > 0) {
            require(questions[question_id].bond <= max_previous, "bond must exceed max_previous");
        }
        _;
    }

    function setToken(IERC20 _token)
    public
    {
        require(token == IERC20(0x0), "Token can only be initialized once");
        token = _token;
    }

    /// @notice Constructor, sets up some initial templates
    /// @dev Creates some generalized templates for different question types used in the DApp.
    constructor()
    public {
        createTemplate('{"title": "%s", "type": "bool", "category": "%s", "lang": "%s"}');
        createTemplate('{"title": "%s", "type": "uint", "decimals": 18, "category": "%s", "lang": "%s"}');
        createTemplate('{"title": "%s", "type": "single-select", "outcomes": [%s], "category": "%s", "lang": "%s"}');
        createTemplate('{"title": "%s", "type": "multiple-select", "outcomes": [%s], "category": "%s", "lang": "%s"}');
        createTemplate('{"title": "%s", "type": "datetime", "category": "%s", "lang": "%s"}');
    }

    /// @notice Function for arbitrator to set an optional per-question fee.
    /// @dev The per-question fee, charged when a question is asked, is intended as an anti-spam measure.
    /// @param fee The fee to be charged by the arbitrator when a question is asked
    function setQuestionFee(uint256 fee)
        stateAny()
    external {
        arbitrator_question_fees[msg.sender] = fee;
        emit LogSetQuestionFee(msg.sender, fee);
    }

    /// @notice Create a reusable template, which should be a JSON document.
    /// Placeholders should use gettext() syntax, eg %s.
    /// @dev Template data is only stored in the event logs, but its block number is kept in contract storage.
    /// @param content The template content
    /// @return The ID of the newly-created template, which is created sequentially.
    function createTemplate(string memory content)
        stateAny()
    public returns (uint256) {
        uint256 id = nextTemplateID;
        templates[id] = block.number;
        template_hashes[id] = keccak256(abi.encodePacked(content));
        emit LogNewTemplate(id, msg.sender, content);
        nextTemplateID = id.add(1);
        return id;
    }

    /// @notice Create a new reusable template and use it to ask a question
    /// @dev Template data is only stored in the event logs, but its block number is kept in contract storage.
    /// @param content The template content
    /// @param question A string containing the parameters that will be passed into the template to make the question
    /// @param arbitrator The arbitration contract that will have the final word on the answer if there is a dispute
    /// @param timeout How long the contract should wait after the answer is changed before finalizing on that answer
    /// @param opening_ts If set, the earliest time it should be possible to answer the question.
    /// @param nonce A user-specified nonce used in the question ID. Change it to repeat a question.
    /// @return The ID of the newly-created template, which is created sequentially.
    function createTemplateAndAskQuestion(
        string memory content,
        string memory question, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce
    )
        // stateNotCreated is enforced by the internal _askQuestion
    public returns (bytes32) {
        uint256 template_id = createTemplate(content);
        return askQuestion(template_id, question, arbitrator, timeout, opening_ts, nonce);
    }

    /// @notice Ask a new question without a bounty and return the ID
    /// @dev Template data is only stored in the event logs, but its block number is kept in contract storage.
    /// @dev Calling without the token param will only work if there is no arbitrator-set question fee.
    /// @dev This has the same function signature as askQuestion() in the non-ERC20 version, which is optionally payable.
    /// @param template_id The ID number of the template the question will use
    /// @param question A string containing the parameters that will be passed into the template to make the question
    /// @param arbitrator The arbitration contract that will have the final word on the answer if there is a dispute
    /// @param timeout How long the contract should wait after the answer is changed before finalizing on that answer
    /// @param opening_ts If set, the earliest time it should be possible to answer the question.
    /// @param nonce A user-specified nonce used in the question ID. Change it to repeat a question.
    /// @return The ID of the newly-created question, created deterministically.
    function askQuestion(uint256 template_id, string memory question, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce)
        // stateNotCreated is enforced by the internal _askQuestion
    public returns (bytes32) {

        require(templates[template_id] > 0, "template must exist");

        bytes32 content_hash = keccak256(abi.encodePacked(template_id, opening_ts, question));
        bytes32 question_id = keccak256(abi.encodePacked(content_hash, arbitrator, timeout, msg.sender, nonce));

        _askQuestion(question_id, content_hash, arbitrator, timeout, opening_ts, 0);
        emit LogNewQuestion(question_id, msg.sender, template_id, question, content_hash, arbitrator, timeout, opening_ts, nonce, now);

        return question_id;
    }

    /// @notice Ask a new question with a bounty and return the ID
    /// @dev Template data is only stored in the event logs, but its block number is kept in contract storage.
    /// @param template_id The ID number of the template the question will use
    /// @param question A string containing the parameters that will be passed into the template to make the question
    /// @param arbitrator The arbitration contract that will have the final word on the answer if there is a dispute
    /// @param timeout How long the contract should wait after the answer is changed before finalizing on that answer
    /// @param opening_ts If set, the earliest time it should be possible to answer the question.
    /// @param nonce A user-specified nonce used in the question ID. Change it to repeat a question.
    /// @param tokens The combined initial question bounty and question fee
    /// @return The ID of the newly-created question, created deterministically.
    function askQuestionERC20(uint256 template_id, string memory question, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 nonce, uint256 tokens)
        // stateNotCreated is enforced by the internal _askQuestion
    public returns (bytes32) {

        _deductTokensOrRevert(tokens);

        require(templates[template_id] > 0, "template must exist");

        bytes32 content_hash = keccak256(abi.encodePacked(template_id, opening_ts, question));
        bytes32 question_id = keccak256(abi.encodePacked(content_hash, arbitrator, timeout, msg.sender, nonce));

        _askQuestion(question_id, content_hash, arbitrator, timeout, opening_ts, tokens);
        emit LogNewQuestion(question_id, msg.sender, template_id, question, content_hash, arbitrator, timeout, opening_ts, nonce, now);

        return question_id;
    }

    function _deductTokensOrRevert(uint256 tokens)
    internal {

        if (tokens == 0) {
            return;
        }

        uint256 bal = balanceOf[msg.sender];

        // Deduct any tokens you have in your internal balance first
        if (bal > 0) {
            if (bal >= tokens) {
                balanceOf[msg.sender] = bal.sub(tokens);
                return;
            } else {
                tokens = tokens.sub(bal);
                balanceOf[msg.sender] = 0;
            }
        }
        // Now we need to charge the rest from
        require(token.transferFrom(msg.sender, address(this), tokens), "Transfer of tokens failed, insufficient approved balance?");
        return;

    }

    function _askQuestion(bytes32 question_id, bytes32 content_hash, address arbitrator, uint32 timeout, uint32 opening_ts, uint256 tokens)
        stateNotCreated(question_id)
    internal {

        uint256 bounty = tokens;

        // A timeout of 0 makes no sense, and we will use this to check existence
        require(timeout > 0, "timeout must be positive");
        require(timeout < 365 days, "timeout must be less than 365 days");
        require(arbitrator != NULL_ADDRESS, "arbitrator must be set");

        // The arbitrator can set a fee for asking a question.
        // This is intended as an anti-spam defence.
        // The fee is waived if the arbitrator is asking the question.
        // This allows them to set an impossibly high fee and make users proxy the question through them.
        // This would allow more sophisticated pricing, question whitelisting etc.
        if (msg.sender != arbitrator) {
            uint256 question_fee = arbitrator_question_fees[arbitrator];
            require(bounty >= question_fee, "Tokens provided must cover question fee");
            bounty = bounty.sub(question_fee);
            balanceOf[arbitrator] = balanceOf[arbitrator].add(question_fee);
        }

        questions[question_id].content_hash = content_hash;
        questions[question_id].arbitrator = arbitrator;
        questions[question_id].opening_ts = opening_ts;
        questions[question_id].timeout = timeout;
        questions[question_id].bounty = bounty;

    }

    /// @notice Add funds to the bounty for a question
    /// @dev Add bounty funds after the initial question creation. Can be done any time until the question is finalized.
    /// @param question_id The ID of the question you wish to fund
    /// @param tokens The number of tokens to fund
    function fundAnswerBountyERC20(bytes32 question_id, uint256 tokens)
        stateOpen(question_id)
    external {
        _deductTokensOrRevert(tokens);
        questions[question_id].bounty = questions[question_id].bounty.add(tokens);
        emit LogFundAnswerBounty(question_id, tokens, questions[question_id].bounty, msg.sender);
    }

    /// @notice Submit an answer for a question.
    /// @dev Adds the answer to the history and updates the current "best" answer.
    /// May be subject to front-running attacks; Substitute submitAnswerCommitment()->submitAnswerReveal() to prevent them.
    /// @param question_id The ID of the question
    /// @param answer The answer, encoded into bytes32
    /// @param max_previous If specified, reverts if a bond higher than this was submitted after you sent your transaction.
    /// @param tokens The amount of tokens to submit
    function submitAnswerERC20(bytes32 question_id, bytes32 answer, uint256 max_previous, uint256 tokens)
        stateOpen(question_id)
        bondMustDouble(question_id, tokens)
        previousBondMustNotBeatMaxPrevious(question_id, max_previous)
    external {
        _deductTokensOrRevert(tokens);
        _addAnswerToHistory(question_id, answer, msg.sender, tokens, false);
        _updateCurrentAnswer(question_id, answer, questions[question_id].timeout);
    }

    // @notice Verify and store a commitment, including an appropriate timeout
    // @param question_id The ID of the question to store
    // @param commitment The ID of the commitment
    function _storeCommitment(bytes32 question_id, bytes32 commitment_id)
    internal
    {
        require(commitments[commitment_id].reveal_ts == COMMITMENT_NON_EXISTENT, "commitment must not already exist");

        uint32 commitment_timeout = questions[question_id].timeout / COMMITMENT_TIMEOUT_RATIO;
        commitments[commitment_id].reveal_ts = uint32(now).add(commitment_timeout);
    }

    /// @notice Submit the hash of an answer, laying your claim to that answer if you reveal it in a subsequent transaction.
    /// @dev Creates a hash, commitment_id, uniquely identifying this answer, to this question, with this bond.
    /// The commitment_id is stored in the answer history where the answer would normally go.
    /// Does not update the current best answer - this is left to the later submitAnswerReveal() transaction.
    /// @param question_id The ID of the question
    /// @param answer_hash The hash of your answer, plus a nonce that you will later reveal
    /// @param max_previous If specified, reverts if a bond higher than this was submitted after you sent your transaction.
    /// @param _answerer If specified, the address to be given as the question answerer. Defaults to the sender.
    /// @param tokens Number of tokens sent
    /// @dev Specifying the answerer is useful if you want to delegate the commit-and-reveal to a third-party.
    function submitAnswerCommitmentERC20(bytes32 question_id, bytes32 answer_hash, uint256 max_previous, address _answerer, uint256 tokens)
        stateOpen(question_id)
        bondMustDouble(question_id, tokens)
        previousBondMustNotBeatMaxPrevious(question_id, max_previous)
    external {

        _deductTokensOrRevert(tokens);

        bytes32 commitment_id = keccak256(abi.encodePacked(question_id, answer_hash, tokens));
        address answerer = (_answerer == NULL_ADDRESS) ? msg.sender : _answerer;

        _storeCommitment(question_id, commitment_id);
        _addAnswerToHistory(question_id, commitment_id, answerer, tokens, true);

    }

    /// @notice Submit the answer whose hash you sent in a previous submitAnswerCommitment() transaction
    /// @dev Checks the parameters supplied recreate an existing commitment, and stores the revealed answer
    /// Updates the current answer unless someone has since supplied a new answer with a higher bond
    /// msg.sender is intentionally not restricted to the user who originally sent the commitment;
    /// For example, the user may want to provide the answer+nonce to a third-party service and let them send the tx
    /// NB If we are pending arbitration, it will be up to the arbitrator to wait and see any outstanding reveal is sent
    /// @param question_id The ID of the question
    /// @param answer The answer, encoded as bytes32
    /// @param nonce The nonce that, combined with the answer, recreates the answer_hash you gave in submitAnswerCommitment()
    /// @param bond The bond that you paid in your submitAnswerCommitment() transaction
    function submitAnswerReveal(bytes32 question_id, bytes32 answer, uint256 nonce, uint256 bond)
        stateOpenOrPendingArbitration(question_id)
    external {

        bytes32 answer_hash = keccak256(abi.encodePacked(answer, nonce));
        bytes32 commitment_id = keccak256(abi.encodePacked(question_id, answer_hash, bond));

        require(!commitments[commitment_id].is_revealed, "commitment must not have been revealed yet");
        require(commitments[commitment_id].reveal_ts > uint32(now), "reveal deadline must not have passed");

        commitments[commitment_id].revealed_answer = answer;
        commitments[commitment_id].is_revealed = true;

        if (bond == questions[question_id].bond) {
            _updateCurrentAnswer(question_id, answer, questions[question_id].timeout);
        }

        emit LogAnswerReveal(question_id, msg.sender, answer_hash, answer, nonce, bond);

    }

    function _addAnswerToHistory(bytes32 question_id, bytes32 answer_or_commitment_id, address answerer, uint256 bond, bool is_commitment)
    internal
    {
        bytes32 new_history_hash = keccak256(abi.encodePacked(questions[question_id].history_hash, answer_or_commitment_id, bond, answerer, is_commitment));

        // Update the current bond level, if there's a bond (ie anything except arbitration)
        if (bond > 0) {
            questions[question_id].bond = bond;
        }
        questions[question_id].history_hash = new_history_hash;

        emit LogNewAnswer(answer_or_commitment_id, question_id, new_history_hash, answerer, bond, now, is_commitment);
    }

    function _updateCurrentAnswer(bytes32 question_id, bytes32 answer, uint32 timeout_secs)
    internal {
        questions[question_id].best_answer = answer;
        questions[question_id].finalize_ts = uint32(now).add(timeout_secs);
    }

    /// @notice Notify the contract that the arbitrator has been paid for a question, freezing it pending their decision.
    /// @dev The arbitrator contract is trusted to only call this if they've been paid, and tell us who paid them.
    /// @param question_id The ID of the question
    /// @param requester The account that requested arbitration
    /// @param max_previous If specified, reverts if a bond higher than this was submitted after you sent your transaction.
    function notifyOfArbitrationRequest(bytes32 question_id, address requester, uint256 max_previous)
        onlyArbitrator(question_id)
        stateOpen(question_id)
        previousBondMustNotBeatMaxPrevious(question_id, max_previous)
    external {
        require(questions[question_id].bond > 0, "Question must already have an answer when arbitration is requested");
        questions[question_id].is_pending_arbitration = true;
        emit LogNotifyOfArbitrationRequest(question_id, requester);
    }

    /// @notice Submit the answer for a question, for use by the arbitrator.
    /// @dev Doesn't require (or allow) a bond.
    /// If the current final answer is correct, the account should be whoever submitted it.
    /// If the current final answer is wrong, the account should be whoever paid for arbitration.
    /// However, the answerer stipulations are not enforced by the contract.
    /// @param question_id The ID of the question
    /// @param answer The answer, encoded into bytes32
    /// @param answerer The account credited with this answer for the purpose of bond claims
    function submitAnswerByArbitrator(bytes32 question_id, bytes32 answer, address answerer)
        onlyArbitrator(question_id)
        statePendingArbitration(question_id)
    external {

        require(answerer != NULL_ADDRESS, "answerer must be provided");
        emit LogFinalize(question_id, answer);

        questions[question_id].is_pending_arbitration = false;
        _addAnswerToHistory(question_id, answer, answerer, 0, false);
        _updateCurrentAnswer(question_id, answer, 0);

    }

    /// @notice Report whether the answer to the specified question is finalized
    /// @param question_id The ID of the question
    /// @return Return true if finalized
    function isFinalized(bytes32 question_id)
    view public returns (bool) {
        uint32 finalize_ts = questions[question_id].finalize_ts;
        return ( !questions[question_id].is_pending_arbitration && (finalize_ts > UNANSWERED) && (finalize_ts <= uint32(now)) );
    }

    /// @notice (Deprecated) Return the final answer to the specified question, or revert if there isn't one
    /// @param question_id The ID of the question
    /// @return The answer formatted as a bytes32
    function getFinalAnswer(bytes32 question_id)
        stateFinalized(question_id)
    external view returns (bytes32) {
        return questions[question_id].best_answer;
    }

    /// @notice Return the final answer to the specified question, or revert if there isn't one
    /// @param question_id The ID of the question
    /// @return The answer formatted as a bytes32
    function resultFor(bytes32 question_id)
        stateFinalized(question_id)
    external view returns (bytes32) {
        return questions[question_id].best_answer;
    }


    /// @notice Return the final answer to the specified question, provided it matches the specified criteria.
    /// @dev Reverts if the question is not finalized, or if it does not match the specified criteria.
    /// @param question_id The ID of the question
    /// @param content_hash The hash of the question content (template ID + opening time + question parameter string)
    /// @param arbitrator The arbitrator chosen for the question (regardless of whether they are asked to arbitrate)
    /// @param min_timeout The timeout set in the initial question settings must be this high or higher
    /// @param min_bond The bond sent with the final answer must be this high or higher
    /// @return The answer formatted as a bytes32
    function getFinalAnswerIfMatches(
        bytes32 question_id,
        bytes32 content_hash, address arbitrator, uint32 min_timeout, uint256 min_bond
    )
        stateFinalized(question_id)
    external view returns (bytes32) {
        require(content_hash == questions[question_id].content_hash, "content hash must match");
        require(arbitrator == questions[question_id].arbitrator, "arbitrator must match");
        require(min_timeout <= questions[question_id].timeout, "timeout must be long enough");
        require(min_bond <= questions[question_id].bond, "bond must be high enough");
        return questions[question_id].best_answer;
    }

    /// @notice Assigns the winnings (bounty and bonds) to everyone who gave the accepted answer
    /// Caller must provide the answer history, in reverse order
    /// @dev Works up the chain and assign bonds to the person who gave the right answer
    /// If someone gave the winning answer earlier, they must get paid from the higher bond
    /// That means we can't pay out the bond added at n until we have looked at n-1
    /// The first answer is authenticated by checking against the stored history_hash.
    /// One of the inputs to history_hash is the history_hash before it, so we use that to authenticate the next entry, etc
    /// Once we get to a null hash we'll know we're done and there are no more answers.
    /// Usually you would call the whole thing in a single transaction, but if not then the data is persisted to pick up later.
    /// @param question_id The ID of the question
    /// @param history_hashes Second-last-to-first, the hash of each history entry. (Final one should be empty).
    /// @param addrs Last-to-first, the address of each answerer or commitment sender
    /// @param bonds Last-to-first, the bond supplied with each answer or commitment
    /// @param answers Last-to-first, each answer supplied, or commitment ID if the answer was supplied with commit->reveal
    function claimWinnings(
        bytes32 question_id,
        bytes32[] memory history_hashes, address[] memory addrs, uint256[] memory bonds, bytes32[] memory answers
    )
        stateFinalized(question_id)
    public {

        require(history_hashes.length > 0, "at least one history hash entry must be provided");

        // These are only set if we split our claim over multiple transactions.
        address payee = question_claims[question_id].payee;
        uint256 last_bond = question_claims[question_id].last_bond;
        uint256 queued_funds = question_claims[question_id].queued_funds;

        // Starts as the hash of the final answer submitted. It'll be cleared when we're done.
        // If we're splitting the claim over multiple transactions, it'll be the hash where we left off last time
        bytes32 last_history_hash = questions[question_id].history_hash;

        bytes32 best_answer = questions[question_id].best_answer;

        uint256 i;
        for (i = 0; i < history_hashes.length; i++) {

            // Check input against the history hash, and see which of 2 possible values of is_commitment fits.
            bool is_commitment = _verifyHistoryInputOrRevert(last_history_hash, history_hashes[i], answers[i], bonds[i], addrs[i]);

            queued_funds = queued_funds.add(last_bond);
            (queued_funds, payee) = _processHistoryItem(
                question_id, best_answer, queued_funds, payee,
                addrs[i], bonds[i], answers[i], is_commitment);

            // Line the bond up for next time, when it will be added to somebody's queued_funds
            last_bond = bonds[i];
            last_history_hash = history_hashes[i];

        }

        if (last_history_hash != NULL_HASH) {
            // We haven't yet got to the null hash (1st answer), ie the caller didn't supply the full answer chain.
            // Persist the details so we can pick up later where we left off later.

            // If we know who to pay we can go ahead and pay them out, only keeping back last_bond
            // (We always know who to pay unless all we saw were unrevealed commits)
            if (payee != NULL_ADDRESS) {
                _payPayee(question_id, payee, queued_funds);
                queued_funds = 0;
            }

            question_claims[question_id].payee = payee;
            question_claims[question_id].last_bond = last_bond;
            question_claims[question_id].queued_funds = queued_funds;
        } else {
            // There is nothing left below us so the payee can keep what remains
            _payPayee(question_id, payee, queued_funds.add(last_bond));
            delete question_claims[question_id];
        }

        questions[question_id].history_hash = last_history_hash;

    }

    function _payPayee(bytes32 question_id, address payee, uint256 value)
    internal {
        balanceOf[payee] = balanceOf[payee].add(value);
        emit LogClaim(question_id, payee, value);
    }

    function _verifyHistoryInputOrRevert(
        bytes32 last_history_hash,
        bytes32 history_hash, bytes32 answer, uint256 bond, address addr
    )
    internal pure returns (bool) {
        if (last_history_hash == keccak256(abi.encodePacked(history_hash, answer, bond, addr, true)) ) {
            return true;
        }
        if (last_history_hash == keccak256(abi.encodePacked(history_hash, answer, bond, addr, false)) ) {
            return false;
        }
        revert("History input provided did not match the expected hash");
    }

    function _processHistoryItem(
        bytes32 question_id, bytes32 best_answer,
        uint256 queued_funds, address payee,
        address addr, uint256 bond, bytes32 answer, bool is_commitment
    )
    internal returns (uint256, address) {

        // For commit-and-reveal, the answer history holds the commitment ID instead of the answer.
        // We look at the referenced commitment ID and switch in the actual answer.
        if (is_commitment) {
            bytes32 commitment_id = answer;
            // If it's a commit but it hasn't been revealed, it will always be considered wrong.
            if (!commitments[commitment_id].is_revealed) {
                delete commitments[commitment_id];
                return (queued_funds, payee);
            } else {
                answer = commitments[commitment_id].revealed_answer;
                delete commitments[commitment_id];
            }
        }

        if (answer == best_answer) {

            if (payee == NULL_ADDRESS) {

                // The entry is for the first payee we come to, ie the winner.
                // They get the question bounty.
                payee = addr;
                queued_funds = queued_funds.add(questions[question_id].bounty);
                questions[question_id].bounty = 0;

            } else if (addr != payee) {

                // Answerer has changed, ie we found someone lower down who needs to be paid

                // The lower answerer will take over receiving bonds from higher answerer.
                // They should also be paid the takeover fee, which is set at a rate equivalent to their bond.
                // (This is our arbitrary rule, to give consistent right-answerers a defence against high-rollers.)

                // There should be enough for the fee, but if not, take what we have.
                // There's an edge case involving weird arbitrator behaviour where we may be short.
                uint256 answer_takeover_fee = (queued_funds >= bond) ? bond : queued_funds;

                // Settle up with the old (higher-bonded) payee
                _payPayee(question_id, payee, queued_funds.sub(answer_takeover_fee));

                // Now start queued_funds again for the new (lower-bonded) payee
                payee = addr;
                queued_funds = answer_takeover_fee;

            }

        }

        return (queued_funds, payee);

    }

    /// @notice Convenience function to assign bounties/bonds for multiple questions in one go, then withdraw all your funds.
    /// Caller must provide the answer history for each question, in reverse order
    /// @dev Can be called by anyone to assign bonds/bounties, but funds are only withdrawn for the user making the call.
    /// @param question_ids The IDs of the questions you want to claim for
    /// @param lengths The number of history entries you will supply for each question ID
    /// @param hist_hashes In a single list for all supplied questions, the hash of each history entry.
    /// @param addrs In a single list for all supplied questions, the address of each answerer or commitment sender
    /// @param bonds In a single list for all supplied questions, the bond supplied with each answer or commitment
    /// @param answers In a single list for all supplied questions, each answer supplied, or commitment ID
    function claimMultipleAndWithdrawBalance(
        bytes32[] memory question_ids, uint256[] memory lengths,
        bytes32[] memory hist_hashes, address[] memory addrs, uint256[] memory bonds, bytes32[] memory answers
    )
        stateAny() // The finalization checks are done in the claimWinnings function
    public {

        uint256 qi;
        uint256 i;
        for (qi = 0; qi < question_ids.length; qi++) {
            bytes32 qid = question_ids[qi];
            uint256 ln = lengths[qi];
            bytes32[] memory hh = new bytes32[](ln);
            address[] memory ad = new address[](ln);
            uint256[] memory bo = new uint256[](ln);
            bytes32[] memory an = new bytes32[](ln);
            uint256 j;
            for (j = 0; j < ln; j++) {
                hh[j] = hist_hashes[i];
                ad[j] = addrs[i];
                bo[j] = bonds[i];
                an[j] = answers[i];
                i++;
            }
            claimWinnings(qid, hh, ad, bo, an);
        }
        withdraw();
    }

    /// @notice Returns the questions's content hash, identifying the question content
    /// @param question_id The ID of the question
    function getContentHash(bytes32 question_id)
    public view returns(bytes32) {
        return questions[question_id].content_hash;
    }

    /// @notice Returns the arbitrator address for the question
    /// @param question_id The ID of the question
    function getArbitrator(bytes32 question_id)
    public view returns(address) {
        return questions[question_id].arbitrator;
    }

    /// @notice Returns the timestamp when the question can first be answered
    /// @param question_id The ID of the question
    function getOpeningTS(bytes32 question_id)
    public view returns(uint32) {
        return questions[question_id].opening_ts;
    }

    /// @notice Returns the timeout in seconds used after each answer
    /// @param question_id The ID of the question
    function getTimeout(bytes32 question_id)
    public view returns(uint32) {
        return questions[question_id].timeout;
    }

    /// @notice Returns the timestamp at which the question will be/was finalized
    /// @param question_id The ID of the question
    function getFinalizeTS(bytes32 question_id)
    public view returns(uint32) {
        return questions[question_id].finalize_ts;
    }

    /// @notice Returns whether the question is pending arbitration
    /// @param question_id The ID of the question
    function isPendingArbitration(bytes32 question_id)
    public view returns(bool) {
        return questions[question_id].is_pending_arbitration;
    }

    /// @notice Returns the current total unclaimed bounty
    /// @dev Set back to zero once the bounty has been claimed
    /// @param question_id The ID of the question
    function getBounty(bytes32 question_id)
    public view returns(uint256) {
        return questions[question_id].bounty;
    }

    /// @notice Returns the current best answer
    /// @param question_id The ID of the question
    function getBestAnswer(bytes32 question_id)
    public view returns(bytes32) {
        return questions[question_id].best_answer;
    }

    /// @notice Returns the history hash of the question
    /// @param question_id The ID of the question
    /// @dev Updated on each answer, then rewound as each is claimed
    function getHistoryHash(bytes32 question_id)
    public view returns(bytes32) {
        return questions[question_id].history_hash;
    }

    /// @notice Returns the highest bond posted so far for a question
    /// @param question_id The ID of the question
    function getBond(bytes32 question_id)
    public view returns(uint256) {
        return questions[question_id].bond;
    }

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"bytes32","name":"answer_hash","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"answer","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"LogAnswerReveal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"answer","type":"bytes32"}],"name":"LogFinalize","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"bounty_added","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bounty","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogFundAnswerBounty","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"answer","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"history_hash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"},{"indexed":false,"internalType":"bool","name":"is_commitment","type":"bool"}],"name":"LogNewAnswer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"template_id","type":"uint256"},{"indexed":false,"internalType":"string","name":"question","type":"string"},{"indexed":true,"internalType":"bytes32","name":"content_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"arbitrator","type":"address"},{"indexed":false,"internalType":"uint32","name":"timeout","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"opening_ts","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"}],"name":"LogNewQuestion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"template_id","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"string","name":"question_text","type":"string"}],"name":"LogNewTemplate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"question_id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogNotifyOfArbitrationRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"arbitrator","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSetQuestionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"arbitrator_question_fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"template_id","type":"uint256"},{"internalType":"string","name":"question","type":"string"},{"internalType":"address","name":"arbitrator","type":"address"},{"internalType":"uint32","name":"timeout","type":"uint32"},{"internalType":"uint32","name":"opening_ts","type":"uint32"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"askQuestion","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"template_id","type":"uint256"},{"internalType":"string","name":"question","type":"string"},{"internalType":"address","name":"arbitrator","type":"address"},{"internalType":"uint32","name":"timeout","type":"uint32"},{"internalType":"uint32","name":"opening_ts","type":"uint32"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"askQuestionERC20","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"question_ids","type":"bytes32[]"},{"internalType":"uint256[]","name":"lengths","type":"uint256[]"},{"internalType":"bytes32[]","name":"hist_hashes","type":"bytes32[]"},{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"bonds","type":"uint256[]"},{"internalType":"bytes32[]","name":"answers","type":"bytes32[]"}],"name":"claimMultipleAndWithdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32[]","name":"history_hashes","type":"bytes32[]"},{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"bonds","type":"uint256[]"},{"internalType":"bytes32[]","name":"answers","type":"bytes32[]"}],"name":"claimWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"commitments","outputs":[{"internalType":"uint32","name":"reveal_ts","type":"uint32"},{"internalType":"bool","name":"is_revealed","type":"bool"},{"internalType":"bytes32","name":"revealed_answer","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"content","type":"string"}],"name":"createTemplate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"content","type":"string"},{"internalType":"string","name":"question","type":"string"},{"internalType":"address","name":"arbitrator","type":"address"},{"internalType":"uint32","name":"timeout","type":"uint32"},{"internalType":"uint32","name":"opening_ts","type":"uint32"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"createTemplateAndAskQuestion","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"fundAnswerBountyERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getArbitrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getBestAnswer","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getBond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getBounty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getContentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getFinalAnswer","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32","name":"content_hash","type":"bytes32"},{"internalType":"address","name":"arbitrator","type":"address"},{"internalType":"uint32","name":"min_timeout","type":"uint32"},{"internalType":"uint256","name":"min_bond","type":"uint256"}],"name":"getFinalAnswerIfMatches","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getFinalizeTS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getHistoryHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getOpeningTS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"getTimeout","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"isFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"isPendingArbitration","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"max_previous","type":"uint256"}],"name":"notifyOfArbitrationRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"question_claims","outputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"last_bond","type":"uint256"},{"internalType":"uint256","name":"queued_funds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"questions","outputs":[{"internalType":"bytes32","name":"content_hash","type":"bytes32"},{"internalType":"address","name":"arbitrator","type":"address"},{"internalType":"uint32","name":"opening_ts","type":"uint32"},{"internalType":"uint32","name":"timeout","type":"uint32"},{"internalType":"uint32","name":"finalize_ts","type":"uint32"},{"internalType":"bool","name":"is_pending_arbitration","type":"bool"},{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"bytes32","name":"best_answer","type":"bytes32"},{"internalType":"bytes32","name":"history_hash","type":"bytes32"},{"internalType":"uint256","name":"bond","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"}],"name":"resultFor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setQuestionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32","name":"answer","type":"bytes32"},{"internalType":"address","name":"answerer","type":"address"}],"name":"submitAnswerByArbitrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32","name":"answer_hash","type":"bytes32"},{"internalType":"uint256","name":"max_previous","type":"uint256"},{"internalType":"address","name":"_answerer","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"submitAnswerCommitmentERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32","name":"answer","type":"bytes32"},{"internalType":"uint256","name":"max_previous","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"submitAnswerERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"question_id","type":"bytes32"},{"internalType":"bytes32","name":"answer","type":"bytes32"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"bond","type":"uint256"}],"name":"submitAnswerReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"template_hashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"templates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006002553480156200001657600080fd5b50620000446040518060600160405280603f81526020016200400f603f91396001600160e01b036200010316565b50620000726040518060800160405280604f8152602001620040eb604f91396001600160e01b036200010316565b50620000a06040518060800160405280605a815260200162004091605a91396001600160e01b036200010316565b50620000ce6040518060800160405280605c815260200162003fb3605c91396001600160e01b036200010316565b50620000fc6040518060800160405280604381526020016200404e604391396001600160e01b036200010316565b5062000285565b60025460008181526003602090815260408083204390555184519293928592918201918291908401908083835b60208310620001515780518252601f19909201916020918201910162000130565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206004600083815260200190815260200160002081905550336001600160a01b0316817fb87fb721c0a557bb8dff89a86796466931d82ba530a66a239263eb8735ade2e4856040518080602001828103825283818151815260200191508051906020019080838360005b838110156200020f578181015183820152602001620001f5565b50505050905090810190601f1680156200023d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a3620002656001826200026e60201b620031c51790919060201c565b60025592915050565b6000828201838110156200027e57fe5b9392505050565b613d1e80620002956000396000f3fe608060405234801561001057600080fd5b50600436106101b75760003560e01c80631101a0fd146101bc578063128b7a47146103ec57806312a203c31461040f578063144fa6d7146104655780632417395c1461048b5780632518904c146104a857806326d6c97b146104e157806328828b1e146104fe5780632f998a6f146108295780633ccfd60b146108585780634dc266b4146108605780634df6ca2a1461088f5780634e60f883146108ac57806351577ea9146108c9578063590158a7146108e65780636fa427421461092b57806370a0823114610951578063762c38fd146109775780637f8d429e14610a4657806382ffa9f714610a77578063839df94514610a9457806383bf460914610ad65780638d552d4614610b7a578063924532fb14610b9757806395addb9014610bb45780639e63fa6a14610c355780639f1025c614610c6b578063a1130d0414610c88578063a462fb7b14610dd5578063ac7b2a5f14610df2578063acae8f4e14610e30578063bc52565214610e4d578063d09cc57e14610dd5578063d4876b9f14610e6a578063f6a94ecb14610f3f578063fc0c546a14610f71578063fe92049d14610f79575b600080fd5b6103ea600480360360a08110156101d257600080fd5b81359190810190604081016020820135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460208302840111600160201b8311171561022657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460208302840111600160201b831117156102a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102f757600080fd5b82018360208201111561030957600080fd5b803590602001918460208302840111600160201b8311171561032a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fab945050505050565b005b6103ea6004803603604081101561040257600080fd5b508035906020013561123a565b610453600480360360a081101561042557600080fd5b508035906020810135906001600160a01b036040820135169063ffffffff6060820135169060800135611459565b60408051918252519081900360200190f35b6103ea6004803603602081101561047b57600080fd5b50356001600160a01b031661165a565b610453600480360360208110156104a157600080fd5b50356116c4565b6104c5600480360360208110156104be57600080fd5b50356116d9565b604080516001600160a01b039092168252519081900360200190f35b610453600480360360208110156104f757600080fd5b50356116f7565b6103ea600480360360c081101561051457600080fd5b810190602081018135600160201b81111561052e57600080fd5b82018360208201111561054057600080fd5b803590602001918460208302840111600160201b8311171561056157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105b057600080fd5b8201836020820111156105c257600080fd5b803590602001918460208302840111600160201b831117156105e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561063257600080fd5b82018360208201111561064457600080fd5b803590602001918460208302840111600160201b8311171561066557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156106b457600080fd5b8201836020820111156106c657600080fd5b803590602001918460208302840111600160201b831117156106e757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561073657600080fd5b82018360208201111561074857600080fd5b803590602001918460208302840111600160201b8311171561076957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107b857600080fd5b8201836020820111156107ca57600080fd5b803590602001918460208302840111600160201b831117156107eb57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061170c945050505050565b6103ea6004803603608081101561083f57600080fd5b5080359060208101359060408101359060600135611911565b6103ea611c07565b6103ea6004803603608081101561087657600080fd5b5080359060208101359060408101359060600135611ce0565b6103ea600480360360208110156108a557600080fd5b5035611fe8565b610453600480360360208110156108c257600080fd5b5035612037565b610453600480360360208110156108df57600080fd5b5035612049565b610903600480360360208110156108fc57600080fd5b503561205b565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b6104536004803603602081101561094157600080fd5b50356001600160a01b0316612086565b6104536004803603602081101561096757600080fd5b50356001600160a01b0316612098565b610453600480360360c081101561098d57600080fd5b81359190810190604081016020820135600160201b8111156109ae57600080fd5b8201836020820111156109c057600080fd5b803590602001918460018302840111600160201b831117156109e157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505063ffffffff602083013581169260408101359091169150606001356120aa565b610a6360048036036020811015610a5c57600080fd5b503561231d565b604080519115158252519081900360200190f35b61045360048036036020811015610a8d57600080fd5b5035612379565b610ab160048036036020811015610aaa57600080fd5b503561238f565b6040805163ffffffff9094168452911515602084015282820152519081900360600190f35b61045360048036036020811015610aec57600080fd5b810190602081018135600160201b811115610b0657600080fd5b820183602082011115610b1857600080fd5b803590602001918460018302840111600160201b83111715610b3957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506123bb945050505050565b61045360048036036020811015610b9057600080fd5b5035612517565b610a6360048036036020811015610bad57600080fd5b503561252c565b610bd160048036036020811015610bca57600080fd5b5035612544565b604080519a8b526001600160a01b0390991660208b015263ffffffff9788168a8a015295871660608a015293909516608088015290151560a087015260c086015260e085019290925261010084019190915261012083015251908190036101400190f35b610c5260048036036020811015610c4b57600080fd5b50356125b0565b6040805163ffffffff9092168252519081900360200190f35b610c5260048036036020811015610c8157600080fd5b50356125d2565b610453600480360360c0811015610c9e57600080fd5b810190602081018135600160201b811115610cb857600080fd5b820183602082011115610cca57600080fd5b803590602001918460018302840111600160201b83111715610ceb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610d3d57600080fd5b820183602082011115610d4f57600080fd5b803590602001918460018302840111600160201b83111715610d7057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505063ffffffff602083013581169260408101359091169150606001356125f4565b61045360048036036020811015610deb57600080fd5b503561261c565b6103ea600480360360a0811015610e0857600080fd5b508035906020810135906040810135906001600160a01b03606082013516906080013561267e565b610c5260048036036020811015610e4657600080fd5b50356129a1565b61045360048036036020811015610e6357600080fd5b50356129c3565b610453600480360360e0811015610e8057600080fd5b81359190810190604081016020820135600160201b811115610ea157600080fd5b820183602082011115610eb357600080fd5b803590602001918460018302840111600160201b83111715610ed457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383351693505063ffffffff602083013581169260408101359091169150606081013590608001356129d5565b6103ea60048036036060811015610f5557600080fd5b508035906001600160a01b036020820135169060400135612c53565b6104c5612f4e565b6103ea60048036036060811015610f8f57600080fd5b50803590602081013590604001356001600160a01b0316612f5d565b84610fb58161231d565b610ff4576040805162461bcd60e51b815260206004820152601a6024820152600080516020613cc9833981519152604482015290519081900360640190fd5b60008551116110345760405162461bcd60e51b8152600401808060200182810382526030815260200180613bf96030913960400191505060405180910390fd5b600086815260066020908152604080832080546001820154600290920154600594859052928520938401546004909401546001600160a01b03909116949193915b8a518110156111765760006110d9848d848151811061109057fe5b60200260200101518b85815181106110a457fe5b60200260200101518d86815181106110b857fe5b60200260200101518f87815181106110cc57fe5b60200260200101516130cd565b90506110eb858763ffffffff6131c516565b94506111368d84878a8f878151811061110057fe5b60200260200101518f888151811061111457fe5b60200260200101518f898151811061112857fe5b6020026020010151886131dd565b809850819650505089828151811061114a57fe5b602002602001015195508b828151811061116057fe5b6020908102919091010151935050600101611075565b82156111d4576001600160a01b0386161561119b576111968c8786613309565b600093505b60008c815260066020526040902080546001600160a01b0319166001600160a01b03881617815560018101869055600201849055611216565b6111ee8c876111e9878963ffffffff6131c516565b613309565b60008c815260066020526040812080546001600160a01b031916815560018101829055600201555b50506000998a52600560208190526040909a20909901989098555050505050505050565b6000828152600560205260409020600101548290600160c01b900463ffffffff1661129a576040805162461bcd60e51b81526020600482015260136024820152600080516020613a49833981519152604482015290519081900360640190fd5b60008181526005602052604090206002015460ff16156112eb5760405162461bcd60e51b8152600401808060200182810382526028815260200180613bd16028913960400191505060405180910390fd5b600081815260056020526040902060010154600160e01b900463ffffffff1680158061132257504263ffffffff168163ffffffff16115b61135d5760405162461bcd60e51b815260040180806020018281038252602a8152602001806139fb602a913960400191505060405180910390fd5b600082815260056020526040902060010154600160a01b900463ffffffff1680158061139557504263ffffffff168163ffffffff1611155b6113d4576040805162461bcd60e51b815260206004820152601d6024820152600080516020613c29833981519152604482015290519081900360640190fd5b6113dd8461338c565b6000858152600560205260409020600301546113ff908563ffffffff6131c516565b6000868152600560209081526040918290206003018390558151878152908101929092528051339288927f54d68405b79f2aa4fd4e8db7b67844ad254cf8f208aac476c2894134a9deab6692918290030190a35050505050565b6000856114658161231d565b6114a4576040805162461bcd60e51b815260206004820152601a6024820152600080516020613cc9833981519152604482015290519081900360640190fd5b6000878152600560205260409020548614611500576040805162461bcd60e51b81526020600482015260176024820152760c6dedce8cadce840d0c2e6d040daeae6e840dac2e8c6d604b1b604482015290519081900360640190fd5b6000878152600560205260409020600101546001600160a01b03868116911614611569576040805162461bcd60e51b81526020600482015260156024820152740c2e4c4d2e8e4c2e8dee440daeae6e840dac2e8c6d605b1b604482015290519081900360640190fd5b60008781526005602052604090206001015463ffffffff600160c01b909104811690851611156115de576040805162461bcd60e51b815260206004820152601b60248201527a0e8d2dacadeeae840daeae6e840c4ca40d8dedcce40cadcdeeaced602b1b604482015290519081900360640190fd5b60008781526005602052604090206006015483111561163f576040805162461bcd60e51b81526020600482015260186024820152770c4dedcc840daeae6e840c4ca40d0d2ced040cadcdeeaced60431b604482015290519081900360640190fd5b50505060009384525050600560205250604090206004015490565b6000546001600160a01b0316156116a25760405162461bcd60e51b8152600401808060200182810382526022815260200180613aff6022913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526005602052604090206003015490565b6000908152600560205260409020600101546001600160a01b031690565b60009081526005602052604090206006015490565b6000805b87518210156118ff57600088838151811061172757fe5b60200260200101519050600088848151811061173f57fe5b60200260200101519050606081604051908082528060200260200182016040528015611775578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156117a4578160200160208202803883390190505b5090506060836040519080825280602002602001820160405280156117d3578160200160208202803883390190505b509050606084604051908082528060200260200182016040528015611802578160200160208202803883390190505b50905060005b858110156118df578c888151811061181c57fe5b602002602001015185828151811061183057fe5b6020026020010181815250508b888151811061184857fe5b602002602001015184828151811061185c57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508a888151811061188857fe5b602002602001015183828151811061189c57fe5b6020026020010181815250508988815181106118b457fe5b60200260200101518282815181106118c857fe5b602090810291909101015260019788019701611808565b6118ec8786868686610fab565b5050600190960195506117109350505050565b611907611c07565b5050505050505050565b6000848152600560205260409020600101548490600160c01b900463ffffffff16611971576040805162461bcd60e51b81526020600482015260136024820152600080516020613a49833981519152604482015290519081900360640190fd5b60008181526005602052604090206002015460ff16156119c25760405162461bcd60e51b8152600401808060200182810382526028815260200180613bd16028913960400191505060405180910390fd5b600081815260056020526040902060010154600160e01b900463ffffffff168015806119f957504263ffffffff168163ffffffff16115b611a345760405162461bcd60e51b815260040180806020018281038252602a8152602001806139fb602a913960400191505060405180910390fd5b600082815260056020526040902060010154600160a01b900463ffffffff16801580611a6c57504263ffffffff168163ffffffff1611155b611aab576040805162461bcd60e51b815260206004820152601d6024820152600080516020613c29833981519152604482015290519081900360640190fd5b868460008111611afa576040805162461bcd60e51b8152602060048201526015602482015274626f6e64206d75737420626520706f73697469766560581b604482015290519081900360640190fd5b600082815260056020526040902060060154611b1d90600263ffffffff6134c316565b811015611b5b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613a69602a913960400191505060405180910390fd5b88878015611bb757600082815260056020526040902060060154811015611bb7576040805162461bcd60e51b815260206004820152601d6024820152600080516020613b4a833981519152604482015290519081900360640190fd5b611bc08861338c565b611bce8b8b338b60006134e7565b60008b815260056020526040902060010154611bfa908c908c90600160c01b900463ffffffff166135db565b5050505050505050505050565b3360008181526001602090815260408083208054908490558354825163a9059cbb60e01b8152600481019690965260248601829052915190946001600160a01b039092169363a9059cbb93604480850194919392918390030190829087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050506040513d6020811015611c9c57600080fd5b5051611ca757600080fd5b60408051828152905133917f4ce7033d118120e254016dccf195288400b28fc8936425acd5f17ce2df3ab708919081900360200190a250565b6000848152600560205260409020600101548490600160c01b900463ffffffff16611d40576040805162461bcd60e51b81526020600482015260136024820152600080516020613a49833981519152604482015290519081900360640190fd5b600081815260056020526040902060010154600160e01b900463ffffffff16801580611d7757504263ffffffff168163ffffffff16115b611db25760405162461bcd60e51b8152600401808060200182810382526029815260200180613b216029913960400191505060405180910390fd5b600082815260056020526040902060010154600160a01b900463ffffffff16801580611dea57504263ffffffff168163ffffffff1611155b611e29576040805162461bcd60e51b815260206004820152601d6024820152600080516020613c29833981519152604482015290519081900360640190fd5b604080516020808201899052818301889052825180830384018152606083018452805190820120608083018b905260a0830181905260c08084018990528451808503909101815260e090930184528251928201929092206000818152600790925292902054909190600160201b900460ff1615611ed75760405162461bcd60e51b815260040180806020018281038252602a815260200180613a93602a913960400191505060405180910390fd5b60008181526007602052604090205463ffffffff428116911611611f2c5760405162461bcd60e51b8152600401808060200182810382526024815260200180613b6a6024913960400191505060405180910390fd5b6000818152600760209081526040808320600181018c9055805460ff60201b1916600160201b1790558b83526005909152902060060154861415611f9657600089815260056020526040902060010154611f96908a908a90600160c01b900463ffffffff166135db565b60408051898152602081018990528082018890529051839133918c917fa7b2d313bc7a062e30b2c3b811aa4c9faf09755a6b4ea3bf42deff920944332f919081900360600190a4505050505050505050565b336000818152600860209081526040918290208490558151928352820183905280517fdca703d022171824d3d639b33c1525fd2338120b4cfb89507c0b59596893acda9281900390910190a150565b60046020526000908152604090205481565b60009081526005602052604090205490565b6006602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b60086020526000908152604090205481565b60016020526000908152604090205481565b600086815260036020526040812054612100576040805162461bcd60e51b81526020600482015260136024820152721d195b5c1b185d19481b5d5cdd08195e1a5cdd606a1b604482015290519081900360640190fd5b6000878488604051602001808481526020018363ffffffff1663ffffffff1660e01b815260040182805190602001908083835b602083106121525780518252601f199092019160209182019101612133565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040528051906020012090506000818787338760405160200180868152602001856001600160a01b03166001600160a01b031660601b81526014018463ffffffff1663ffffffff1660e01b8152600401836001600160a01b03166001600160a01b031660601b8152601401828152602001955050505050506040516020818303038152906040528051906020012090506122248183898989600061363c565b81336001600160a01b0316826000805160206139a58339815191528c8c8c8c8c8c426040518088815260200180602001876001600160a01b03166001600160a01b031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b838110156122d15781810151838201526020016122b9565b50505050905090810190601f1680156122fe5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a498975050505050505050565b60008181526005602052604081206001810154600290910154600160e01b90910463ffffffff169060ff1615801561235a575063ffffffff811615155b801561237257504263ffffffff168163ffffffff1611155b9392505050565b6000908152600560208190526040909120015490565b6007602052600090815260409020805460019091015463ffffffff821691600160201b900460ff169083565b60025460008181526003602090815260408083204390555184519293928592918201918291908401908083835b602083106124075780518252601f1990920191602091820191016123e8565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001206004600083815260200190815260200160002081905550336001600160a01b0316817fb87fb721c0a557bb8dff89a86796466931d82ba530a66a239263eb8735ade2e4856040518080602001828103825283818151815260200191508051906020019080838360005b838110156124c35781810151838201526020016124ab565b50505050905090810190601f1680156124f05780820380516001836020036101000a031916815260200191505b509250505060405180910390a361250e81600163ffffffff6131c516565b60025592915050565b60009081526005602052604090206004015490565b60009081526005602052604090206002015460ff1690565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460069095015493956001600160a01b0384169563ffffffff600160a01b8604811696600160c01b8704821696600160e01b90049091169460ff16939291908a565b600090815260056020526040902060010154600160a01b900463ffffffff1690565b600090815260056020526040902060010154600160c01b900463ffffffff1690565b600080612600886123bb565b90506126108188888888886120aa565b98975050505050505050565b6000816126288161231d565b612667576040805162461bcd60e51b815260206004820152601a6024820152600080516020613cc9833981519152604482015290519081900360640190fd5b505060009081526005602052604090206004015490565b6000858152600560205260409020600101548590600160c01b900463ffffffff166126de576040805162461bcd60e51b81526020600482015260136024820152600080516020613a49833981519152604482015290519081900360640190fd5b60008181526005602052604090206002015460ff161561272f5760405162461bcd60e51b8152600401808060200182810382526028815260200180613bd16028913960400191505060405180910390fd5b600081815260056020526040902060010154600160e01b900463ffffffff1680158061276657504263ffffffff168163ffffffff16115b6127a15760405162461bcd60e51b815260040180806020018281038252602a8152602001806139fb602a913960400191505060405180910390fd5b600082815260056020526040902060010154600160a01b900463ffffffff168015806127d957504263ffffffff168163ffffffff1611155b612818576040805162461bcd60e51b815260206004820152601d6024820152600080516020613c29833981519152604482015290519081900360640190fd5b878460008111612867576040805162461bcd60e51b8152602060048201526015602482015274626f6e64206d75737420626520706f73697469766560581b604482015290519081900360640190fd5b60008281526005602052604090206006015461288a90600263ffffffff6134c316565b8110156128c85760405162461bcd60e51b815260040180806020018281038252602a815260200180613a69602a913960400191505060405180910390fd5b8988801561292457600082815260056020526040902060060154811015612924576040805162461bcd60e51b815260206004820152601d6024820152600080516020613b4a833981519152604482015290519081900360640190fd5b61292d8861338c565b6040805160208082018f90528183018e905260608083018c9052835180840390910181526080909201909252805191012060006001600160a01b038b1615612975578a612977565b335b90506129838e836138c5565b6129918e83838d60016134e7565b5050505050505050505050505050565b600090815260056020526040902060010154600160e01b900463ffffffff1690565b60036020526000908152604090205481565b60006129e08261338c565b600088815260036020526040902054612a36576040805162461bcd60e51b81526020600482015260136024820152721d195b5c1b185d19481b5d5cdd08195e1a5cdd606a1b604482015290519081900360640190fd5b6000888589604051602001808481526020018363ffffffff1663ffffffff1660e01b815260040182805190602001908083835b60208310612a885780518252601f199092019160209182019101612a69565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040528051906020012090506000818888338860405160200180868152602001856001600160a01b03166001600160a01b031660601b81526014018463ffffffff1663ffffffff1660e01b8152600401836001600160a01b03166001600160a01b031660601b815260140182815260200195505050505050604051602081830303815290604052805190602001209050612b5981838a8a8a8961363c565b81336001600160a01b0316826000805160206139a58339815191528d8d8d8d8d8d426040518088815260200180602001876001600160a01b03166001600160a01b031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b83811015612c06578181015183820152602001612bee565b50505050905090810190601f168015612c335780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a49998505050505050505050565b60008381526005602052604090206001015483906001600160a01b03163314612cb1576040805162461bcd60e51b815260206004820152601d6024820152600080516020613ca9833981519152604482015290519081900360640190fd5b6000848152600560205260409020600101548490600160c01b900463ffffffff16612d11576040805162461bcd60e51b81526020600482015260136024820152600080516020613a49833981519152604482015290519081900360640190fd5b60008181526005602052604090206002015460ff1615612d625760405162461bcd60e51b8152600401808060200182810382526028815260200180613bd16028913960400191505060405180910390fd5b600081815260056020526040902060010154600160e01b900463ffffffff16801580612d9957504263ffffffff168163ffffffff16115b612dd45760405162461bcd60e51b815260040180806020018281038252602a8152602001806139fb602a913960400191505060405180910390fd5b600082815260056020526040902060010154600160a01b900463ffffffff16801580612e0c57504263ffffffff168163ffffffff1611155b612e4b576040805162461bcd60e51b815260206004820152601d6024820152600080516020613c29833981519152604482015290519081900360640190fd5b86858015612ea757600082815260056020526040902060060154811015612ea7576040805162461bcd60e51b815260206004820152601d6024820152600080516020613b4a833981519152604482015290519081900360640190fd5b600089815260056020526040902060060154612ef45760405162461bcd60e51b8152600401808060200182810382526042815260200180613abd6042913960600191505060405180910390fd5b600089815260056020526040808220600201805460ff19166001179055516001600160a01b038a16918b917f75d7939999bc902187c4aed400872883e445145f1983539166f783fa040b47629190a3505050505050505050565b6000546001600160a01b031681565b60008381526005602052604090206001015483906001600160a01b03163314612fbb576040805162461bcd60e51b815260206004820152601d6024820152600080516020613ca9833981519152604482015290519081900360640190fd5b600084815260056020526040902060020154849060ff1661300d5760405162461bcd60e51b8152600401808060200182810382526024815260200180613a256024913960400191505060405180910390fd5b6001600160a01b038316613064576040805162461bcd60e51b8152602060048201526019602482015278185b9cddd95c995c881b5d5cdd081899481c1c9bdd9a591959603a1b604482015290519081900360640190fd5b604051849086907f18d760beffe3717270cd90d9d920ec1a48c194e9ad7bba23eb1c92d3eb974f9790600090a36000858152600560205260408120600201805460ff191690556130ba90869086908690806134e7565b6130c6858560006135db565b5050505050565b604080516020808201879052818301869052606080830186905284901b6001600160601b0319166080830152600160f81b6094830152825180830360750181526095909201909252805191012060009086141561312c575060016131bc565b604080516020808201889052818301879052606080830187905285901b6001600160601b0319166080830152600060948301528251808303607501815260959092019092528051910120861415613185575060006131bc565b60405162461bcd60e51b81526004018080602001828103825260368152602001806139c56036913960400191505060405180910390fd5b95945050505050565b6000828201838110156131d457fe5b90505b92915050565b6000808215613255576000848152600760205260409020548490600160201b900460ff1661322d576000908152600760205260408120805464ffffffffff191681556001015550869050856132fc565b6000908152600760205260408120600181018054825464ffffffffff19169092559190915593505b888414156132f6576001600160a01b0387166132ac5760008a815260056020526040902060030154959650869561329390899063ffffffff6131c516565b60008b81526005602052604081206003015597506132f6565b866001600160a01b0316866001600160a01b0316146132f6576000858910156132d557886132d7565b855b90506132ee8b896111e98c8563ffffffff61397a16565b869750809850505b50869050855b9850989650505050505050565b6001600160a01b038216600090815260016020526040902054613332908263ffffffff6131c516565b6001600160a01b0383166000818152600160209081526040918290209390935580518481529051919286927f9c121aff33b50c1a53fef034ebec5f83da2d5a5187048f9c76c397ba27c1a1a69281900390910190a3505050565b80613396576134c0565b3360009081526001602052604090205480156133fc578181106133d9576133c3818363ffffffff61397a16565b33600090815260016020526040902055506134c0565b6133e9828263ffffffff61397a16565b3360009081526001602052604081205591505b60008054604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506040513d602081101561348157600080fd5b50516134be5760405162461bcd60e51b8152600401808060200182810382526039815260200180613c706039913960400191505060405180910390fd5b505b50565b6000826134d2575060006131d7565b828202828482816134df57fe5b04146131d457fe5b60008581526005602081815260409283902090910154825180830191909152808301879052606080820186905286901b6001600160601b031916608082015283151560f81b6094820152825180820360750181526095909101909252815191012082156135635760008681526005602052604090206006018390555b6000868152600560208181526040928390209091018390558151878152908101839052808201859052426060820152831515608082015290516001600160a01b0386169188917fe47ca4ebbbc2990134d1168821f38c5e177f3d5ee564bffeadeaa351905e62219181900360a00190a3505050505050565b600083815260056020526040902060040182905561360363ffffffff42811690839061398c16565b600093845260056020526040909320600101805463ffffffff94909416600160e01b026001600160e01b03909416939093179092555050565b6000868152600560205260409020600101548690600160c01b900463ffffffff16156136a9576040805162461bcd60e51b81526020600482015260176024820152761c5d595cdd1a5bdb881b5d5cdd081b9bdd08195e1a5cdd604a1b604482015290519081900360640190fd5b8163ffffffff85166136fd576040805162461bcd60e51b815260206004820152601860248201527774696d656f7574206d75737420626520706f73697469766560401b604482015290519081900360640190fd5b6301e133808563ffffffff16106137455760405162461bcd60e51b8152600401808060200182810382526022815260200180613baf6022913960400191505060405180910390fd5b6001600160a01b038616613799576040805162461bcd60e51b8152602060048201526016602482015275185c989a5d1c985d1bdc881b5d5cdd081899481cd95d60521b604482015290519081900360640190fd5b336001600160a01b03871614613858576001600160a01b038616600090815260086020526040902054808210156138015760405162461bcd60e51b8152600401808060200182810382526027815260200180613c496027913960400191505060405180910390fd5b613811828263ffffffff61397a16565b6001600160a01b03881660009081526001602052604090205490925061383d908263ffffffff6131c516565b6001600160a01b038816600090815260016020526040902055505b60009788526005602052604090972095865550506001840180546001600160a01b0319166001600160a01b03949094169390931763ffffffff60a01b1916600160a01b63ffffffff928316021763ffffffff60c01b1916600160c01b929091169190910217905560030155565b60008181526007602052604090205463ffffffff16156139165760405162461bcd60e51b8152600401808060200182810382526021815260200180613b8e6021913960400191505060405180910390fd5b600082815260056020526040812060010154600890600160c01b900463ffffffff1604905061394f63ffffffff42811690839061398c16565b600092835260076020526040909220805463ffffffff191663ffffffff909316929092179091555050565b60008282111561398657fe5b50900390565b600082820163ffffffff80851690821610156131d457fefefe2dac156a3890636ce13f65f4fdf41dcaee11526e4a5374531572d92194796c486973746f727920696e7075742070726f766964656420646964206e6f74206d6174636820746865206578706563746564206861736866696e616c697a6174696f6e20646561646c696e65206d757374206e6f742068617665207061737365647175657374696f6e206d7573742062652070656e64696e67206172626974726174696f6e7175657374696f6e206d75737420657869737400000000000000000000000000626f6e64206d75737420626520646f75626c65206174206c656173742070726576696f757320626f6e64636f6d6d69746d656e74206d757374206e6f742068617665206265656e2072657665616c6564207965745175657374696f6e206d75737420616c7265616479206861766520616e20616e73776572207768656e206172626974726174696f6e20697320726571756573746564546f6b656e2063616e206f6e6c7920626520696e697469616c697a6564206f6e636566696e616c697a6174696f6e206465616c696e65206d757374206e6f74206861766520706173736564626f6e64206d75737420657863656564206d61785f70726576696f757300000072657665616c20646561646c696e65206d757374206e6f74206861766520706173736564636f6d6d69746d656e74206d757374206e6f7420616c726561647920657869737474696d656f7574206d757374206265206c657373207468616e2033363520646179737175657374696f6e206d757374206e6f742062652070656e64696e67206172626974726174696f6e6174206c65617374206f6e6520686973746f7279206861736820656e747279206d7573742062652070726f76696465646f70656e696e672064617465206d757374206861766520706173736564000000546f6b656e732070726f7669646564206d75737420636f766572207175657374696f6e206665655472616e73666572206f6620746f6b656e73206661696c65642c20696e73756666696369656e7420617070726f7665642062616c616e63653f6d73672e73656e646572206d7573742062652061726269747261746f720000007175657374696f6e206d7573742062652066696e616c697a6564000000000000a264697066735822122026b7740cecc424a35bacb285fb08be99b1f417843f79c878db6d6282570d2d5a64736f6c634300060200337b227469746c65223a20222573222c202274797065223a20226d756c7469706c652d73656c656374222c20226f7574636f6d6573223a205b25735d2c202263617465676f7279223a20222573222c20226c616e67223a20222573227d7b227469746c65223a20222573222c202274797065223a2022626f6f6c222c202263617465676f7279223a20222573222c20226c616e67223a20222573227d7b227469746c65223a20222573222c202274797065223a20226461746574696d65222c202263617465676f7279223a20222573222c20226c616e67223a20222573227d7b227469746c65223a20222573222c202274797065223a202273696e676c652d73656c656374222c20226f7574636f6d6573223a205b25735d2c202263617465676f7279223a20222573222c20226c616e67223a20222573227d7b227469746c65223a20222573222c202274797065223a202275696e74222c2022646563696d616c73223a2031382c202263617465676f7279223a20222573222c20226c616e67223a20222573227d

Deployed ByteCode Sourcemap

2556:38972:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2556:38972:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30639:2837;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;30639:2837:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30639:2837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30639:2837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30639:2837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30639:2837:0;;;;;;;;-1:-1:-1;30639:2837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;30639:2837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30639:2837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30639:2837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30639:2837:0;;;;;;;;-1:-1:-1;30639:2837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;30639:2837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30639:2837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30639:2837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30639:2837:0;;;;;;;;-1:-1:-1;30639:2837:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;30639:2837:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30639:2837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30639:2837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30639:2837:0;;-1:-1:-1;30639:2837:0;;-1:-1:-1;;;;;30639:2837:0:i;:::-;;18035:345;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18035:345:0;;;;;;;:::i;28639:666::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;28639:666:0;;;;;;;;-1:-1:-1;;;;;28639:666:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8278:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8278:161:0;-1:-1:-1;;;;;8278:161:0;;:::i;40566:129::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40566:129:0;;:::i;39153:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39153:137:0;;:::i;:::-;;;;-1:-1:-1;;;;;39153:137:0;;;;;;;;;;;;;;41398:125;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41398:125:0;;:::i;37680:1062::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;37680:1062:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;;;;;;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;;;;;;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;;;;;;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;;;;;;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;;;;;;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;37680:1062:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37680:1062:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37680:1062:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37680:1062:0;;-1:-1:-1;37680:1062:0;;-1:-1:-1;;;;;37680:1062:0:i;18933:474::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;18933:474:0;;;;;;;;;;;;;;;;;:::i;2302:217::-;;;:::i;22653:923::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;22653:923:0;;;;;;;;;;;;;;;;;:::i;9452:182::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9452:182:0;;:::i;5651:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5651:50:0;;:::i;38889:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38889:140:0;;:::i;5760:48::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5760:48:0;;:::i;:::-;;;;-1:-1:-1;;;;;5760:48:0;;;;;;;;;;;;;;;;;;;;;;;;;5871:59;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5871:59:0;-1:-1:-1;;;;;5871:59:0;;:::i;2160:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2160:44:0;-1:-1:-1;;;;;2160:44:0;;:::i;12842:782::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;12842:782:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;12842:782:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12842:782:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;12842:782:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12842:782:0;;-1:-1:-1;;;;;;;12842:782:0;;;;-1:-1:-1;;12842:782:0;;;;;;;;;;;;;;;;-1:-1:-1;12842:782:0;;;;:::i;26822:278::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26822:278:0;;:::i;:::-;;;;;;;;;;;;;;;;;;41128:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41128:140:0;;:::i;5815:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5815:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10021:363;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10021:363:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10021:363:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10021:363:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10021:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10021:363:0;;-1:-1:-1;10021:363:0;;-1:-1:-1;;;;;10021:363:0:i;40803:138::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40803:138:0;;:::i;40230:153::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40230:153:0;;:::i;5708:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5708:45:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5708:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39428:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39428:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;39693:130;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39693:130:0;;:::i;11269:435::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11269:435:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;11269:435:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11269:435:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11269:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11269:435:0;;;;;;;;-1:-1:-1;11269:435:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;11269:435:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11269:435:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11269:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11269:435:0;;-1:-1:-1;;;;;;;11269:435:0;;;;-1:-1:-1;;11269:435:0;;;;;;;;;;;;;;;;-1:-1:-1;11269:435:0;;;;:::i;27320:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27320:179:0;;:::i;20998:669::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;20998:669:0;;;;;;;;;;;;;-1:-1:-1;;;;;20998:669:0;;;;;;;;;;:::i;39965:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39965:137:0;;:::i;5600:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5600:44:0;;:::i;14608:850::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14608:850:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14608:850:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14608:850:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14608:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14608:850:0;;-1:-1:-1;;;;;;;14608:850:0;;;;-1:-1:-1;;14608:850:0;;;;;;;;;;;;;;;;-1:-1:-1;14608:850:0;;;;;;;;;:::i;25009:513::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25009:513:0;;;-1:-1:-1;;;;;25009:513:0;;;;;;;;;;:::i;2132:19::-;;;:::i;26128:511::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26128:511:0;;;;;;;;;;;-1:-1:-1;;;;;26128:511:0;;:::i;30639:2837::-;30839:11;7680:24;7692:11;7680;:24::i;:::-;7672:63;;;;;-1:-1:-1;;;7672:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:63:0;;;;;;;;;;;;;;;30909:1:::1;30885:14;:21;:25;30877:86;;;;-1:-1:-1::0;;;30877:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31057:13;31073:28:::0;;;:15:::1;:28;::::0;;;;;;;:34;;;31138:38;::::1;::::0;31210:41:::1;::::0;;::::1;::::0;31503:9:::1;:22:::0;;;;;;;:35;;::::1;::::0;31573:34:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;31073:34:0;;::::1;::::0;31138:38;;31503:35;31640:737:::1;31656:14;:21;31652:1;:25;31640:737;;;31813:18;31834:97;31862:17;31881:14;31896:1;31881:17;;;;;;;;;;;;;;31900:7;31908:1;31900:10;;;;;;;;;;;;;;31912:5;31918:1;31912:8;;;;;;;;;;;;;;31922:5;31928:1;31922:8;;;;;;;;;;;;;;31834:27;:97::i;:::-;31813:118:::0;-1:-1:-1;31963:27:0::1;:12:::0;31980:9;31963:27:::1;:16;:27;:::i;:::-;31948:42;;32029:148;32067:11;32080;32093:12;32107:5;32131;32137:1;32131:8;;;;;;;;;;;;;;32141:5;32147:1;32141:8;;;;;;;;;;;;;;32151:7;32159:1;32151:10;;;;;;;;;;;;;;32163:13;32029:19;:148::i;:::-;32005:172;;;;;;;;32303:5;32309:1;32303:8;;;;;;;;;;;;;;32291:20;;32346:14;32361:1;32346:17;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;31679:3:0::1;;31640:737;;;32393:30:::0;;32389:1010:::1;;-1:-1:-1::0;;;;;32834:21:0;::::1;::::0;32830:140:::1;;32876:43;32886:11;32899:5;32906:12;32876:9;:43::i;:::-;32953:1;32938:16;;32830:140;32986:28;::::0;;;:15:::1;:28;::::0;;;;:42;;-1:-1:-1;;;;;;32986:42:0::1;-1:-1:-1::0;;;;;32986:42:0;::::1;;::::0;;-1:-1:-1;33043:38:0;::::1;:50:::0;;;33108:41:::1;;:56:::0;;;32389:1010:::1;;;33279:58;33289:11:::0;33302:5;33309:27:::1;:12:::0;33326:9;33309:27:::1;:16;:27;:::i;:::-;33279:9;:58::i;:::-;33359:28;::::0;;;:15:::1;:28;::::0;;;;33352:35;;-1:-1:-1;;;;;;33352:35:0::1;::::0;;;;::::1;::::0;;;::::1;;::::0;32389:1010:::1;-1:-1:-1::0;;33411:22:0::1;::::0;;;:9:::1;:22;::::0;;;;;;;:35;;::::1;:55:::0;;;;-1:-1:-1;;;;;;;;30639:2837:0:o;18035:345::-;6408:1;6375:22;;;:9;:22;;;;;:30;;;:22;;-1:-1:-1;;;6375:30:0;;;;6367:66;;;;;-1:-1:-1;;;6367:66:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6367:66:0;;;;;;;;;;;;;;;6453:22;;;;:9;:22;;;;;:45;;;;;6452:46;6444:99;;;;-1:-1:-1;;;6444:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:18;6575:22;;;:9;:22;;;;;:34;;;-1:-1:-1;;;6575:34:0;;;;6628:25;;;:54;;;6678:3;6657:25;;:11;:25;;;6628:54;6620:109;;;;-1:-1:-1;;;6620:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6740:17;6760:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;6760:33:0;;;;6812:15;;;:44;;;6852:3;6831:25;;:10;:25;;;;6812:44;6804:86;;;;;-1:-1:-1;;;6804:86:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6804:86:0;;;;;;;;;;;;;;;18160:29:::1;18182:6;18160:21;:29::i;:::-;18232:22;::::0;;;:9:::1;:22;::::0;;;;:29:::1;;::::0;:41:::1;::::0;18266:6;18232:41:::1;:33;:41;:::i;:::-;18200:22;::::0;;;:9:::1;:22;::::0;;;;;;;;:29:::1;;:73:::0;;;18289:83;;;;;;;::::1;::::0;;;;;;18361:10:::1;::::0;18210:11;;18289:83:::1;::::0;;;;;;;::::1;18035:345:::0;;;;;:::o;28639:666::-;28863:7;28822:11;7680:24;7692:11;7680;:24::i;:::-;7672:63;;;;;-1:-1:-1;;;7672:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:63:0;;;;;;;;;;;;;;;28907:22:::1;::::0;;;:9:::1;:22;::::0;;;;:35;28891:51;::::1;28883:87;;;::::0;;-1:-1:-1;;;28883:87:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28883:87:0;;;;;;;;;;;;;::::1;;29003:22;::::0;;;:9:::1;:22;::::0;;;;:33:::1;;::::0;-1:-1:-1;;;;;28989:47:0;;::::1;29003:33:::0;::::1;28989:47;28981:81;;;::::0;;-1:-1:-1;;;28981:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28981:81:0;;;;;;;;;;;;;::::1;;29096:22;::::0;;;:9:::1;:22;::::0;;;;:30:::1;;::::0;::::1;-1:-1:-1::0;;;29096:30:0;;::::1;::::0;::::1;29081:45:::0;;::::1;;;29073:85;;;::::0;;-1:-1:-1;;;29073:85:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29073:85:0;;;;;;;;;;;;;::::1;;29189:22;::::0;;;:9:::1;:22;::::0;;;;:27:::1;;::::0;29177:39;::::1;;29169:76;;;::::0;;-1:-1:-1;;;29169:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29169:76:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;29263:22:0::1;::::0;;;-1:-1:-1;;29263:9:0::1;:22;::::0;-1:-1:-1;29263:22:0;;;:34:::1;;::::0;;28639:666::o;8278:161::-;8363:3;8347:5;-1:-1:-1;;;;;8347:5:0;:20;8339:67;;;;-1:-1:-1;;;8339:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8417:5;:14;;-1:-1:-1;;;;;;8417:14:0;-1:-1:-1;;;;;8417:14:0;;;;;;;;;;8278:161::o;40566:129::-;40631:7;40658:22;;;:9;:22;;;;;:29;;;;40566:129::o;39153:137::-;39222:7;39249:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;;;39249:33:0;;39153:137::o;41398:125::-;41461:7;41488:22;;;:9;:22;;;;;:27;;;;41398:125::o;37680:1062::-;38018:10:::1;::::0;38059:655:::1;38077:12;:19;38072:2;:24;38059:655;;;38119:11;38133:12;38146:2;38133:16;;;;;;;;;;;;;;38119:30;;38164:10;38177:7;38185:2;38177:11;;;;;;;;;;;;;;38164:24;;38203:19;38239:2;38225:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;::::0;-1:-1;38225:17:0::1;;38203:39;;38257:19;38293:2;38279:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;::::0;-1:-1;38279:17:0::1;;38257:39;;38311:19;38347:2;38333:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;::::0;-1:-1;38333:17:0::1;;38311:39;;38365:19;38401:2;38387:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;::::0;-1:-1;38387:17:0::1;-1:-1:-1::0;38365:39:0;-1:-1:-1;38419:9:0::1;38443:211;38459:2;38455:1;:6;38443:211;;;38495:11;38507:1;38495:14;;;;;;;;;;;;;;38487:2;38490:1;38487:5;;;;;;;;;;;;;:22;;;::::0;::::1;38536:5;38542:1;38536:8;;;;;;;;;;;;;;38528:2;38531:1;38528:5;;;;;;;;;;;;;:16;-1:-1:-1::0;;;;;38528:16:0::1;;;-1:-1:-1::0;;;;;38528:16:0::1;;;::::0;::::1;38571:5;38577:1;38571:8;;;;;;;;;;;;;;38563:2;38566:1;38563:5;;;;;;;;;;;;;:16;;;::::0;::::1;38606:7;38614:1;38606:10;;;;;;;;;;;;;;38598:2;38601:1;38598:5;;;;;;;;;::::0;;::::1;::::0;;;;;:18;38635:3:::1;::::0;;::::1;::::0;38463::::1;38443:211;;;38668:34;38682:3;38687:2;38691;38695;38699;38668:13;:34::i;:::-;-1:-1:-1::0;;38098:4:0::1;::::0;;::::1;::::0;-1:-1:-1;38059:655:0::1;::::0;-1:-1:-1;;;;38059:655:0::1;;38724:10;:8;:10::i;:::-;6143:1;;37680:1062:::0;;;;;;:::o;18933:474::-;6408:1;6375:22;;;:9;:22;;;;;:30;;;:22;;-1:-1:-1;;;6375:30:0;;;;6367:66;;;;;-1:-1:-1;;;6367:66:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6367:66:0;;;;;;;;;;;;;;;6453:22;;;;:9;:22;;;;;:45;;;;;6452:46;6444:99;;;;-1:-1:-1;;;6444:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:18;6575:22;;;:9;:22;;;;;:34;;;-1:-1:-1;;;6575:34:0;;;;6628:25;;;:54;;;6678:3;6657:25;;:11;:25;;;6628:54;6620:109;;;;-1:-1:-1;;;6620:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6740:17;6760:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;6760:33:0;;;;6812:15;;;:44;;;6852:3;6831:25;;:10;:25;;;;6812:44;6804:86;;;;;-1:-1:-1;;;6804:86:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6804:86:0;;;;;;;;;;;;;;;19091:11:::1;19104:6;7852:1;7843:6;:10;7835:44;;;::::0;;-1:-1:-1;;;7835:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7835:44:0;;;;;;;;;;;;;::::1;;7909:22;::::0;;;:9:::1;:22;::::0;;;;:27:::1;;::::0;:34:::1;::::0;7941:1:::1;7909:34;:31;:34;:::i;:::-;7898:6;:46;;7890:101;;;;-1:-1:-1::0;;;7890:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19156:11:::0;19169:12;8121:16;;8117:134:::2;;8162:22;::::0;;;:9:::2;:22;::::0;;;;:27:::2;;::::0;:43;-1:-1:-1;8162:43:0::2;8154:85;;;::::0;;-1:-1:-1;;;8154:85:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;8154:85:0;;;;;;;;;;;;;::::2;;19208:29:::3;19230:6;19208:21;:29::i;:::-;19248:67;19268:11;19281:6;19289:10;19301:6;19309:5;19248:19;:67::i;:::-;19368:22;::::0;;;:9:::3;:22;::::0;;;;:30:::3;;::::0;19326:73:::3;::::0;19368:22;;19360:6;;-1:-1:-1;;;19368:30:0;::::3;;;19326:20;:73::i;:::-;8002:1:::2;;6901::::1;;18933:474:::0;;;;;;;:::o;2302:217::-;2369:10;2345:11;2359:21;;;:9;:21;;;;;;;;;;2391:25;;;;2435:5;;:31;;-1:-1:-1;;;2435:31:0;;;;;;;;;;;;;;;;;2359:21;;-1:-1:-1;;;;;2435:5:0;;;;:14;;:31;;;;;2359:21;;2435:31;;;;;;;;;:5;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2435:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2435:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2435:31:0;2427:40;;;;;;2483:28;;;;;;;;2495:10;;2483:28;;;;;;;;;;2302:217;:::o;22653:923::-;7217:1;7184:22;;;:9;:22;;;;;:30;;;:22;;-1:-1:-1;;;7184:30:0;;;;7176:66;;;;;-1:-1:-1;;;7176:66:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7176:66:0;;;;;;;;;;;;;;;7253:18;7274:22;;;:9;:22;;;;;:34;;;-1:-1:-1;;;7274:34:0;;;;7327:25;;;:54;;;7377:3;7356:25;;:11;:25;;;7327:54;7319:108;;;;-1:-1:-1;;;7319:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7438:17;7458:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;7458:33:0;;;;7510:15;;;:44;;;7550:3;7529:25;;:10;:25;;;;7510:44;7502:86;;;;;-1:-1:-1;;;7502:86:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7502:86:0;;;;;;;;;;;;;;;22858:31:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;22858:31:0;;;;;22848:42;;;;::::1;::::0;22935:48;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22935:48:0;;;;;;22925:59;;;;::::1;::::0;;;;-1:-1:-1;23006:26:0;;;:11:::1;:26:::0;;;;;;:38;22848:42;;22925:59;-1:-1:-1;;;23006:38:0;::::1;;;23005:39;22997:94;;;;-1:-1:-1::0;;;22997:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23110:26;::::0;;;:11:::1;:26;::::0;;;;:36;:50:::1;23156:3;23110:50:::0;::::1;:36:::0;::::1;:50;23102:99;;;;-1:-1:-1::0;;;23102:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23214:26;::::0;;;:11:::1;:26;::::0;;;;;;;:42:::1;::::0;::::1;:51:::0;;;23276:45;;-1:-1:-1;;;;23276:45:0::1;-1:-1:-1::0;;;23276:45:0::1;::::0;;23346:22;;;:9:::1;:22:::0;;;;;:27:::1;;::::0;23338:35;::::1;23334:141;;;23432:22;::::0;;;:9:::1;:22;::::0;;;;:30:::1;;::::0;23390:73:::1;::::0;23432:22;;23424:6;;-1:-1:-1;;;23432:30:0;::::1;;;23390:20;:73::i;:::-;23492:74;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;23533:11;;23521:10:::1;::::0;23508:11;;23492:74:::1;::::0;;;;;;;;::::1;7599:1;;22653:923:::0;;;;;;;:::o;9452:182::-;9559:10:::1;9534:36;::::0;;;:24:::1;:36;::::0;;;;;;;;:42;;;9592:34;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;9452:182:::0;:::o;5651:50::-;;;;;;;;;;;;;:::o;38889:140::-;38959:7;38986:22;;;:9;:22;;;;;:35;;38889:140::o;5760:48::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5760:48:0;;;;;;:::o;5871:59::-;;;;;;;;;;;;;:::o;2160:44::-;;;;;;;;;;;;;:::o;12842:782::-;13068:7;13098:22;;;:9;:22;;;;;;13090:58;;;;;-1:-1:-1;;;13090:58:0;;;;;;;;;;;;-1:-1:-1;;;13090:58:0;;;;;;;;;;;;;;;13161:20;13211:11;13224:10;13236:8;13194:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13194:51:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13194:51:0;;;13184:62;;;;;;13161:85;;13257:19;13306:12;13320:10;13332:7;13341:10;13353:5;13289:70;;;;;;;;;;;-1:-1:-1;;;;;13289:70:0;-1:-1:-1;;;;;13289:70:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13289:70:0;-1:-1:-1;;;;;13289:70:0;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13289:70:0;;;13279:81;;;;;;13257:103;;13373:75;13386:11;13399:12;13413:10;13425:7;13434:10;13446:1;13373:12;:75::i;:::-;13527:12;13492:10;-1:-1:-1;;;;;13464:121:0;13479:11;-1:-1:-1;;;;;;;;;;;13504:11:0;13517:8;13541:10;13553:7;13562:10;13574:5;13581:3;13464:121;;;;;;;;;;;;-1:-1:-1;;;;;13464:121:0;-1:-1:-1;;;;;13464:121: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;13464:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13605:11;12842:782;-1:-1:-1;;;;;;;;12842:782:0:o;26822:278::-;26890:4;26928:22;;;:9;:22;;;;;:34;;;;26983:45;;;;;-1:-1:-1;;;26928:34:0;;;;;;26983:45;;26982:46;:76;;;;-1:-1:-1;27033:24:0;;;;;26982:76;:108;;;;;27085:3;27063:26;;:11;:26;;;;26982:108;26973:119;26822:278;-1:-1:-1;;;26822:278:0:o;41128:140::-;41198:7;41225:22;;;:9;:22;;;;;;;;:35;;;41128:140::o;5815:49::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5815:49:0;;;;;;:::o;10021:363::-;10142:14:::1;::::0;10109:7;10167:13;;;:9:::1;:13;::::0;;;;;;;10183:12:::1;10167:28:::0;;10238:25;;;10109:7;;10142:14;10255:7;;10238:25;;::::1;::::0;;;;;::::1;::::0;;;;36:153:-1::1;66:2;61:3;58:11;36:153;;176:10:::0;;164:23;;-1:-1;;139:12;;;;98:2:::1;89:12:::0;;::::1;::::0;114::::1;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10238:25:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10238:25:0;;;10228:36;;;;;;10206:15;:19;10222:2;10206:19;;;;;;;;;;;:58;;;;10299:10;-1:-1:-1::0;;;;;10280:39:0::1;10295:2;10280:39;10311:7;10280:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;10280:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10347:9;:2:::0;10354:1:::1;10347:9;:6;:9;:::i;:::-;10330:14;:26:::0;10374:2;10021:363;-1:-1:-1;;10021:363:0:o;40803:138::-;40872:7;40899:22;;;:9;:22;;;;;:34;;;;40803:138::o;40230:153::-;40306:4;40330:22;;;:9;:22;;;;;:45;;;;;;40230:153::o;5708:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;;-1:-1:-1;;;5708:45:0;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;:::o;39428:135::-;39496:6;39522:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;39522:33:0;;;;;39428:135::o;39693:130::-;39759:6;39785:22;;;:9;:22;;;;;:30;;;-1:-1:-1;;;39785:30:0;;;;;39693:130::o;11269:435::-;11539:7;11559:19;11581:23;11596:7;11581:14;:23::i;:::-;11559:45;;11622:74;11634:11;11647:8;11657:10;11669:7;11678:10;11690:5;11622:11;:74::i;:::-;11615:81;11269:435;-1:-1:-1;;;;;;;;11269:435:0:o;27320:179::-;27430:7;27389:11;7680:24;7692:11;7680;:24::i;:::-;7672:63;;;;;-1:-1:-1;;;7672:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:63:0;;;;;;;;;;;;;;;-1:-1:-1;;27457:22:0::1;::::0;;;:9:::1;:22;::::0;;;;:34:::1;;::::0;;27320:179::o;20998:669::-;6408:1;6375:22;;;:9;:22;;;;;:30;;;:22;;-1:-1:-1;;;6375:30:0;;;;6367:66;;;;;-1:-1:-1;;;6367:66:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6367:66:0;;;;;;;;;;;;;;;6453:22;;;;:9;:22;;;;;:45;;;;;6452:46;6444:99;;;;-1:-1:-1;;;6444:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:18;6575:22;;;:9;:22;;;;;:34;;;-1:-1:-1;;;6575:34:0;;;;6628:25;;;:54;;;6678:3;6657:25;;:11;:25;;;6628:54;6620:109;;;;-1:-1:-1;;;6620:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6740:17;6760:22;;;:9;:22;;;;;:33;;;-1:-1:-1;;;6760:33:0;;;;6812:15;;;:44;;;6852:3;6831:25;;:10;:25;;;;6812:44;6804:86;;;;;-1:-1:-1;;;6804:86:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6804:86:0;;;;;;;;;;;;;;;21190:11:::1;21203:6;7852:1;7843:6;:10;7835:44;;;::::0;;-1:-1:-1;;;7835:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7835:44:0;;;;;;;;;;;;;::::1;;7909:22;::::0;;;:9:::1;:22;::::0;;;;:27:::1;;::::0;:34:::1;::::0;7941:1:::1;7909:34;:31;:34;:::i;:::-;7898:6;:46;;7890:101;;;;-1:-1:-1::0;;;7890:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21255:11:::0;21268:12;8121:16;;8117:134:::2;;8162:22;::::0;;;:9:::2;:22;::::0;;;;:27:::2;;::::0;:43;-1:-1:-1;8162:43:0::2;8154:85;;;::::0;;-1:-1:-1;;;8154:85:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;8154:85:0;;;;;;;;;;;;;::::2;;21309:29:::3;21331:6;21309:21;:29::i;:::-;21385:50;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21385:50:0;;;;;;;21375:61;;;::::3;::::0;21351:21:::3;-1:-1:-1::0;;;;;21467:25:0;::::3;::::0;21466:52:::3;;21509:9;21466:52;;;21496:10;21466:52;21447:71;;21531:44;21548:11;21561:13;21531:16;:44::i;:::-;21586:71;21606:11;21619:13;21634:8;21644:6;21652:4;21586:19;:71::i;:::-;8261:1;;8002::::2;;6901::::1;;20998:669:::0;;;;;;;;:::o;39965:137::-;40034:6;40060:22;;;:9;:22;;;;;:34;;;-1:-1:-1;;;40060:34:0;;;;;39965:137::o;5600:44::-;;;;;;;;;;;;;:::o;14608:850::-;14855:7;14877:29;14899:6;14877:21;:29::i;:::-;14952:1;14927:22;;;:9;:22;;;;;;14919:58;;;;;-1:-1:-1;;;14919:58:0;;;;;;;;;;;;-1:-1:-1;;;14919:58:0;;;;;;;;;;;;;;;14990:20;15040:11;15053:10;15065:8;15023:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15023:51:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15023:51:0;;;15013:62;;;;;;14990:85;;15086:19;15135:12;15149:10;15161:7;15170:10;15182:5;15118:70;;;;;;;;;;;-1:-1:-1;;;;;15118:70:0;-1:-1:-1;;;;;15118:70:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15118:70:0;-1:-1:-1;;;;;15118:70:0;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15118:70:0;;;15108:81;;;;;;15086:103;;15202:80;15215:11;15228:12;15242:10;15254:7;15263:10;15275:6;15202:12;:80::i;:::-;15361:12;15326:10;-1:-1:-1;;;;;15298:121:0;15313:11;-1:-1:-1;;;;;;;;;;;15338:11:0;15351:8;15375:10;15387:7;15396:10;15408:5;15415:3;15298:121;;;;;;;;;;;;-1:-1:-1;;;;;15298:121:0;-1:-1:-1;;;;;15298:121: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;15298:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:11;14608:850;-1:-1:-1;;;;;;;;;14608:850:0:o;25009:513::-;6017:22;;;;:9;:22;;;;;:33;;;:22;;-1:-1:-1;;;;;6017:33:0;6003:10;:47;5995:89;;;;;-1:-1:-1;;;5995:89:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5995:89:0;;;;;;;;;;;;;;;6408:1:::1;6375:22:::0;;;:9:::1;:22;::::0;;;;:30:::1;;::::0;:22;;-1:-1:-1;;;6375:30:0;::::1;;;6367:66;;;::::0;;-1:-1:-1;;;6367:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;6367:66:0;;;;;;;;;;;;;::::1;;6453:22;::::0;;;:9:::1;:22;::::0;;;;:45:::1;;::::0;::::1;;6452:46;6444:99;;;;-1:-1:-1::0;;;6444:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:18;6575:22:::0;;;:9:::1;:22;::::0;;;;:34:::1;;::::0;-1:-1:-1;;;6575:34:0;::::1;;;6628:25:::0;;;:54:::1;;;6678:3;6657:25;;:11;:25;;;6628:54;6620:109;;;;-1:-1:-1::0;;;6620:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6740:17;6760:22:::0;;;:9:::1;:22;::::0;;;;:33:::1;;::::0;-1:-1:-1;;;6760:33:0;::::1;;;6812:15:::0;;;:44:::1;;;6852:3;6831:25;;:10;:25;;;;6812:44;6804:86;;;::::0;;-1:-1:-1;;;6804:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;6804:86:0;;;;;;;;;;;;;::::1;;25220:11:::0;25233:12;8121:16;;8117:134:::2;;8162:22;::::0;;;:9:::2;:22;::::0;;;;:27:::2;;::::0;:43;-1:-1:-1;8162:43:0::2;8154:85;;;::::0;;-1:-1:-1;;;8154:85:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;8154:85:0;;;;;;;;;;;;;::::2;;25310:1:::3;25280:22:::0;;;:9:::3;:22;::::0;;;;:27:::3;;::::0;25272:110:::3;;;;-1:-1:-1::0;;;25272:110:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25393:22;::::0;;;:9:::3;:22;::::0;;;;;:45:::3;;:52:::0;;-1:-1:-1;;25393:52:0::3;25441:4;25393:52;::::0;;25461:53;-1:-1:-1;;;;;25461:53:0;::::3;::::0;25403:11;;25461:53:::3;::::0;25393:22;25461:53:::3;6901:1:::2;;6095::::1;;;25009:513:::0;;;;:::o;2132:19::-;;;-1:-1:-1;;;;;2132:19:0;;:::o;26128:511::-;6017:22;;;;:9;:22;;;;;:33;;;:22;;-1:-1:-1;;;;;6017:33:0;6003:10;:47;5995:89;;;;;-1:-1:-1;;;5995:89:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5995:89:0;;;;;;;;;;;;;;;6991:22:::1;::::0;;;:9:::1;:22;::::0;;;;:45:::1;;::::0;26287:11;;6991:45:::1;;6983:94;;;;-1:-1:-1::0;;;6983:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26335:24:0;::::2;26327:62;;;::::0;;-1:-1:-1;;;26327:62:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;26327:62:0;;;;;;;;;;;;;::::2;;26405:32;::::0;26430:6;;26417:11;;26405:32:::2;::::0;;;::::2;26498:5;26450:22:::0;;;:9:::2;:22;::::0;;;;:45:::2;;:53:::0;;-1:-1:-1;;26450:53:0::2;::::0;;26514:60:::2;::::0;26460:11;;26547:6;;26555:8;;26498:5;26514:19:::2;:60::i;:::-;26585:44;26606:11;26619:6;26627:1;26585:20;:44::i;:::-;6095:1:::1;26128:511:::0;;;;:::o;33692:560::-;33927:56;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33927:56:0;;;;;-1:-1:-1;;;33927:56:0;;;;;;26:21:-1;;;22:32;;6:49;;33927:56:0;;;;;;;33917:67;;;;;-1:-1:-1;;33896:88:0;;33892:133;;;-1:-1:-1;34009:4:0;34002:11;;33892:133;34070:57;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34070:57:0;;;;;-1:-1:-1;34070:57:0;;;;;;26:21:-1;;;22:32;;6:49;;34070:57:0;;;;;;;34060:68;;;;;34039:89;;34035:135;;;-1:-1:-1;34153:5:0;34146:12;;34035:135;34180:64;;-1:-1:-1;;;34180:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33692:560;;;;;;;;:::o;1534:133::-;1592:7;1620:5;;;1639:6;;;;1632:14;;;;1660:1;-1:-1:-1;1534:133:0;;;;;:::o;34260:2465::-;34489:7;34498;34710:13;34706:492;;;34740:21;34888:26;;;:11;:26;;;;;:38;:26;;-1:-1:-1;;;34888:38:0;;;;34883:304;;34954:26;;;;:11;:26;;;;;34947:33;;-1:-1:-1;;34947:33:0;;;;;;-1:-1:-1;35007:12:0;;-1:-1:-1;35021:5:0;34999:28;;34883:304;35077:26;;;;:11;:26;;;;;:42;;;;;35138:33;;-1:-1:-1;;35138:33:0;;;;;;;;35077:42;-1:-1:-1;34706:492:0;35224:11;35214:6;:21;35210:1465;;;-1:-1:-1;;;;;35258:21:0;;35254:1408;;35495:22;;;;:9;:22;;;;;:29;;;35440:4;;-1:-1:-1;35440:4:0;;35478:47;;:12;;:47;:16;:47;:::i;:::-;35576:1;35544:22;;;:9;:22;;;;;:29;;:33;35463:62;-1:-1:-1;35254:1408:0;;;35613:5;-1:-1:-1;;;;;35605:13:0;:4;-1:-1:-1;;;;;35605:13:0;;35601:1061;;36248:27;36295:4;36279:12;:20;;36278:44;;36310:12;36278:44;;;36303:4;36278:44;36248:74;-1:-1:-1;36408:68:0;36418:11;36431:5;36438:37;:12;36248:74;36438:37;:16;:37;:::i;36408:68::-;36587:4;36579:12;;36625:19;36610:34;;35601:1061;;-1:-1:-1;36695:12:0;;-1:-1:-1;36709:5:0;34260:2465;;;;;;;;;;;;:::o;33484:200::-;-1:-1:-1;;;;;33598:16:0;;;;;;:9;:16;;;;;;:27;;33619:5;33598:27;:20;:27;:::i;:::-;-1:-1:-1;;;;;33579:16:0;;;;;;:9;:16;;;;;;;;;:46;;;;33641:35;;;;;;;33579:16;;33650:11;;33641:35;;;;;;;;;;33484:200;;;:::o;15466:728::-;15544:11;15540:50;;15572:7;;15540:50;15626:10;15602:11;15616:21;;;:9;:21;;;;;;15724:7;;15720:266;;15759:6;15752:3;:13;15748:227;;15810:15;:3;15818:6;15810:15;:7;:15;:::i;:::-;15796:10;15786:21;;;;:9;:21;;;;;:39;-1:-1:-1;15844:7:0;;15748:227;15900:15;:6;15911:3;15900:15;:10;:15;:::i;:::-;15944:10;15958:1;15934:21;;;:9;:21;;;;;:25;15891:24;-1:-1:-1;15748:227:0;16052:5;;;:53;;;-1:-1:-1;;;16052:53:0;;16071:10;16052:53;;;;16091:4;16052:53;;;;;;;;;;;;-1:-1:-1;;;;;16052:5:0;;;;:18;;:53;;;;;;;;;;;;;;;;;:5;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;16052:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16052:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16052:53:0;16044:123;;;;-1:-1:-1;;;16044:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16178:7;15466:728;;:::o;953:180::-;1011:7;1031:6;1027:37;;-1:-1:-1;1055:1:0;1048:8;;1027:37;1082:5;;;1086:1;1082;:5;:1;1101:5;;;;;:10;1094:18;;;23584:688;23749:24;23803:22;;;:9;:22;;;;;;;;;:35;;;;23786:109;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23786:109:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;23786:109:0;;;;;;;23776:120;;;;;24007:8;;24003:75;;24032:22;;;;:9;:22;;;;;:27;;:34;;;24003:75;24088:22;;;;:9;:22;;;;;;;;;:35;;;:54;;;24160:104;;;;;;;;;;;;;;;;;24245:3;24160:104;;;;;;;;;;;;;-1:-1:-1;;;;;24160:104:0;;;24098:11;;24160:104;;;;;;;;;23584:688;;;;;;:::o;24280:241::-;24393:22;;;;:9;:22;;;;;:34;;:43;;;24484:29;:15;24491:3;24484:15;;;24500:12;;24484:15;:29;:::i;:::-;24447:22;;;;:9;:22;;;;;;:34;;:66;;;;;;;-1:-1:-1;;;24447:66:0;-1:-1:-1;;;;;24447:66:0;;;;;;;;;;-1:-1:-1;;24280:241:0:o;16202:1527::-;6225:22;;;;:9;:22;;;;;:30;;;:22;;-1:-1:-1;;;6225:30:0;;;;:35;6217:71;;;;;-1:-1:-1;;;6217:71:0;;;;;;;;;;;;-1:-1:-1;;;6217:71:0;;;;;;;;;;;;;;;16420:6;16530:11:::1;::::0;::::1;16522:48;;;::::0;;-1:-1:-1;;;16522:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;16522:48:0;;;;;;;;;;;;;::::1;;16599:8;16589:7;:18;;;16581:65;;;;-1:-1:-1::0;;;16581:65:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16665:26:0;::::1;16657:61;;;::::0;;-1:-1:-1;;;16657:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;16657:61:0;;;;;;;;;;;;;::::1;;17116:10;-1:-1:-1::0;;;;;17116:24:0;::::1;;17112:331;;-1:-1:-1::0;;;;;17180:36:0;::::1;17157:20;17180:36:::0;;;:24:::1;:36;::::0;;;;;17239:22;;::::1;;17231:74;;;;-1:-1:-1::0;;;17231:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17329:24;:6:::0;17340:12;17329:24:::1;:10;:24;:::i;:::-;-1:-1:-1::0;;;;;17392:21:0;::::1;;::::0;;;:9:::1;:21;::::0;;;;;17320:33;;-1:-1:-1;17392:39:0::1;::::0;17418:12;17392:39:::1;:25;:39;:::i;:::-;-1:-1:-1::0;;;;;17368:21:0;::::1;;::::0;;;:9:::1;:21;::::0;;;;:63;-1:-1:-1;17112:331:0::1;17455:22;::::0;;;:9:::1;:22;::::0;;;;;:50;;;-1:-1:-1;;17516:33:0::1;::::0;::::1;:46:::0;;-1:-1:-1;;;;;;17516:46:0::1;-1:-1:-1::0;;;;;17516:46:0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;17573:46:0::1;-1:-1:-1::0;;;17573:46:0::1;::::0;;::::1;;;-1:-1:-1::0;;;;17630:40:0::1;-1:-1:-1::0;;;17630:40:0;;;::::1;::::0;;;::::1;;::::0;;17681:29:::1;;:38:::0;16202:1527::o;19605:400::-;3127:1;19713:26;;;:11;:26;;;;;:36;;;:63;19705:109;;;;-1:-1:-1;;;19705:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19827:25;19855:22;;;:9;:22;;;;;:30;;;3258:1;;-1:-1:-1;;;19855:30:0;;:57;:30;:57;;-1:-1:-1;19962:35:0;:15;19969:3;19962:15;;;19855:57;;19962:15;:35;:::i;:::-;19923:26;;;;:11;:26;;;;;;:74;;-1:-1:-1;;19923:74:0;;;;;;;;;;;;-1:-1:-1;;19605:400:0:o;1415:113::-;1473:7;1501:1;1496;:6;;1489:14;;;;-1:-1:-1;1517:5:0;;;1415:113::o;1936:129::-;1992:6;2018:5;;;2037:6;;;;;;;;;2030:14;;

Swarm Source

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