{
  "_format": "hh-sol-artifact-1",
  "contractName": "WitnetMockedOracle",
  "sourceName": "contracts/mocks/WitnetMockedOracle.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract WitnetMockedRequestBytecodes",
          "name": "_registry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "EmptyBuffer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "range",
          "type": "uint256"
        }
      ],
      "name": "IndexOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "InvalidLengthEncoding",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "read",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        }
      ],
      "name": "UnexpectedMajorType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "unexpected",
          "type": "uint256"
        }
      ],
      "name": "UnsupportedMajorType",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "queryId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "reason",
          "type": "string"
        }
      ],
      "name": "BatchReportError",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Received",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "reporters",
          "type": "address[]"
        }
      ],
      "name": "ReportersSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "reporters",
          "type": "address[]"
        }
      ],
      "name": "ReportersUnset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "baseAddr",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "baseCodehash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "versionTag",
          "type": "string"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmReward",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "indexed": false,
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "witnetSLA",
          "type": "tuple"
        }
      ],
      "name": "WitnetQuery",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryResponse",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmCallbackGas",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryResponseDelivered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "resultCborBytes",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmGasPrice",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmCallbackActualGas",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "evmCallbackRevertReason",
          "type": "string"
        }
      ],
      "name": "WitnetQueryResponseDeliveryFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "evmReward",
          "type": "uint256"
        }
      ],
      "name": "WitnetQueryRewardUpgraded",
      "type": "event"
    },
    {
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "base",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "channel",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "class",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "codehash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_codehash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "_resultMaxSize",
          "type": "uint16"
        }
      ],
      "name": "estimateBaseFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "radHash",
          "type": "bytes32"
        }
      ],
      "name": "estimateBaseFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint24",
          "name": "_callbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "estimateBaseFeeWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_witnetQueryIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txGasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nanoWitPrice",
          "type": "uint256"
        }
      ],
      "name": "estimateReportEarnings",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_revenues",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_expenses",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_queryIds",
          "type": "uint256[]"
        }
      ],
      "name": "extractWitnetDataRequests",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "_bytecodes",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "contract WitnetRequestFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "fetchQueryResponse",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "reporter",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "finality",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "resultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "resultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "resultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct WitnetV2.Response",
          "name": "_response",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNextQueryId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQuery",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "requester",
                  "type": "address"
                },
                {
                  "internalType": "uint24",
                  "name": "gasCallback",
                  "type": "uint24"
                },
                {
                  "internalType": "uint72",
                  "name": "evmReward",
                  "type": "uint72"
                },
                {
                  "internalType": "bytes",
                  "name": "witnetBytecode",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32",
                  "name": "witnetRAD",
                  "type": "bytes32"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "committeeSize",
                      "type": "uint8"
                    },
                    {
                      "internalType": "uint64",
                      "name": "witnessingFeeNanoWit",
                      "type": "uint64"
                    }
                  ],
                  "internalType": "struct WitnetV2.RadonSLA",
                  "name": "witnetSLA",
                  "type": "tuple"
                }
              ],
              "internalType": "struct WitnetV2.Request",
              "name": "request",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "reporter",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "finality",
                  "type": "uint64"
                },
                {
                  "internalType": "uint32",
                  "name": "resultTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "bytes32",
                  "name": "resultTallyHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "resultCborBytes",
                  "type": "bytes"
                }
              ],
              "internalType": "struct WitnetV2.Response",
              "name": "response",
              "type": "tuple"
            }
          ],
          "internalType": "struct WitnetV2.Query",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryEvmReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryRequest",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "requester",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "gasCallback",
              "type": "uint24"
            },
            {
              "internalType": "uint72",
              "name": "evmReward",
              "type": "uint72"
            },
            {
              "internalType": "bytes",
              "name": "witnetBytecode",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "witnetRAD",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "committeeSize",
                  "type": "uint8"
                },
                {
                  "internalType": "uint64",
                  "name": "witnessingFeeNanoWit",
                  "type": "uint64"
                }
              ],
              "internalType": "struct WitnetV2.RadonSLA",
              "name": "witnetSLA",
              "type": "tuple"
            }
          ],
          "internalType": "struct WitnetV2.Request",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResponse",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "reporter",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "finality",
              "type": "uint64"
            },
            {
              "internalType": "uint32",
              "name": "resultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "resultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "resultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct WitnetV2.Response",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResponseStatus",
      "outputs": [
        {
          "internalType": "enum WitnetV2.ResponseStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResultCborBytes",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryResultError",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum Witnet.ResultErrorCodes",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "reason",
              "type": "string"
            }
          ],
          "internalType": "struct Witnet.ResultError",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "getQueryStatus",
      "outputs": [
        {
          "internalType": "enum WitnetV2.QueryStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "_witnetQueryIds",
          "type": "uint256[]"
        }
      ],
      "name": "getQueryStatusBatch",
      "outputs": [
        {
          "internalType": "enum WitnetV2.QueryStatus[]",
          "name": "_status",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_reporter",
          "type": "address"
        }
      ],
      "name": "isReporter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isUpgradable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        }
      ],
      "name": "isUpgradableFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_queryRAD",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        }
      ],
      "name": "postRequest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_queryUnverifiedBytecode",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        },
        {
          "internalType": "uint24",
          "name": "_queryCallbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "postRequestWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_queryRAD",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "committeeSize",
              "type": "uint8"
            },
            {
              "internalType": "uint64",
              "name": "witnessingFeeNanoWit",
              "type": "uint64"
            }
          ],
          "internalType": "struct WitnetV2.RadonSLA",
          "name": "_querySLA",
          "type": "tuple"
        },
        {
          "internalType": "uint24",
          "name": "_queryCallbackGasLimit",
          "type": "uint24"
        }
      ],
      "name": "postRequestWithCallback",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract WitnetRequestBytecodes",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_witnetQueryResultTallyHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_witnetQueryResultCborBytes",
          "type": "bytes"
        }
      ],
      "name": "reportResult",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_witnetQueryResultTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_witnetQueryResultTallyHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_witnetQueryResultCborBytes",
          "type": "bytes"
        }
      ],
      "name": "reportResult",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "queryId",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "queryResultTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "queryResultTallyHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "queryResultCborBytes",
              "type": "bytes"
            }
          ],
          "internalType": "struct IWitnetOracleReporter.BatchResult[]",
          "name": "_batchResults",
          "type": "tuple[]"
        }
      ],
      "name": "reportResultBatch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_batchReward",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract WitnetMockedRequestFactory",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "setFactory",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_reporters",
          "type": "address[]"
        }
      ],
      "name": "setReporters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "specs",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_exReporters",
          "type": "address[]"
        }
      ],
      "name": "unsetReporters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_witnetQueryId",
          "type": "uint256"
        }
      ],
      "name": "upgradeQueryEvmReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610240604052336101005263baeca88b60e01b6101605234801561002257600080fd5b50604051615dcd380380615dcd833981016040819052610041916102ec565b6000816000651b5bd8dad95960d21b61ea6061fde862011170614e208787878760008083836040518060400160405280601981526020017f696f2e7769746e65742e70726f786961626c652e626f61726400000000000000815250823360006001600160a01b0316816001600160a01b0316036100d857604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100e1816101b2565b5030608052151560c0526001600281905560e0929092528051602090910120610120526001600160a01b03928316610140529682166101a0525093909316610180525050506101c0949094526101e092909252610200526102205260009450925061014a915050565b604051908082528060200260200182016040528015610173578160200160208202803683370190505b509050338160008151811061018a5761018a61031c565b6001600160a01b03909216602092830291909101909101526101ab816101ce565b505061037f565b600180546001600160a01b03191690556101cb81610278565b50565b60005b815181101561023d5760008282815181106101ee576101ee61031c565b6020026020010151905060016102086102c860201b60201c565b6001600160a01b0392909216600090815260029092016020526040909120805460ff19169115159190911790556001016101d1565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca018160405161026d9190610332565b60405180910390a150565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e18390565b6000602082840312156102fe57600080fd5b81516001600160a01b038116811461031557600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156103735783516001600160a01b03168352928401929184019160010161034e565b50909695505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161594861048560003960008181610bc30152611ea301526000610bef015260008181610c2f0152610c7701526000611ecd0152600081816117a8015281816117f0015281816118bb01526119780152600081816106f00152818161194e01528181611b0601526120eb0152600061089b015260006109b6015260006105390152600061096401526000611b9901526000818161056a0152611d7b015260005050600081816104ef01528181610864015281816116dd0152818161173701528181611a3e0152611a6001526159486000f3fe6080604052600436106102815760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610986578063e5a6b10f146109a4578063e900aa33146109d8578063ec5946db146109eb578063f2fde38b146109fe578063f61921b214610a1e576102be565b8063aeb2ffc1146108bd578063b207e730146108ea578063bff852fa1461090a578063c45a01551461091f578063c805dd0f1461093d578063d5f3948814610952576102be565b806393d5185c1161011357806393d5185c146107c05780639cc56e67146107f5578063a3ff5b0014610815578063a77fc1a414610828578063a9e954b914610855578063adb7c3f714610889576102be565b80637b103999146106de5780637bbdb96e146107125780637bd88218146107625780638d3d8b38146107825780638da5cb5b146107a2576102be565b80635001f3b5116101f35780636280bce8116101ac5780636280bce8146105fd5780636b58960a1461061d5780636f07abcc1461063d5780636fdaab7e1461066a578063715018a6146106b457806379ba5097146106c9576102be565b80635001f3b5146104e057806352d1902d146105275780635479d9401461055b57806354fd4d501461058e578063581f5094146105b05780635bb47808146105dd576102be565b8063234fe6e311610245578063234fe6e31461041357806328a78d9b146104405780633dc2b7a214610460578063439fab911461047357806345ea6c17146104935780634c9f72e3146104c0576102be565b8063044ad7be1461033657806305e742ef1461036b57806306eb2c421461039957806308b7e85e146103b95780630aa4112a146103e6576102be565b366102be576102bc604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a3e565b005b3480156102ca57600080fd5b506102bc6102dc60003560f81c610a87565b6102ed60ff60003560f01c16610a87565b6102fe60ff60003560e81c16610a87565b61030f60ff60003560e01c16610a87565b604051602001610322949392919061432b565b604051602081830303815290604052610a3e565b34801561034257600080fd5b506103566103513660046143bf565b610b79565b60405190151581526020015b60405180910390f35b34801561037757600080fd5b5061038b6103863660046143ef565b610bbb565b604051908152602001610362565b3480156103a557600080fd5b5061038b6103b4366004614466565b610cac565b3480156103c557600080fd5b506103d96103d43660046144a7565b611016565b6040516103629190614540565b3480156103f257600080fd5b506104066104013660046144a7565b6112ad565b60405161036291906145d5565b34801561041f57600080fd5b5061043361042e3660046144a7565b611413565b6040516103629190614612565b34801561044c57600080fd5b506102bc61045b366004614685565b61141e565b61038b61046e36600461473b565b6114d7565b34801561047f57600080fd5b506102bc61048e366004614786565b6115e1565b34801561049f57600080fd5b506104b36104ae366004614466565b611ad5565b604051610362919061480b565b3480156104cc57600080fd5b506102bc6104db366004614685565b611b7e565b3480156104ec57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610362565b34801561053357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b34801561059a57600080fd5b506105a3611b92565b604051610362919061486f565b3480156105bc57600080fd5b506105d06105cb366004614466565b611bc2565b6040516103629190614892565b3480156105e957600080fd5b506102bc6105f83660046143bf565b611c7d565b34801561060957600080fd5b5061038b61061836600461491e565b611ca7565b34801561062957600080fd5b506103566106383660046143bf565b611d77565b34801561064957600080fd5b5061065d6106583660046144a7565b611dcd565b6040516103629190614970565b34801561067657600080fd5b5061038b6106853660046144a7565b60009081526000805160206158f38339815191526020526040902054600160b81b90046001600160481b031690565b3480156106c057600080fd5b506102bc611dd8565b3480156106d557600080fd5b506102bc611dec565b3480156106ea57600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071e57600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610362565b34801561076e57600080fd5b5061038b61077d36600461498e565b611e63565b34801561078e57600080fd5b506105a361079d3660046144a7565b611efb565b3480156107ae57600080fd5b506000546001600160a01b031661050f565b3480156107cc57600080fd5b506107e06107db3660046149be565b611f99565b60408051928352602083019190915201610362565b34801561080157600080fd5b5061038b610810366004614a3b565b6120c8565b61038b610823366004614a5d565b61219e565b34801561083457600080fd5b506108486108433660046144a7565b6122f8565b6040516103629190614ad2565b34801561086157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f61038b565b34801561089557600080fd5b506107497f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c957600080fd5b506108dd6108d83660046144a7565b612471565b6040516103629190614afe565b3480156108f657600080fd5b5061038b610905366004614b4b565b6126a7565b34801561091657600080fd5b506105a36127c2565b34801561092b57600080fd5b506003546001600160a01b031661050f565b34801561094957600080fd5b5061038b6127f9565b34801561095e57600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561099257600080fd5b506001546001600160a01b031661050f565b3480156109b057600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b61038b6109e6366004614bb2565b612816565b6102bc6109f93660046144a7565b6128d5565b348015610a0a57600080fd5b506102bc610a193660046143bf565b6129d3565b348015610a2a57600080fd5b506103d9610a393660046144a7565b612a44565b610a466127c2565b81604051602001610a58929190614bef565b60408051601f198184030181529082905262461bcd60e51b8252610a7e9160040161486f565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610ab9601085614c58565b610ac4906030614c7a565b90506000610ad3601086614c93565b610ade906030614c7a565b905060398260ff161115610afa57610af7600783614c7a565b91505b60398160ff161115610b1457610b11600782614c7a565b90505b8160f81b83600081518110610b2b57610b2b614cb5565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b5957610b59614cb5565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b600080610be97f00000000000000000000000000000000000000000000000000000000000000006003614ccb565b610c13907f0000000000000000000000000000000000000000000000000000000000000000614ce2565b9050808362ffffff161080610c55575080610c5362ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614ce2565b105b15610c6c57610c648185614ccb565b915050610bb5565b610c9b62ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614ce2565b610c649085614ccb565b5092915050565b6000610d0e6000805160206158d38339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff1690612b66565b60005b82811015611005576001610d48858584818110610d3057610d30614cb5565b9050602002810190610d429190614cf5565b35612b78565b6003811115610d5957610d596145e8565b14610e3e577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610d9157610d91614cb5565b9050602002810190610da39190614cf5565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610dde90600190600401614970565b600060405180830381865af4158015610dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e239190810190614d64565b604051610e31929190614d98565b60405180910390a1610ffd565b838382818110610e5057610e50614cb5565b9050602002810190610e629190614cf5565b610e73906040810190602001614db1565b63ffffffff161580610eb65750838382818110610e9257610e92614cb5565b9050602002810190610ea49190614cf5565b610eb2906060810190614dcc565b1590505b15610f34577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610eee57610eee614cb5565b9050602002810190610f009190614cf5565b35610f096127c2565b604051602001610f199190614e12565b60408051601f1981840301815290829052610e319291614d98565b610ff0848483818110610f4957610f49614cb5565b9050602002810190610f5b9190614cf5565b35858584818110610f6e57610f6e614cb5565b9050602002810190610f809190614cf5565b610f91906040810190602001614db1565b868685818110610fa357610fa3614cb5565b9050602002810190610fb59190614cf5565b60400135878786818110610fcb57610fcb614cb5565b9050602002810190610fdd9190614cf5565b610feb906060810190614dcc565b612bf9565b610ffa9083614ce2565b91505b600101610d11565b508015610bb557610bb53382612dd8565b6040805160a08101825260008082526020820181905291810182905260608082019290925260808101919091528160038061105083612b78565b6003811115611061576110616145e8565b146110f0576040516353e8875160e11b81526110eb9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b600060405180830381865af41580156110be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e69190810190614d64565b610a3e565b6112a6565b836111396110fd82612e0e565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b03909116331490612b66565b61114285612e0e565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff169282019290925260058301546060820152600690920180546080840191906111a790614e4b565b80601f01602080910402602001604051908101604052809291908181526020018280546111d390614e4b565b80156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b50505050508152505093506112406000805160206158d383398151915290565b60008681526001918201602052604081208181559182908290611265908301826141ef565b506000600282018190556003909101805468ffffffffffffffffff191690556004830181815560058401829055906112a060068501826141ef565b50505050505b5050919050565b6112f16040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b6112fa82612e0e565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061135290614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461137e90614e4b565b80156113cb5780601f106113a0576101008083540402835291602001916113cb565b820191906000526020600020905b8154815290600101906020018083116113ae57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610bb582612e2c565b611426612f44565b60005b815181101561149c57600082828151811061144657611446614cb5565b6020026020010151905060006114676000805160206158d383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101611429565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516114cc9190614e7f565b60405180910390a150565b60006114e33a846120c8565b61151c81345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b815250612b66565b61155a61152a82600a614ccb565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b815250612b66565b8261159061156782612f71565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b815250612b66565b61159c85856000612fca565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168334866040516115d193929190614ee4565b60405180910390a1505092915050565b6000546001600160a01b03166060816116345760608380602001905181019061160a9190614f2b565b90935090506116188361309e565b8080602001905181019061162c9190614f7b565b91505061168e565b611677826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b815250612b66565b8280602001905181019061168b9190614f7b565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906116ff57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b15611735576117356040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a3e565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b60208201526117d9907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b151590612b66565b6118ac630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190615014565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b815250612b66565b611a33306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b919061503e565b6001600160a01b0316148015611a0357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f8919061503e565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b815250612b66565b611a3c816130b7565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f6611abb611b92565b604051611ac8919061486f565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611b32907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161505b565b600060405180830381865af4158015611b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b7791908101906150a5565b9392505050565b611b86612f44565b611b8f816130b7565b50565b6060611bbd7f000000000000000000000000000000000000000000000000000000000000000061315d565b905090565b6060816001600160401b03811115611bdc57611bdc614620565b604051908082528060200260200182016040528015611c05578160200160208202803683370190505b50905060005b82811015610ca557611c34848483818110611c2857611c28614cb5565b90506020020135612b78565b828281518110611c4657611c46614cb5565b60200260200101906003811115611c5f57611c5f6145e8565b90816003811115611c7257611c726145e8565b905250600101611c0b565b611c85612f44565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cc06000805160206158d3833981519152610cc1565b84600180611ccd83612b78565b6003811115611cde57611cde6145e8565b14611d23576040516353e8875160e11b8152611d1e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b611d6d565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611d5d9085151590612b66565b611d6a8742888888613201565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610bb55750816001600160a01b0316611dbd6000546001600160a01b031690565b6001600160a01b03161492915050565b6000610bb582612b78565b611de0612f44565b611dea600061309e565b565b60015433906001600160a01b03168114611e5a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a7e565b611b8f8161309e565b6000602061ffff831615611e8157611e7c600184615160565b611e84565b60005b611e8e919061517b565b611e9990600461519c565b611ec79061ffff167f0000000000000000000000000000000000000000000000000000000000000000614ccb565b611ef1907f0000000000000000000000000000000000000000000000000000000000000000614ce2565b611b779084614ccb565b6060611f0682613225565b6002018054611f1490614e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4090614e4b565b8015611f8d5780601f10611f6257610100808354040283529160200191611f8d565b820191906000526020600020905b815481529060010190602001808311611f7057829003601f168201915b50505050509050919050565b60008060005b878110156120bc576001611fbe8a8a84818110611c2857611c28614cb5565b6003811115611fcf57611fcf6145e8565b036120b4576000611ff78a8a84818110611feb57611feb614cb5565b90506020020135612e0e565b805490915061201690600160b81b90046001600160481b031685614ce2565b8154909450600160a01b900462ffffff1615612056578054612045908790600160a01b900462ffffff16610bbb565b61204f9084614ce2565b9250612086565b60028101541561206e576120458682600201546120c8565b612079866000611e63565b6120839084614ce2565b92505b8461209382600301613246565b6001600160401b03166120a69190614ccb565b6120b09084614ce2565b9250505b600101611f9f565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215691906151b7565b905061218c60008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b815250612b66565b6121968482611e63565b949350505050565b60003382612258823b1580159061221957506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221991906151d4565b801561222a575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b815250612b66565b6122633a5b85610bbb565b61226d81346114e9565b61227b61152a82600a614ccb565b8561228861156782612f71565b61229460008888612fca565b945088886122a187612e0e565b600101916122b0919083615246565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168534896040516122e493929190614ee4565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152600061231883612e2c565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b84628261233e86613225565b6002016040518363ffffffff1660e01b815260040161235e929190615306565b600060405180830381865af492505050801561239c57506040513d6000823e601f3d908101601f1916820160405261239991908101906153a5565b60015b611b77576123a861543e565b806308c379a00361240457506123bc61545a565b806123c75750612406565b604080518082019091528060008152602001826040516020016123ea91906154e3565b60408051601f198184030181529190529052949350505050565b505b3d808015612430576040519150601f19603f3d011682016040523d82523d6000602084013e612435565b606091505b506040805180820190915280600081526020016040518060600160405280602181526020016158b2602191399052949350505050565b50919050565b612479614229565b60008281526000805160206158f383398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a0850191906124f490614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461252090614e4b565b801561256d5780601f106125425761010080835404028352916020019161256d565b820191906000526020600020905b81548152906001019060200180831161255057829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff16928101929092526005850154606083015260068501805494909301939192909160808401919061261b90614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461264790614e4b565b80156126945780601f1061266957610100808354040283529160200191612694565b820191906000526020600020905b81548152906001019060200180831161267757829003601f168201915b5050509190925250505090525092915050565b60006126c06000805160206158d3833981519152610cc1565b856001806126cd83612b78565b60038111156126de576126de6145e8565b14612723576040516353e8875160e11b815261271e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b6127b7565b61276d60008863ffffffff161180156127425750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b815250612b66565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526127a79085151590612b66565b6127b48888888888613201565b92505b505095945050505050565b60408051808201909152601c81527f5769746e65744f7261636c65547275737461626c6544656661756c7400000000602082015290565b60006000805160206158d383398151915254611bbd906001614ce2565b60003382612854823b1580159061221957506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024016121d8565b61285d3a61225d565b61286781346114e9565b61287561152a82600a614ccb565b8561288261156782612f71565b61288d888888612fca565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168534896040516128c293929190614ee4565b60405180910390a1505050509392505050565b806001806128e283612b78565b60038111156128f3576128f36145e8565b14612938576040516353e8875160e11b81526129339073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b505050565b600061294384612e0e565b90503481548290601790612968908490600160b81b90046001600160481b031661551c565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b6129db612f44565b600180546001600160a01b0383166001600160a01b03199091168117909155612a0c6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6040805160a0810182526000808252602082018190529181018290526060808201929092526080810191909152612a7a82613225565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff169181019190915260018201546060820152600282018054919291608084019190612add90614e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0990614e4b565b8015612b565780601f10612b2b57610100808354040283529160200191612b56565b820191906000526020600020905b815481529060010190602001808311612b3957829003601f168201915b5050505050815250509050919050565b81612b7457612b7481610a3e565b5050565b60008181526000805160206158f3833981519152602052604081206004810154600160e01b900463ffffffff1615612bd7576004810154600160a01b90046001600160401b03164310612bce5750600392915050565b50600292915050565b80546001600160a01b031615612bf05750600192915050565b50600092915050565b600080612c0587612e0e565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff1615612d5157805460009081908190612c74908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613276565b9250925092508115612cc457604080518b81523a602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612d2e565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88883a876000875111612d115760405180606001604052806029815260200161588960299139612d13565b865b604051612d259695949392919061553c565b60405180910390a15b612d498a8a8a6040518060200160405280600081525061360c565b505050612dce565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c277873a6040805192835260208301919091520160405180910390a1612dce87878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061360c92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612933573d6000803e3d6000fd5b60009081526000805160206158f38339815191526020526040902090565b600080612e3883612b78565b90506003816003811115612e4e57612e4e6145e8565b03612f005760008381526000805160206158f38339815191526020526040812060060180549091908290612e8190614e4b565b90501115612ef6578054601b60fb1b908290600090612e9f90614e4b565b8110612ead57612ead614cb5565b815460011615612ecc5790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612eec576002612196565b6003949350505050565b5060059392505050565b6001816003811115612f1457612f146145e8565b03612f225750600192915050565b6002816003811115612f3657612f366145e8565b03612bf05750600492915050565b6000546001600160a01b03163314611dea5760405163118cdaa760e01b8152336004820152602401610a7e565b600080612f846040840160208501615599565b6001600160401b0316118015612fa957506000612fa460208401846155b6565b60ff16115b8015610bb55750607f612fbf60208401846155b6565b60ff16111592915050565b60006000805160206158d38339815191528054600090612fe9906155d3565b918290555090506000612ffb82612e0e565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b602082015291925061303b916001600160a01b039091161590612b66565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b031617815560028101859055836003820161309382826155ec565b905050509392505050565b600180546001600160a01b0319169055611b8f816136d9565b60005b815181101561312d5760008282815181106130d7576130d7614cb5565b6020026020010151905060016130f86000805160206158d383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff19169115159190911790556001016130ba565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516114cc9190614e7f565b6060600061316a83613729565b6001600160401b0381111561318157613181614620565b6040519080825280601f01601f1916602001820160405280156131ab576020820181803683370190505b50905060005b8151811015610ca5578381602081106131cc576131cc614cb5565b1a60f81b8282815181106131e2576131e2614cb5565b60200101906001600160f81b031916908160001a9053506001016131b1565b60006132108686868686612bf9565b905061321c3382612dd8565b95945050505050565b60009081526000805160206158f38339815191526020526040902060040190565b80546000906132599060ff166003614c7a565b8254610bb59160ff169061010090046001600160401b031661563c565b60008060605a9250601b60fb1b878760008161329457613294614cb5565b9050013560f81c60f81b6001600160f81b031916036134e45760006132f66132f189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061376792505050565b61378c565b905060028151101561341d57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b81526004016133aa969594939291906156e8565b600060405180830381600088803b1580156133c457600080fd5b5087f1935050505080156133d6575060015b613414576133e261543e565b806308c379a00361340857506133f661545a565b80613401575061340a565b91506134de565b505b3d6000803e3d6000fd5b600192506134de565b856001600160a01b03166363febc9c868d8d8d436134548860008151811061344757613447614cb5565b602002602001015161393c565b60fe811115613465576134656145e8565b8860008151811061347857613478614cb5565b60200260200101516040518863ffffffff1660e01b81526004016134a1969594939291906156e8565b600060405180830381600088803b1580156134bb57600080fd5b5087f1935050505080156134cd575060015b6134d9576133e261543e565b600192505b506135f2565b846001600160a01b031663bcc6307b858c8c8c436135378e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061376792505050565b6040518763ffffffff1660e01b8152600401613557959493929190615735565b600060405180830381600088803b15801561357157600080fd5b5087f193505050508015613583575060015b6135ed5761358f61543e565b806308c379a0036135b557506135a361545a565b806135ae57506135b7565b90506135f2565b505b3d8080156135e1576040519150601f19603f3d011682016040523d82523d6000602084013e6135e6565b606091505b50506135f2565b600191505b5a6135fd9084615769565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061365485612e0e565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136d0908261577c565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137625781816020811061374757613747614cb5565b1a60f81b6001600160f81b031916156137625760010161372c565b919050565b61376f6142ab565b6040805180820190915282815260006020820152611b778161399f565b60608160048060ff16826040015160ff16146137cc57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b60006137e085600001518660600151613abf565b90506137ed81600161583b565b6001600160401b03166001600160401b0381111561380d5761380d614620565b60405190808252806020026020018201604052801561384657816020015b6138336142ab565b81526020019060019003908161382b5790505b50935060005b816001600160401b031681101561390c5761386686613b87565b955061387186613baf565b85828151811061388357613883614cb5565b6020026020010181905250600460ff16866040015160ff16036138dc5760006138ab8761378c565b905080600182516138bc9190615769565b815181106138cc576138cc614cb5565b6020026020010151965050613904565b600560ff16866040015160ff16036138f95760006138ab87613c47565b61390286613e31565b505b60010161384c565b508484826001600160401b03168151811061392957613929614cb5565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461397c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b61398e84600001518560600151613abf565b6001600160401b0316949350505050565b6139a76142ab565b81515182906000036139cc576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a4f576139ec89613ff6565b9550816139f8816155d3565b6007600589901c169650601f881695509250506005198501613a47576020890151613a238a86613abf565b9350808a60200151613a359190615769565b613a3f9084614ce2565b9250506139dd565b5060006139dd565b600760ff86161115613a795760405163bd2ac87960e01b815260ff86166004820152602401610a7e565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ad7575060ff8116610bb5565b8160ff16601803613af557613aeb83613ff6565b60ff169050610bb5565b8160ff16601903613b1457613b0983614058565b61ffff169050610bb5565b8160ff16601a03613b3557613b28836140c4565b63ffffffff169050610bb5565b8160ff16601b03613b5057613b4983614123565b9050610bb5565b8160ff16601f03613b6957506001600160401b03610bb5565b604051636d785b1360e01b815260ff83166004820152602401610a7e565b613b8f6142ab565b81518051516020909101511015613bab578151610bb59061399f565b5090565b613bb76142ab565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c8757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b6000613c9b85600001518660600151613abf565b613ca690600261563c565b9050613cb381600161583b565b6001600160401b03166001600160401b03811115613cd357613cd3614620565b604051908082528060200260200182016040528015613d0c57816020015b613cf96142ab565b815260200190600190039081613cf15790505b50935060005b816001600160401b031681101561390c57613d2c86613b87565b9550613d3786613baf565b858281518110613d4957613d49614cb5565b6020908102919091010152613d5f60028261585b565b158015613d745750604086015160ff16600314155b15613da257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a7e565b604086015160ff1660041480613dbf5750604086015160ff166005145b15613e1e57604086015160009060ff16600414613de457613ddf87613c47565b613ded565b613ded8761378c565b90508060018251613dfe9190615769565b81518110613e0e57613e0e614cb5565b6020026020010151965050613e29565b613e2786613e31565b505b600101613d12565b613e396142ab565b604082015160ff161580613e545750604082015160ff166001145b80613e8d5750604082015160ff166007148015613e7957506019826060015160ff1610155b8015613e8d5750601b826060015160ff1611155b15613ec057613e9b82614182565b6001600160401b03168260000151602001818151613eb99190614ce2565b9052505090565b604082015160ff1660031480613edd5750604082015160ff166002145b15613f21576000613ef683600001518460600151613abf565b9050806001600160401b03168360000151602001818151613f179190614ce2565b905250613bab9050565b604082015160ff1660041480613f3e5750604082015160ff166005145b15613f6757613f5582600001518360600151613abf565b6001600160401b031660808301525090565b604082015160ff166007141580613f995750816060015160ff16601414158015613f995750816060015160ff16601514155b15613bab5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a7e565b600081602001518260000151518082111561402e576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b835160208501805180830160010151955090819061404b826155d3565b8152505050505050919050565b60008160200151600261406b9190614ce2565b82515180821115614099576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516002818401810151965090916140b78284614ce2565b9052509395945050505050565b6000816020015160046140d79190614ce2565b82515180821115614105576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516004818401810151965090916140b78284614ce2565b6000816020015160086141369190614ce2565b82515180821115614164576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516008818401810151965090916140b78284614ce2565b60006018826060015160ff16101561419c57506000919050565b601c826060015160ff1610156141cb57601882606001516141bd919061586f565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a7e565b5080546141fb90614e4b565b6000825580601f1061420b575050565b601f016020900490600052602060002090810190611b8f91906142f2565b60405180604001604052806142786040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526040805160a08101825260008082526020828101829052928201819052606080830191909152608082015291015290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613bab57600081556001016142f3565b60005b8381101561432257818101518382015260200161430a565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614359816013850160208a01614307565b855190830190614370816013840160208a01614307565b8551910190614386816013840160208901614307565b845191019061439c816013840160208801614307565b016013019695505050505050565b6001600160a01b0381168114611b8f57600080fd5b6000602082840312156143d157600080fd5b8135611b77816143aa565b803562ffffff8116811461376257600080fd5b6000806040838503121561440257600080fd5b82359150614412602084016143dc565b90509250929050565b60008083601f84011261442d57600080fd5b5081356001600160401b0381111561444457600080fd5b6020830191508360208260051b850101111561445f57600080fd5b9250929050565b6000806020838503121561447957600080fd5b82356001600160401b0381111561448f57600080fd5b61449b8582860161441b565b90969095509350505050565b6000602082840312156144b957600080fd5b5035919050565b600081518084526144d8816020860160208601614307565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a0608085015261219660a08501826144c0565b602081526000611b7760208301846144ec565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261459c60e08501826144c0565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000611b776020830184614553565b634e487b7160e01b600052602160045260246000fd5b6006811061460e5761460e6145e8565b9052565b60208101610bb582846145fe565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561465b5761465b614620565b6040525050565b60006001600160401b0382111561467b5761467b614620565b5060051b60200190565b6000602080838503121561469857600080fd5b82356001600160401b038111156146ae57600080fd5b8301601f810185136146bf57600080fd5b80356146ca81614662565b6040516146d78282614636565b82815260059290921b83018401918481019150878311156146f757600080fd5b928401925b8284101561471e57833561470f816143aa565b825292840192908401906146fc565b979650505050505050565b60006040828403121561246b57600080fd5b6000806060838503121561474e57600080fd5b823591506144128460208501614729565b60006001600160401b0382111561477857614778614620565b50601f01601f191660200190565b60006020828403121561479857600080fd5b81356001600160401b038111156147ae57600080fd5b8201601f810184136147bf57600080fd5b80356147ca8161475f565b6040516147d78282614636565b8281528660208486010111156147ec57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561486257603f198886030184526148508583516144c0565b94509285019290850190600101614834565b5092979650505050505050565b602081526000611b7760208301846144c0565b6004811061460e5761460e6145e8565b6020808252825182820181905260009190848201906040850190845b818110156148d1576148c1838551614882565b92840192918401916001016148ae565b50909695505050505050565b60008083601f8401126148ef57600080fd5b5081356001600160401b0381111561490657600080fd5b60208301915083602082850101111561445f57600080fd5b6000806000806060858703121561493457600080fd5b843593506020850135925060408501356001600160401b0381111561495857600080fd5b614964878288016148dd565b95989497509550505050565b60208101610bb58284614882565b61ffff81168114611b8f57600080fd5b600080604083850312156149a157600080fd5b8235915060208301356149b38161497e565b809150509250929050565b600080600080600080608087890312156149d757600080fd5b86356001600160401b03808211156149ee57600080fd5b6149fa8a838b0161441b565b90985096506020890135915080821115614a1357600080fd5b50614a2089828a016148dd565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a4e57600080fd5b50508035926020909101359150565b60008060008060808587031215614a7357600080fd5b84356001600160401b03811115614a8957600080fd5b614a95878288016148dd565b9095509350614aa990508660208701614729565b9150614ab7606086016143dc565b905092959194509250565b60ff811061460e5761460e6145e8565b60208152614ae4602082018351614ac2565b6000602083015160408084015261219660608401826144c0565b602081526000825160406020840152614b1a6060840182614553565b90506020840151601f1984830301604085015261321c82826144ec565b803563ffffffff8116811461376257600080fd5b600080600080600060808688031215614b6357600080fd5b85359450614b7360208701614b37565b93506040860135925060608601356001600160401b03811115614b9557600080fd5b614ba1888289016148dd565b969995985093965092949392505050565b600080600060808486031215614bc757600080fd5b83359250614bd88560208601614729565b9150614be6606085016143dc565b90509250925092565b60008351614c01818460208801614307565b6101d160f51b9083019081528351614c20816002840160208801614307565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c6b57614c6b614c2c565b8060ff84160491505092915050565b60ff8181168382160190811115610bb557610bb5614c42565b600060ff831680614ca657614ca6614c2c565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610bb557610bb5614c42565b80820180821115610bb557610bb5614c42565b60008235607e19833603018112614d0b57600080fd5b9190910192915050565b600082601f830112614d2657600080fd5b8151614d318161475f565b604051614d3e8282614636565b828152856020848701011115614d5357600080fd5b61321c836020830160208801614307565b600060208284031215614d7657600080fd5b81516001600160401b03811115614d8c57600080fd5b61219684828501614d15565b82815260406020820152600061219660408301846144c0565b600060208284031215614dc357600080fd5b611b7782614b37565b6000808335601e19843603018112614de357600080fd5b8301803591506001600160401b03821115614dfd57600080fd5b60200191503681900382131561445f57600080fd5b60008251614e24818460208701614307565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b600181811c90821680614e5f57607f821691505b60208210810361246b57634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148d15783516001600160a01b031683529284019291840191600101614e9b565b60ff81168114611b8f57600080fd5b6001600160401b0381168114611b8f57600080fd5b83815260208101839052608081018235614efd81614ec0565b60ff1660408301526020830135614f1381614ecf565b6001600160401b038116606084015250949350505050565b60008060408385031215614f3e57600080fd5b8251614f49816143aa565b60208401519092506001600160401b03811115614f6557600080fd5b614f7185828601614d15565b9150509250929050565b60006020808385031215614f8e57600080fd5b82516001600160401b03811115614fa457600080fd5b8301601f81018513614fb557600080fd5b8051614fc081614662565b604051614fcd8282614636565b82815260059290921b8301840191848101915087831115614fed57600080fd5b928401925b8284101561471e578351615005816143aa565b82529284019290840190614ff2565b60006020828403121561502657600080fd5b81516001600160e01b031981168114611b7757600080fd5b60006020828403121561505057600080fd5b8151611b77816143aa565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561508b57600080fd5b8260051b8085606085013791909101606001949350505050565b600060208083850312156150b857600080fd5b82516001600160401b03808211156150cf57600080fd5b818501915085601f8301126150e357600080fd5b81516150ee81614662565b6040516150fb8282614636565b82815260059290921b840185019185810191508883111561511b57600080fd5b8585015b83811015615153578051858111156151375760008081fd5b6151458b89838a0101614d15565b84525091860191860161511f565b5098975050505050505050565b61ffff828116828216039080821115610ca557610ca5614c42565b600061ffff8084168061519057615190614c2c565b92169190910492915050565b61ffff818116838216019080821115610ca557610ca5614c42565b6000602082840312156151c957600080fd5b8151611b778161497e565b6000602082840312156151e657600080fd5b81518015158114611b7757600080fd5b601f821115612933576000816000526020600020601f850160051c8101602086101561521f5750805b601f850160051c820191505b8181101561523e5782815560010161522b565b505050505050565b6001600160401b0383111561525d5761525d614620565b6152718361526b8354614e4b565b836151f6565b6000601f8411600181146152a5576000851561528d5750838201355b600019600387901b1c1916600186901b1783556152ff565b600083815260209020601f19861690835b828110156152d657868501358255602094850194600190920191016152b6565b50868210156152f35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b61531081846145fe565b60006020604060208401526000845461532881614e4b565b806040870152606060018084166000811461534a576001811461536657615396565b60ff19851660608a0152606084151560051b8a01019550615396565b89600052602060002060005b8581101561538d5781548b8201860152908301908801615372565b8a016060019650505b50939998505050505050505050565b6000602082840312156153b757600080fd5b81516001600160401b03808211156153ce57600080fd5b90830190604082860312156153e257600080fd5b6040516040810181811083821117156153fd576153fd614620565b604052825160ff811061540f57600080fd5b815260208301518281111561542357600080fd5b61542f87828601614d15565b60208301525095945050505050565b600060033d11156154575760046000803e5060005160e01c5b90565b600060443d10156154685790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561549757505050505090565b82850191508151818111156154af5750505050505090565b843d87010160208285010111156154c95750505050505090565b6154d860208286010187614636565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b81526000825161550f816011850160208701614307565b9190910160110192915050565b6001600160481b03818116838216019080821115610ca557610ca5614c42565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261558c60c08201856144c0565b9998505050505050505050565b6000602082840312156155ab57600080fd5b8135611b7781614ecf565b6000602082840312156155c857600080fd5b8135611b7781614ec0565b6000600182016155e5576155e5614c42565b5060010190565b81356155f781614ec0565b60ff8116905081548160ff198216178355602084013561561681614ecf565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b6001600160401b0381811683821602808216919082811461565f5761565f614c42565b505092915050565b6000815160c084528051604060c08601526156866101008601826144c0565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526157136080820184614ac2565b60c060a0820152600061572960c0830184615667565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a06080820152600061471e60a0830184615667565b81810381811115610bb557610bb5614c42565b81516001600160401b0381111561579557615795614620565b6157a9816157a38454614e4b565b846151f6565b602080601f8311600181146157de57600084156157c65750858301515b600019600386901b1c1916600185901b17855561523e565b600085815260208120601f198616915b8281101561580d578886015182559484019460019091019084016157ee565b508582101561582b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115610ca557610ca5614c42565b60008261586a5761586a614c2c565b500690565b60ff8281168282160390811115610bb557610bb5614c4256fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220311dd5827e0b369a4d34ef6769cbb3341019580975853c031633da09b1e3369364736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106102815760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610986578063e5a6b10f146109a4578063e900aa33146109d8578063ec5946db146109eb578063f2fde38b146109fe578063f61921b214610a1e576102be565b8063aeb2ffc1146108bd578063b207e730146108ea578063bff852fa1461090a578063c45a01551461091f578063c805dd0f1461093d578063d5f3948814610952576102be565b806393d5185c1161011357806393d5185c146107c05780639cc56e67146107f5578063a3ff5b0014610815578063a77fc1a414610828578063a9e954b914610855578063adb7c3f714610889576102be565b80637b103999146106de5780637bbdb96e146107125780637bd88218146107625780638d3d8b38146107825780638da5cb5b146107a2576102be565b80635001f3b5116101f35780636280bce8116101ac5780636280bce8146105fd5780636b58960a1461061d5780636f07abcc1461063d5780636fdaab7e1461066a578063715018a6146106b457806379ba5097146106c9576102be565b80635001f3b5146104e057806352d1902d146105275780635479d9401461055b57806354fd4d501461058e578063581f5094146105b05780635bb47808146105dd576102be565b8063234fe6e311610245578063234fe6e31461041357806328a78d9b146104405780633dc2b7a214610460578063439fab911461047357806345ea6c17146104935780634c9f72e3146104c0576102be565b8063044ad7be1461033657806305e742ef1461036b57806306eb2c421461039957806308b7e85e146103b95780630aa4112a146103e6576102be565b366102be576102bc604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a3e565b005b3480156102ca57600080fd5b506102bc6102dc60003560f81c610a87565b6102ed60ff60003560f01c16610a87565b6102fe60ff60003560e81c16610a87565b61030f60ff60003560e01c16610a87565b604051602001610322949392919061432b565b604051602081830303815290604052610a3e565b34801561034257600080fd5b506103566103513660046143bf565b610b79565b60405190151581526020015b60405180910390f35b34801561037757600080fd5b5061038b6103863660046143ef565b610bbb565b604051908152602001610362565b3480156103a557600080fd5b5061038b6103b4366004614466565b610cac565b3480156103c557600080fd5b506103d96103d43660046144a7565b611016565b6040516103629190614540565b3480156103f257600080fd5b506104066104013660046144a7565b6112ad565b60405161036291906145d5565b34801561041f57600080fd5b5061043361042e3660046144a7565b611413565b6040516103629190614612565b34801561044c57600080fd5b506102bc61045b366004614685565b61141e565b61038b61046e36600461473b565b6114d7565b34801561047f57600080fd5b506102bc61048e366004614786565b6115e1565b34801561049f57600080fd5b506104b36104ae366004614466565b611ad5565b604051610362919061480b565b3480156104cc57600080fd5b506102bc6104db366004614685565b611b7e565b3480156104ec57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610362565b34801561053357600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b34801561059a57600080fd5b506105a3611b92565b604051610362919061486f565b3480156105bc57600080fd5b506105d06105cb366004614466565b611bc2565b6040516103629190614892565b3480156105e957600080fd5b506102bc6105f83660046143bf565b611c7d565b34801561060957600080fd5b5061038b61061836600461491e565b611ca7565b34801561062957600080fd5b506103566106383660046143bf565b611d77565b34801561064957600080fd5b5061065d6106583660046144a7565b611dcd565b6040516103629190614970565b34801561067657600080fd5b5061038b6106853660046144a7565b60009081526000805160206158f38339815191526020526040902054600160b81b90046001600160481b031690565b3480156106c057600080fd5b506102bc611dd8565b3480156106d557600080fd5b506102bc611dec565b3480156106ea57600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071e57600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610362565b34801561076e57600080fd5b5061038b61077d36600461498e565b611e63565b34801561078e57600080fd5b506105a361079d3660046144a7565b611efb565b3480156107ae57600080fd5b506000546001600160a01b031661050f565b3480156107cc57600080fd5b506107e06107db3660046149be565b611f99565b60408051928352602083019190915201610362565b34801561080157600080fd5b5061038b610810366004614a3b565b6120c8565b61038b610823366004614a5d565b61219e565b34801561083457600080fd5b506108486108433660046144a7565b6122f8565b6040516103629190614ad2565b34801561086157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f61038b565b34801561089557600080fd5b506107497f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c957600080fd5b506108dd6108d83660046144a7565b612471565b6040516103629190614afe565b3480156108f657600080fd5b5061038b610905366004614b4b565b6126a7565b34801561091657600080fd5b506105a36127c2565b34801561092b57600080fd5b506003546001600160a01b031661050f565b34801561094957600080fd5b5061038b6127f9565b34801561095e57600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561099257600080fd5b506001546001600160a01b031661050f565b3480156109b057600080fd5b5061050f7f000000000000000000000000000000000000000000000000000000000000000081565b61038b6109e6366004614bb2565b612816565b6102bc6109f93660046144a7565b6128d5565b348015610a0a57600080fd5b506102bc610a193660046143bf565b6129d3565b348015610a2a57600080fd5b506103d9610a393660046144a7565b612a44565b610a466127c2565b81604051602001610a58929190614bef565b60408051601f198184030181529082905262461bcd60e51b8252610a7e9160040161486f565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610ab9601085614c58565b610ac4906030614c7a565b90506000610ad3601086614c93565b610ade906030614c7a565b905060398260ff161115610afa57610af7600783614c7a565b91505b60398160ff161115610b1457610b11600782614c7a565b90505b8160f81b83600081518110610b2b57610b2b614cb5565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b5957610b59614cb5565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b600080610be97f00000000000000000000000000000000000000000000000000000000000000006003614ccb565b610c13907f0000000000000000000000000000000000000000000000000000000000000000614ce2565b9050808362ffffff161080610c55575080610c5362ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614ce2565b105b15610c6c57610c648185614ccb565b915050610bb5565b610c9b62ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614ce2565b610c649085614ccb565b5092915050565b6000610d0e6000805160206158d38339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff1690612b66565b60005b82811015611005576001610d48858584818110610d3057610d30614cb5565b9050602002810190610d429190614cf5565b35612b78565b6003811115610d5957610d596145e8565b14610e3e577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610d9157610d91614cb5565b9050602002810190610da39190614cf5565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610dde90600190600401614970565b600060405180830381865af4158015610dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e239190810190614d64565b604051610e31929190614d98565b60405180910390a1610ffd565b838382818110610e5057610e50614cb5565b9050602002810190610e629190614cf5565b610e73906040810190602001614db1565b63ffffffff161580610eb65750838382818110610e9257610e92614cb5565b9050602002810190610ea49190614cf5565b610eb2906060810190614dcc565b1590505b15610f34577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610eee57610eee614cb5565b9050602002810190610f009190614cf5565b35610f096127c2565b604051602001610f199190614e12565b60408051601f1981840301815290829052610e319291614d98565b610ff0848483818110610f4957610f49614cb5565b9050602002810190610f5b9190614cf5565b35858584818110610f6e57610f6e614cb5565b9050602002810190610f809190614cf5565b610f91906040810190602001614db1565b868685818110610fa357610fa3614cb5565b9050602002810190610fb59190614cf5565b60400135878786818110610fcb57610fcb614cb5565b9050602002810190610fdd9190614cf5565b610feb906060810190614dcc565b612bf9565b610ffa9083614ce2565b91505b600101610d11565b508015610bb557610bb53382612dd8565b6040805160a08101825260008082526020820181905291810182905260608082019290925260808101919091528160038061105083612b78565b6003811115611061576110616145e8565b146110f0576040516353e8875160e11b81526110eb9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b600060405180830381865af41580156110be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e69190810190614d64565b610a3e565b6112a6565b836111396110fd82612e0e565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b03909116331490612b66565b61114285612e0e565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff169282019290925260058301546060820152600690920180546080840191906111a790614e4b565b80601f01602080910402602001604051908101604052809291908181526020018280546111d390614e4b565b80156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b50505050508152505093506112406000805160206158d383398151915290565b60008681526001918201602052604081208181559182908290611265908301826141ef565b506000600282018190556003909101805468ffffffffffffffffff191690556004830181815560058401829055906112a060068501826141ef565b50505050505b5050919050565b6112f16040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b6112fa82612e0e565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061135290614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461137e90614e4b565b80156113cb5780601f106113a0576101008083540402835291602001916113cb565b820191906000526020600020905b8154815290600101906020018083116113ae57829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610bb582612e2c565b611426612f44565b60005b815181101561149c57600082828151811061144657611446614cb5565b6020026020010151905060006114676000805160206158d383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101611429565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516114cc9190614e7f565b60405180910390a150565b60006114e33a846120c8565b61151c81345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b815250612b66565b61155a61152a82600a614ccb565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b815250612b66565b8261159061156782612f71565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b815250612b66565b61159c85856000612fca565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168334866040516115d193929190614ee4565b60405180910390a1505092915050565b6000546001600160a01b03166060816116345760608380602001905181019061160a9190614f2b565b90935090506116188361309e565b8080602001905181019061162c9190614f7b565b91505061168e565b611677826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b815250612b66565b8280602001905181019061168b9190614f7b565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906116ff57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b15611735576117356040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a3e565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b60208201526117d9907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b151590612b66565b6118ac630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190615014565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b815250612b66565b611a33306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b919061503e565b6001600160a01b0316148015611a0357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f8919061503e565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b815250612b66565b611a3c816130b7565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f6611abb611b92565b604051611ac8919061486f565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611b32907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161505b565b600060405180830381865af4158015611b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b7791908101906150a5565b9392505050565b611b86612f44565b611b8f816130b7565b50565b6060611bbd7f000000000000000000000000000000000000000000000000000000000000000061315d565b905090565b6060816001600160401b03811115611bdc57611bdc614620565b604051908082528060200260200182016040528015611c05578160200160208202803683370190505b50905060005b82811015610ca557611c34848483818110611c2857611c28614cb5565b90506020020135612b78565b828281518110611c4657611c46614cb5565b60200260200101906003811115611c5f57611c5f6145e8565b90816003811115611c7257611c726145e8565b905250600101611c0b565b611c85612f44565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000611cc06000805160206158d3833981519152610cc1565b84600180611ccd83612b78565b6003811115611cde57611cde6145e8565b14611d23576040516353e8875160e11b8152611d1e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b611d6d565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611d5d9085151590612b66565b611d6a8742888888613201565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610bb55750816001600160a01b0316611dbd6000546001600160a01b031690565b6001600160a01b03161492915050565b6000610bb582612b78565b611de0612f44565b611dea600061309e565b565b60015433906001600160a01b03168114611e5a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a7e565b611b8f8161309e565b6000602061ffff831615611e8157611e7c600184615160565b611e84565b60005b611e8e919061517b565b611e9990600461519c565b611ec79061ffff167f0000000000000000000000000000000000000000000000000000000000000000614ccb565b611ef1907f0000000000000000000000000000000000000000000000000000000000000000614ce2565b611b779084614ccb565b6060611f0682613225565b6002018054611f1490614e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4090614e4b565b8015611f8d5780601f10611f6257610100808354040283529160200191611f8d565b820191906000526020600020905b815481529060010190602001808311611f7057829003601f168201915b50505050509050919050565b60008060005b878110156120bc576001611fbe8a8a84818110611c2857611c28614cb5565b6003811115611fcf57611fcf6145e8565b036120b4576000611ff78a8a84818110611feb57611feb614cb5565b90506020020135612e0e565b805490915061201690600160b81b90046001600160481b031685614ce2565b8154909450600160a01b900462ffffff1615612056578054612045908790600160a01b900462ffffff16610bbb565b61204f9084614ce2565b9250612086565b60028101541561206e576120458682600201546120c8565b612079866000611e63565b6120839084614ce2565b92505b8461209382600301613246565b6001600160401b03166120a69190614ccb565b6120b09084614ce2565b9250505b600101611f9f565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215691906151b7565b905061218c60008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b815250612b66565b6121968482611e63565b949350505050565b60003382612258823b1580159061221957506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221991906151d4565b801561222a575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b815250612b66565b6122633a5b85610bbb565b61226d81346114e9565b61227b61152a82600a614ccb565b8561228861156782612f71565b61229460008888612fca565b945088886122a187612e0e565b600101916122b0919083615246565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168534896040516122e493929190614ee4565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152600061231883612e2c565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b84628261233e86613225565b6002016040518363ffffffff1660e01b815260040161235e929190615306565b600060405180830381865af492505050801561239c57506040513d6000823e601f3d908101601f1916820160405261239991908101906153a5565b60015b611b77576123a861543e565b806308c379a00361240457506123bc61545a565b806123c75750612406565b604080518082019091528060008152602001826040516020016123ea91906154e3565b60408051601f198184030181529190529052949350505050565b505b3d808015612430576040519150601f19603f3d011682016040523d82523d6000602084013e612435565b606091505b506040805180820190915280600081526020016040518060600160405280602181526020016158b2602191399052949350505050565b50919050565b612479614229565b60008281526000805160206158f383398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a0850191906124f490614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461252090614e4b565b801561256d5780601f106125425761010080835404028352916020019161256d565b820191906000526020600020905b81548152906001019060200180831161255057829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff16928101929092526005850154606083015260068501805494909301939192909160808401919061261b90614e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461264790614e4b565b80156126945780601f1061266957610100808354040283529160200191612694565b820191906000526020600020905b81548152906001019060200180831161267757829003601f168201915b5050509190925250505090525092915050565b60006126c06000805160206158d3833981519152610cc1565b856001806126cd83612b78565b60038111156126de576126de6145e8565b14612723576040516353e8875160e11b815261271e9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b6127b7565b61276d60008863ffffffff161180156127425750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b815250612b66565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526127a79085151590612b66565b6127b48888888888613201565b92505b505095945050505050565b60408051808201909152601c81527f5769746e65744f7261636c65547275737461626c6544656661756c7400000000602082015290565b60006000805160206158d383398151915254611bbd906001614ce2565b60003382612854823b1580159061221957506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024016121d8565b61285d3a61225d565b61286781346114e9565b61287561152a82600a614ccb565b8561288261156782612f71565b61288d888888612fca565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a6168534896040516128c293929190614ee4565b60405180910390a1505050509392505050565b806001806128e283612b78565b60038111156128f3576128f36145e8565b14612938576040516353e8875160e11b81526129339073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea2906110a1908590600401614970565b505050565b600061294384612e0e565b90503481548290601790612968908490600160b81b90046001600160481b031661551c565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b6129db612f44565b600180546001600160a01b0383166001600160a01b03199091168117909155612a0c6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6040805160a0810182526000808252602082018190529181018290526060808201929092526080810191909152612a7a82613225565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff169181019190915260018201546060820152600282018054919291608084019190612add90614e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0990614e4b565b8015612b565780601f10612b2b57610100808354040283529160200191612b56565b820191906000526020600020905b815481529060010190602001808311612b3957829003601f168201915b5050505050815250509050919050565b81612b7457612b7481610a3e565b5050565b60008181526000805160206158f3833981519152602052604081206004810154600160e01b900463ffffffff1615612bd7576004810154600160a01b90046001600160401b03164310612bce5750600392915050565b50600292915050565b80546001600160a01b031615612bf05750600192915050565b50600092915050565b600080612c0587612e0e565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff1615612d5157805460009081908190612c74908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613276565b9250925092508115612cc457604080518b81523a602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612d2e565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88883a876000875111612d115760405180606001604052806029815260200161588960299139612d13565b865b604051612d259695949392919061553c565b60405180910390a15b612d498a8a8a6040518060200160405280600081525061360c565b505050612dce565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c277873a6040805192835260208301919091520160405180910390a1612dce87878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061360c92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612933573d6000803e3d6000fd5b60009081526000805160206158f38339815191526020526040902090565b600080612e3883612b78565b90506003816003811115612e4e57612e4e6145e8565b03612f005760008381526000805160206158f38339815191526020526040812060060180549091908290612e8190614e4b565b90501115612ef6578054601b60fb1b908290600090612e9f90614e4b565b8110612ead57612ead614cb5565b815460011615612ecc5790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612eec576002612196565b6003949350505050565b5060059392505050565b6001816003811115612f1457612f146145e8565b03612f225750600192915050565b6002816003811115612f3657612f366145e8565b03612bf05750600492915050565b6000546001600160a01b03163314611dea5760405163118cdaa760e01b8152336004820152602401610a7e565b600080612f846040840160208501615599565b6001600160401b0316118015612fa957506000612fa460208401846155b6565b60ff16115b8015610bb55750607f612fbf60208401846155b6565b60ff16111592915050565b60006000805160206158d38339815191528054600090612fe9906155d3565b918290555090506000612ffb82612e0e565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b602082015291925061303b916001600160a01b039091161590612b66565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b031617815560028101859055836003820161309382826155ec565b905050509392505050565b600180546001600160a01b0319169055611b8f816136d9565b60005b815181101561312d5760008282815181106130d7576130d7614cb5565b6020026020010151905060016130f86000805160206158d383398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff19169115159190911790556001016130ba565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516114cc9190614e7f565b6060600061316a83613729565b6001600160401b0381111561318157613181614620565b6040519080825280601f01601f1916602001820160405280156131ab576020820181803683370190505b50905060005b8151811015610ca5578381602081106131cc576131cc614cb5565b1a60f81b8282815181106131e2576131e2614cb5565b60200101906001600160f81b031916908160001a9053506001016131b1565b60006132108686868686612bf9565b905061321c3382612dd8565b95945050505050565b60009081526000805160206158f38339815191526020526040902060040190565b80546000906132599060ff166003614c7a565b8254610bb59160ff169061010090046001600160401b031661563c565b60008060605a9250601b60fb1b878760008161329457613294614cb5565b9050013560f81c60f81b6001600160f81b031916036134e45760006132f66132f189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061376792505050565b61378c565b905060028151101561341d57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b81526004016133aa969594939291906156e8565b600060405180830381600088803b1580156133c457600080fd5b5087f1935050505080156133d6575060015b613414576133e261543e565b806308c379a00361340857506133f661545a565b80613401575061340a565b91506134de565b505b3d6000803e3d6000fd5b600192506134de565b856001600160a01b03166363febc9c868d8d8d436134548860008151811061344757613447614cb5565b602002602001015161393c565b60fe811115613465576134656145e8565b8860008151811061347857613478614cb5565b60200260200101516040518863ffffffff1660e01b81526004016134a1969594939291906156e8565b600060405180830381600088803b1580156134bb57600080fd5b5087f1935050505080156134cd575060015b6134d9576133e261543e565b600192505b506135f2565b846001600160a01b031663bcc6307b858c8c8c436135378e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061376792505050565b6040518763ffffffff1660e01b8152600401613557959493929190615735565b600060405180830381600088803b15801561357157600080fd5b5087f193505050508015613583575060015b6135ed5761358f61543e565b806308c379a0036135b557506135a361545a565b806135ae57506135b7565b90506135f2565b505b3d8080156135e1576040519150601f19603f3d011682016040523d82523d6000602084013e6135e6565b606091505b50506135f2565b600191505b5a6135fd9084615769565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061365485612e0e565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136d0908261577c565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137625781816020811061374757613747614cb5565b1a60f81b6001600160f81b031916156137625760010161372c565b919050565b61376f6142ab565b6040805180820190915282815260006020820152611b778161399f565b60608160048060ff16826040015160ff16146137cc57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b60006137e085600001518660600151613abf565b90506137ed81600161583b565b6001600160401b03166001600160401b0381111561380d5761380d614620565b60405190808252806020026020018201604052801561384657816020015b6138336142ab565b81526020019060019003908161382b5790505b50935060005b816001600160401b031681101561390c5761386686613b87565b955061387186613baf565b85828151811061388357613883614cb5565b6020026020010181905250600460ff16866040015160ff16036138dc5760006138ab8761378c565b905080600182516138bc9190615769565b815181106138cc576138cc614cb5565b6020026020010151965050613904565b600560ff16866040015160ff16036138f95760006138ab87613c47565b61390286613e31565b505b60010161384c565b508484826001600160401b03168151811061392957613929614cb5565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461397c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b61398e84600001518560600151613abf565b6001600160401b0316949350505050565b6139a76142ab565b81515182906000036139cc576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a4f576139ec89613ff6565b9550816139f8816155d3565b6007600589901c169650601f881695509250506005198501613a47576020890151613a238a86613abf565b9350808a60200151613a359190615769565b613a3f9084614ce2565b9250506139dd565b5060006139dd565b600760ff86161115613a795760405163bd2ac87960e01b815260ff86166004820152602401610a7e565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ad7575060ff8116610bb5565b8160ff16601803613af557613aeb83613ff6565b60ff169050610bb5565b8160ff16601903613b1457613b0983614058565b61ffff169050610bb5565b8160ff16601a03613b3557613b28836140c4565b63ffffffff169050610bb5565b8160ff16601b03613b5057613b4983614123565b9050610bb5565b8160ff16601f03613b6957506001600160401b03610bb5565b604051636d785b1360e01b815260ff83166004820152602401610a7e565b613b8f6142ab565b81518051516020909101511015613bab578151610bb59061399f565b5090565b613bb76142ab565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c8757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a7e565b6000613c9b85600001518660600151613abf565b613ca690600261563c565b9050613cb381600161583b565b6001600160401b03166001600160401b03811115613cd357613cd3614620565b604051908082528060200260200182016040528015613d0c57816020015b613cf96142ab565b815260200190600190039081613cf15790505b50935060005b816001600160401b031681101561390c57613d2c86613b87565b9550613d3786613baf565b858281518110613d4957613d49614cb5565b6020908102919091010152613d5f60028261585b565b158015613d745750604086015160ff16600314155b15613da257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a7e565b604086015160ff1660041480613dbf5750604086015160ff166005145b15613e1e57604086015160009060ff16600414613de457613ddf87613c47565b613ded565b613ded8761378c565b90508060018251613dfe9190615769565b81518110613e0e57613e0e614cb5565b6020026020010151965050613e29565b613e2786613e31565b505b600101613d12565b613e396142ab565b604082015160ff161580613e545750604082015160ff166001145b80613e8d5750604082015160ff166007148015613e7957506019826060015160ff1610155b8015613e8d5750601b826060015160ff1611155b15613ec057613e9b82614182565b6001600160401b03168260000151602001818151613eb99190614ce2565b9052505090565b604082015160ff1660031480613edd5750604082015160ff166002145b15613f21576000613ef683600001518460600151613abf565b9050806001600160401b03168360000151602001818151613f179190614ce2565b905250613bab9050565b604082015160ff1660041480613f3e5750604082015160ff166005145b15613f6757613f5582600001518360600151613abf565b6001600160401b031660808301525090565b604082015160ff166007141580613f995750816060015160ff16601414158015613f995750816060015160ff16601514155b15613bab5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a7e565b600081602001518260000151518082111561402e576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b835160208501805180830160010151955090819061404b826155d3565b8152505050505050919050565b60008160200151600261406b9190614ce2565b82515180821115614099576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516002818401810151965090916140b78284614ce2565b9052509395945050505050565b6000816020015160046140d79190614ce2565b82515180821115614105576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516004818401810151965090916140b78284614ce2565b6000816020015160086141369190614ce2565b82515180821115614164576040516363a056dd60e01b81526004810183905260248101829052604401610a7e565b83516020850180516008818401810151965090916140b78284614ce2565b60006018826060015160ff16101561419c57506000919050565b601c826060015160ff1610156141cb57601882606001516141bd919061586f565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a7e565b5080546141fb90614e4b565b6000825580601f1061420b575050565b601f016020900490600052602060002090810190611b8f91906142f2565b60405180604001604052806142786040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526040805160a08101825260008082526020828101829052928201819052606080830191909152608082015291015290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613bab57600081556001016142f3565b60005b8381101561432257818101518382015260200161430a565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614359816013850160208a01614307565b855190830190614370816013840160208a01614307565b8551910190614386816013840160208901614307565b845191019061439c816013840160208801614307565b016013019695505050505050565b6001600160a01b0381168114611b8f57600080fd5b6000602082840312156143d157600080fd5b8135611b77816143aa565b803562ffffff8116811461376257600080fd5b6000806040838503121561440257600080fd5b82359150614412602084016143dc565b90509250929050565b60008083601f84011261442d57600080fd5b5081356001600160401b0381111561444457600080fd5b6020830191508360208260051b850101111561445f57600080fd5b9250929050565b6000806020838503121561447957600080fd5b82356001600160401b0381111561448f57600080fd5b61449b8582860161441b565b90969095509350505050565b6000602082840312156144b957600080fd5b5035919050565b600081518084526144d8816020860160208601614307565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a0608085015261219660a08501826144c0565b602081526000611b7760208301846144ec565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261459c60e08501826144c0565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000611b776020830184614553565b634e487b7160e01b600052602160045260246000fd5b6006811061460e5761460e6145e8565b9052565b60208101610bb582846145fe565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561465b5761465b614620565b6040525050565b60006001600160401b0382111561467b5761467b614620565b5060051b60200190565b6000602080838503121561469857600080fd5b82356001600160401b038111156146ae57600080fd5b8301601f810185136146bf57600080fd5b80356146ca81614662565b6040516146d78282614636565b82815260059290921b83018401918481019150878311156146f757600080fd5b928401925b8284101561471e57833561470f816143aa565b825292840192908401906146fc565b979650505050505050565b60006040828403121561246b57600080fd5b6000806060838503121561474e57600080fd5b823591506144128460208501614729565b60006001600160401b0382111561477857614778614620565b50601f01601f191660200190565b60006020828403121561479857600080fd5b81356001600160401b038111156147ae57600080fd5b8201601f810184136147bf57600080fd5b80356147ca8161475f565b6040516147d78282614636565b8281528660208486010111156147ec57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561486257603f198886030184526148508583516144c0565b94509285019290850190600101614834565b5092979650505050505050565b602081526000611b7760208301846144c0565b6004811061460e5761460e6145e8565b6020808252825182820181905260009190848201906040850190845b818110156148d1576148c1838551614882565b92840192918401916001016148ae565b50909695505050505050565b60008083601f8401126148ef57600080fd5b5081356001600160401b0381111561490657600080fd5b60208301915083602082850101111561445f57600080fd5b6000806000806060858703121561493457600080fd5b843593506020850135925060408501356001600160401b0381111561495857600080fd5b614964878288016148dd565b95989497509550505050565b60208101610bb58284614882565b61ffff81168114611b8f57600080fd5b600080604083850312156149a157600080fd5b8235915060208301356149b38161497e565b809150509250929050565b600080600080600080608087890312156149d757600080fd5b86356001600160401b03808211156149ee57600080fd5b6149fa8a838b0161441b565b90985096506020890135915080821115614a1357600080fd5b50614a2089828a016148dd565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a4e57600080fd5b50508035926020909101359150565b60008060008060808587031215614a7357600080fd5b84356001600160401b03811115614a8957600080fd5b614a95878288016148dd565b9095509350614aa990508660208701614729565b9150614ab7606086016143dc565b905092959194509250565b60ff811061460e5761460e6145e8565b60208152614ae4602082018351614ac2565b6000602083015160408084015261219660608401826144c0565b602081526000825160406020840152614b1a6060840182614553565b90506020840151601f1984830301604085015261321c82826144ec565b803563ffffffff8116811461376257600080fd5b600080600080600060808688031215614b6357600080fd5b85359450614b7360208701614b37565b93506040860135925060608601356001600160401b03811115614b9557600080fd5b614ba1888289016148dd565b969995985093965092949392505050565b600080600060808486031215614bc757600080fd5b83359250614bd88560208601614729565b9150614be6606085016143dc565b90509250925092565b60008351614c01818460208801614307565b6101d160f51b9083019081528351614c20816002840160208801614307565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c6b57614c6b614c2c565b8060ff84160491505092915050565b60ff8181168382160190811115610bb557610bb5614c42565b600060ff831680614ca657614ca6614c2c565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610bb557610bb5614c42565b80820180821115610bb557610bb5614c42565b60008235607e19833603018112614d0b57600080fd5b9190910192915050565b600082601f830112614d2657600080fd5b8151614d318161475f565b604051614d3e8282614636565b828152856020848701011115614d5357600080fd5b61321c836020830160208801614307565b600060208284031215614d7657600080fd5b81516001600160401b03811115614d8c57600080fd5b61219684828501614d15565b82815260406020820152600061219660408301846144c0565b600060208284031215614dc357600080fd5b611b7782614b37565b6000808335601e19843603018112614de357600080fd5b8301803591506001600160401b03821115614dfd57600080fd5b60200191503681900382131561445f57600080fd5b60008251614e24818460208701614307565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b600181811c90821680614e5f57607f821691505b60208210810361246b57634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148d15783516001600160a01b031683529284019291840191600101614e9b565b60ff81168114611b8f57600080fd5b6001600160401b0381168114611b8f57600080fd5b83815260208101839052608081018235614efd81614ec0565b60ff1660408301526020830135614f1381614ecf565b6001600160401b038116606084015250949350505050565b60008060408385031215614f3e57600080fd5b8251614f49816143aa565b60208401519092506001600160401b03811115614f6557600080fd5b614f7185828601614d15565b9150509250929050565b60006020808385031215614f8e57600080fd5b82516001600160401b03811115614fa457600080fd5b8301601f81018513614fb557600080fd5b8051614fc081614662565b604051614fcd8282614636565b82815260059290921b8301840191848101915087831115614fed57600080fd5b928401925b8284101561471e578351615005816143aa565b82529284019290840190614ff2565b60006020828403121561502657600080fd5b81516001600160e01b031981168114611b7757600080fd5b60006020828403121561505057600080fd5b8151611b77816143aa565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561508b57600080fd5b8260051b8085606085013791909101606001949350505050565b600060208083850312156150b857600080fd5b82516001600160401b03808211156150cf57600080fd5b818501915085601f8301126150e357600080fd5b81516150ee81614662565b6040516150fb8282614636565b82815260059290921b840185019185810191508883111561511b57600080fd5b8585015b83811015615153578051858111156151375760008081fd5b6151458b89838a0101614d15565b84525091860191860161511f565b5098975050505050505050565b61ffff828116828216039080821115610ca557610ca5614c42565b600061ffff8084168061519057615190614c2c565b92169190910492915050565b61ffff818116838216019080821115610ca557610ca5614c42565b6000602082840312156151c957600080fd5b8151611b778161497e565b6000602082840312156151e657600080fd5b81518015158114611b7757600080fd5b601f821115612933576000816000526020600020601f850160051c8101602086101561521f5750805b601f850160051c820191505b8181101561523e5782815560010161522b565b505050505050565b6001600160401b0383111561525d5761525d614620565b6152718361526b8354614e4b565b836151f6565b6000601f8411600181146152a5576000851561528d5750838201355b600019600387901b1c1916600186901b1783556152ff565b600083815260209020601f19861690835b828110156152d657868501358255602094850194600190920191016152b6565b50868210156152f35760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b61531081846145fe565b60006020604060208401526000845461532881614e4b565b806040870152606060018084166000811461534a576001811461536657615396565b60ff19851660608a0152606084151560051b8a01019550615396565b89600052602060002060005b8581101561538d5781548b8201860152908301908801615372565b8a016060019650505b50939998505050505050505050565b6000602082840312156153b757600080fd5b81516001600160401b03808211156153ce57600080fd5b90830190604082860312156153e257600080fd5b6040516040810181811083821117156153fd576153fd614620565b604052825160ff811061540f57600080fd5b815260208301518281111561542357600080fd5b61542f87828601614d15565b60208301525095945050505050565b600060033d11156154575760046000803e5060005160e01c5b90565b600060443d10156154685790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561549757505050505090565b82850191508151818111156154af5750505050505090565b843d87010160208285010111156154c95750505050505090565b6154d860208286010187614636565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b81526000825161550f816011850160208701614307565b9190910160110192915050565b6001600160481b03818116838216019080821115610ca557610ca5614c42565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261558c60c08201856144c0565b9998505050505050505050565b6000602082840312156155ab57600080fd5b8135611b7781614ecf565b6000602082840312156155c857600080fd5b8135611b7781614ec0565b6000600182016155e5576155e5614c42565b5060010190565b81356155f781614ec0565b60ff8116905081548160ff198216178355602084013561561681614ecf565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b6001600160401b0381811683821602808216919082811461565f5761565f614c42565b505092915050565b6000815160c084528051604060c08601526156866101008601826144c0565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526157136080820184614ac2565b60c060a0820152600061572960c0830184615667565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a06080820152600061471e60a0830184615667565b81810381811115610bb557610bb5614c42565b81516001600160401b0381111561579557615795614620565b6157a9816157a38454614e4b565b846151f6565b602080601f8311600181146157de57600084156157c65750858301515b600019600386901b1c1916600185901b17855561523e565b600085815260208120601f198616915b8281101561580d578886015182559484019460019091019084016157ee565b508582101561582b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115610ca557610ca5614c42565b60008261586a5761586a614c2c565b500690565b60ff8281168282160390811115610bb557610bb5614c4256fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220311dd5827e0b369a4d34ef6769cbb3341019580975853c031633da09b1e3369364736f6c63430008190033",
  "linkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 4666
        },
        {
          "length": 20,
          "start": 5374
        },
        {
          "length": 20,
          "start": 8043
        },
        {
          "length": 20,
          "start": 8571
        },
        {
          "length": 20,
          "start": 11131
        },
        {
          "length": 20,
          "start": 11664
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 10145
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 3509
        },
        {
          "length": 20,
          "start": 4217
        },
        {
          "length": 20,
          "start": 6886
        },
        {
          "length": 20,
          "start": 7414
        },
        {
          "length": 20,
          "start": 9974
        },
        {
          "length": 20,
          "start": 10507
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 8988
        }
      ]
    }
  }
}
