{
  "_format": "hh-sol-artifact-1",
  "contractName": "WitnetOracleTrustableObscuro",
  "sourceName": "contracts/core/customs/WitnetOracleTrustableObscuro.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract WitnetRequestFactory",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "contract WitnetRequestBytecodes",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_upgradable",
          "type": "bool"
        },
        {
          "internalType": "bytes32",
          "name": "_versionTag",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultWithCallbackGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_reportResultWithCallbackRevertGasBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_sstoreFromZeroGas",
          "type": "uint256"
        }
      ],
      "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": "_queryId",
          "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": "_queryId",
          "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": "_response",
          "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": "_queryId",
          "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": "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": "0x610240604052336101005263baeca88b60e01b6101605234801561002257600080fd5b50604051615c7c380380615c7c833981016040819052610041916101b6565b87878787878787878787878760008083836040518060400160405280601981526020017f696f2e7769746e65742e70726f786961626c652e626f61726400000000000000815250823360006001600160a01b0316816001600160a01b0316036100c457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100cd81610135565b5030608052151560c052600160025560e091909152805160209091012061012052506001600160a01b03908116610140529485166101a05250505016610180526101c0939093526101e0919091526102005261022052506102389a5050505050505050505050565b600180546001600160a01b031916905561014e81610151565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461014e57600080fd5b600080600080600080600080610100898b0312156101d357600080fd5b88516101de816101a1565b60208a01519098506101ef816101a1565b60408a0151909750801515811461020557600080fd5b60608a015160808b015160a08c015160c08d015160e0909d01519b9e9a9d50929b919a9099929850909650945092505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161593761034560003960008181610bad0152611e3e01526000610bd9015260008181610c190152610c6101526000611e680152600081816109030152818161176d015281816117b501528181611880015261193d0152600081816106c50152818161191301528181611acb015261208601526000610870015260006109a00152600061052e0152600061094e01526000611b5e01526000818161055f0152611d16015260005050600081816104e401528181610839015281816116a2015281816116fc01528181611a030152611a2501526159376000f3fe6080604052600436106102765760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610970578063e5a6b10f1461098e578063e900aa33146109c2578063ec5946db146109d5578063f2fde38b146109e8578063f61921b214610a08576102b3565b8063aeb2ffc114610892578063b207e730146108bf578063bff852fa146108df578063c45a0155146108f4578063c805dd0f14610927578063d5f394881461093c576102b3565b806393d5185c1161011357806393d5185c146107955780639cc56e67146107ca578063a3ff5b00146107ea578063a77fc1a4146107fd578063a9e954b91461082a578063adb7c3f71461085e576102b3565b80637b103999146106b35780637bbdb96e146106e75780637bd88218146107375780638d3d8b38146107575780638da5cb5b14610777576102b3565b80635001f3b5116101e85780636280bce8116101ac5780636280bce8146105d25780636b58960a146105f25780636f07abcc146106125780636fdaab7e1461063f578063715018a61461068957806379ba50971461069e576102b3565b80635001f3b5146104d557806352d1902d1461051c5780635479d9401461055057806354fd4d5014610583578063581f5094146105a5576102b3565b8063234fe6e31161023a578063234fe6e31461040857806328a78d9b146104355780633dc2b7a214610455578063439fab911461046857806345ea6c17146104885780634c9f72e3146104b5576102b3565b8063044ad7be1461032b57806305e742ef1461036057806306eb2c421461038e57806308b7e85e146103ae5780630aa4112a146103db576102b3565b366102b3576102b1604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a28565b005b3480156102bf57600080fd5b506102b16102d160003560f81c610a71565b6102e260ff60003560f01c16610a71565b6102f360ff60003560e81c16610a71565b61030460ff60003560e01c16610a71565b604051602001610317949392919061431a565b604051602081830303815290604052610a28565b34801561033757600080fd5b5061034b6103463660046143ae565b610b63565b60405190151581526020015b60405180910390f35b34801561036c57600080fd5b5061038061037b3660046143de565b610ba5565b604051908152602001610357565b34801561039a57600080fd5b506103806103a9366004614455565b610c96565b3480156103ba57600080fd5b506103ce6103c9366004614496565b611000565b604051610357919061452f565b3480156103e757600080fd5b506103fb6103f6366004614496565b611272565b60405161035791906145c4565b34801561041457600080fd5b50610428610423366004614496565b6113d8565b6040516103579190614601565b34801561044157600080fd5b506102b1610450366004614674565b6113e3565b61038061046336600461472a565b61149c565b34801561047457600080fd5b506102b1610483366004614775565b6115a6565b34801561049457600080fd5b506104a86104a3366004614455565b611a9a565b60405161035791906147fa565b3480156104c157600080fd5b506102b16104d0366004614674565b611b43565b3480156104e157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610357565b34801561052857600080fd5b506103807f000000000000000000000000000000000000000000000000000000000000000081565b34801561055c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034b565b34801561058f57600080fd5b50610598611b57565b604051610357919061485e565b3480156105b157600080fd5b506105c56105c0366004614455565b611b87565b6040516103579190614881565b3480156105de57600080fd5b506103806105ed36600461490d565b611c42565b3480156105fe57600080fd5b5061034b61060d3660046143ae565b611d12565b34801561061e57600080fd5b5061063261062d366004614496565b611d68565b604051610357919061495f565b34801561064b57600080fd5b5061038061065a366004614496565b60009081526000805160206158e28339815191526020526040902054600160b81b90046001600160481b031690565b34801561069557600080fd5b506102b1611d73565b3480156106aa57600080fd5b506102b1611d87565b3480156106bf57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f357600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610357565b34801561074357600080fd5b5061038061075236600461497d565b611dfe565b34801561076357600080fd5b50610598610772366004614496565b611e96565b34801561078357600080fd5b506000546001600160a01b0316610504565b3480156107a157600080fd5b506107b56107b03660046149ad565b611f34565b60408051928352602083019190915201610357565b3480156107d657600080fd5b506103806107e5366004614a2a565b612063565b6103806107f8366004614a4c565b612139565b34801561080957600080fd5b5061081d610818366004614496565b612293565b6040516103579190614ac1565b34801561083657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f610380565b34801561086a57600080fd5b5061071e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561089e57600080fd5b506108b26108ad366004614496565b6122c7565b6040516103579190614aed565b3480156108cb57600080fd5b506103806108da366004614b3a565b6122e5565b3480156108eb57600080fd5b50610598612400565b34801561090057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610504565b34801561093357600080fd5b50610380612437565b34801561094857600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b34801561097c57600080fd5b506001546001600160a01b0316610504565b34801561099a57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b6103806109d0366004614ba1565b612454565b6102b16109e3366004614496565b612513565b3480156109f457600080fd5b506102b1610a033660046143ae565b612611565b348015610a1457600080fd5b506103ce610a23366004614496565b612682565b610a30612400565b81604051602001610a42929190614bde565b60408051601f198184030181529082905262461bcd60e51b8252610a689160040161485e565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610aa3601085614c47565b610aae906030614c69565b90506000610abd601086614c82565b610ac8906030614c69565b905060398260ff161115610ae457610ae1600783614c69565b91505b60398160ff161115610afe57610afb600782614c69565b90505b8160f81b83600081518110610b1557610b15614ca4565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b4357610b43614ca4565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b600080610bd37f00000000000000000000000000000000000000000000000000000000000000006003614cba565b610bfd907f0000000000000000000000000000000000000000000000000000000000000000614cd1565b9050808362ffffff161080610c3f575080610c3d62ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614cd1565b105b15610c5657610c4e8185614cba565b915050610b9f565b610c8562ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614cd1565b610c4e9085614cba565b5092915050565b6000610cf86000805160206158c28339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff16906126a0565b60005b82811015610fef576001610d32858584818110610d1a57610d1a614ca4565b9050602002810190610d2c9190614ce4565b356126b2565b6003811115610d4357610d436145d7565b14610e28577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610d7b57610d7b614ca4565b9050602002810190610d8d9190614ce4565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610dc89060019060040161495f565b600060405180830381865af4158015610de5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e0d9190810190614d53565b604051610e1b929190614d87565b60405180910390a1610fe7565b838382818110610e3a57610e3a614ca4565b9050602002810190610e4c9190614ce4565b610e5d906040810190602001614da0565b63ffffffff161580610ea05750838382818110610e7c57610e7c614ca4565b9050602002810190610e8e9190614ce4565b610e9c906060810190614dbb565b1590505b15610f1e577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610ed857610ed8614ca4565b9050602002810190610eea9190614ce4565b35610ef3612400565b604051602001610f039190614e01565b60408051601f1981840301815290829052610e1b9291614d87565b610fda848483818110610f3357610f33614ca4565b9050602002810190610f459190614ce4565b35858584818110610f5857610f58614ca4565b9050602002810190610f6a9190614ce4565b610f7b906040810190602001614da0565b868685818110610f8d57610f8d614ca4565b9050602002810190610f9f9190614ce4565b60400135878786818110610fb557610fb5614ca4565b9050602002810190610fc79190614ce4565b610fd5906060810190614dbb565b612733565b610fe49083614cd1565b91505b600101610cfb565b508015610b9f57610b9f3382612912565b6110086141cf565b81600380611015836126b2565b6003811115611026576110266145d7565b146110b5576040516353e8875160e11b81526110b09073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b600060405180830381865af4158015611083573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110ab9190810190614d53565b610a28565b61126b565b836110fe6110c282612948565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b039091163314906126a0565b61110785612948565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff1692820192909252600583015460608201526006909201805460808401919061116c90614e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461119890614e3a565b80156111e55780601f106111ba576101008083540402835291602001916111e5565b820191906000526020600020905b8154815290600101906020018083116111c857829003601f168201915b50505050508152505093506112056000805160206158c283398151915290565b6000868152600191820160205260408120818155918290829061122a908301826141ff565b506000600282018190556003909101805468ffffffffffffffffff1916905560048301818155600584018290559061126560068501826141ff565b50505050505b5050919050565b6112b66040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b6112bf82612948565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061131790614e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461134390614e3a565b80156113905780601f1061136557610100808354040283529160200191611390565b820191906000526020600020905b81548152906001019060200180831161137357829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610b9f82612966565b6113eb612a7e565b60005b815181101561146157600082828151811061140b5761140b614ca4565b60200260200101519050600061142c6000805160206158c283398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff19169115159190911790556001016113ee565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516114919190614e6e565b60405180910390a150565b60006114a83a84612063565b6114e181345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b8152506126a0565b61151f6114ef82600a614cba565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b8152506126a0565b8261155561152c82612aab565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b8152506126a0565b61156185856000612b04565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61683348660405161159693929190614ed3565b60405180910390a1505092915050565b6000546001600160a01b03166060816115f9576060838060200190518101906115cf9190614f1a565b90935090506115dd83612bd8565b808060200190518101906115f19190614f6a565b915050611653565b61163c826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b8152506126a0565b828060200190518101906116509190614f6a565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906116c457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b156116fa576116fa6040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a28565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b602082015261179e907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1515906126a0565b611871630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118359190615003565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b8152506126a0565b6119f8306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611900919061502d565b6001600160a01b03161480156119c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd919061502d565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b8152506126a0565b611a0181612bf1565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f6611a80611b57565b604051611a8d919061485e565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611af7907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161504a565b600060405180830381865af4158015611b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3c9190810190615094565b9392505050565b611b4b612a7e565b611b5481612bf1565b50565b6060611b827f0000000000000000000000000000000000000000000000000000000000000000612c97565b905090565b6060816001600160401b03811115611ba157611ba161460f565b604051908082528060200260200182016040528015611bca578160200160208202803683370190505b50905060005b82811015610c8f57611bf9848483818110611bed57611bed614ca4565b905060200201356126b2565b828281518110611c0b57611c0b614ca4565b60200260200101906003811115611c2457611c246145d7565b90816003811115611c3757611c376145d7565b905250600101611bd0565b6000611c5b6000805160206158c2833981519152610cab565b84600180611c68836126b2565b6003811115611c7957611c796145d7565b14611cbe576040516353e8875160e11b8152611cb99073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b611d08565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611cf890851515906126a0565b611d058742888888612d3b565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610b9f5750816001600160a01b0316611d586000546001600160a01b031690565b6001600160a01b03161492915050565b6000610b9f826126b2565b611d7b612a7e565b611d856000612bd8565b565b60015433906001600160a01b03168114611df55760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a68565b611b5481612bd8565b6000602061ffff831615611e1c57611e1760018461514f565b611e1f565b60005b611e29919061516a565b611e3490600461518b565b611e629061ffff167f0000000000000000000000000000000000000000000000000000000000000000614cba565b611e8c907f0000000000000000000000000000000000000000000000000000000000000000614cd1565b611b3c9084614cba565b6060611ea182612d5f565b6002018054611eaf90614e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611edb90614e3a565b8015611f285780601f10611efd57610100808354040283529160200191611f28565b820191906000526020600020905b815481529060010190602001808311611f0b57829003601f168201915b50505050509050919050565b60008060005b87811015612057576001611f598a8a84818110611bed57611bed614ca4565b6003811115611f6a57611f6a6145d7565b0361204f576000611f928a8a84818110611f8657611f86614ca4565b90506020020135612948565b8054909150611fb190600160b81b90046001600160481b031685614cd1565b8154909450600160a01b900462ffffff1615611ff1578054611fe0908790600160a01b900462ffffff16610ba5565b611fea9084614cd1565b9250612021565b60028101541561200957611fe0868260020154612063565b612014866000611dfe565b61201e9084614cd1565b92505b8461202e82600301612d80565b6001600160401b03166120419190614cba565b61204b9084614cd1565b9250505b600101611f3a565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa1580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906151a6565b905061212760008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b8152506126a0565b6121318482611dfe565b949350505050565b600033826121f3823b158015906121b457506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa158015612190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b491906151c3565b80156121c5575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b8152506126a0565b6121fe3a5b85610ba5565b61220881346114ae565b6122166114ef82600a614cba565b8561222361152c82612aab565b61222f60008888612b04565b9450888861223c87612948565b6001019161224b919083615235565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161227f93929190614ed3565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152816122b56110c282612948565b6122be83612db0565b91505b50919050565b6122cf61423e565b816122dc6110c282612948565b6122be83612f23565b60006122fe6000805160206158c2833981519152610cab565b8560018061230b836126b2565b600381111561231c5761231c6145d7565b14612361576040516353e8875160e11b815261235c9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b6123f5565b6123ab60008863ffffffff161180156123805750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b8152506126a0565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526123e590851515906126a0565b6123f28888888888612d3b565b92505b505095945050505050565b60408051808201909152601c81527f5769746e65744f7261636c65547275737461626c654f62736375726f00000000602082015290565b60006000805160206158c283398151915254611b82906001614cd1565b60003382612492823b158015906121b457506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e5690602401612173565b61249b3a6121f8565b6124a581346114ae565b6124b36114ef82600a614cba565b856124c061152c82612aab565b6124cb888888612b04565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161250093929190614ed3565b60405180910390a1505050509392505050565b80600180612520836126b2565b6003811115612531576125316145d7565b14612576576040516353e8875160e11b81526125719073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b505050565b600061258184612948565b905034815482906017906125a6908490600160b81b90046001600160481b03166152f5565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b612619612a7e565b600180546001600160a01b0383166001600160a01b0319909116811790915561264a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61268a6141cf565b816126976110c282612948565b6122be83613159565b816126ae576126ae81610a28565b5050565b60008181526000805160206158e2833981519152602052604081206004810154600160e01b900463ffffffff1615612711576004810154600160a01b90046001600160401b031643106127085750600392915050565b50600292915050565b80546001600160a01b03161561272a5750600192915050565b50600092915050565b60008061273f87612948565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff161561288b578054600090819081906127ae908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613256565b92509250925081156127fe57604080518b81523a602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612868565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88883a87600087511161284b576040518060600160405280602981526020016158786029913961284d565b865b60405161285f96959493929190615315565b60405180910390a15b6128838a8a8a604051806020016040528060008152506135ec565b505050612908565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c277873a6040805192835260208301919091520160405180910390a161290887878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612571573d6000803e3d6000fd5b60009081526000805160206158e28339815191526020526040902090565b600080612972836126b2565b90506003816003811115612988576129886145d7565b03612a3a5760008381526000805160206158e283398151915260205260408120600601805490919082906129bb90614e3a565b90501115612a30578054601b60fb1b9082906000906129d990614e3a565b81106129e7576129e7614ca4565b815460011615612a065790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612a26576002612131565b6003949350505050565b5060059392505050565b6001816003811115612a4e57612a4e6145d7565b03612a5c5750600192915050565b6002816003811115612a7057612a706145d7565b0361272a5750600492915050565b6000546001600160a01b03163314611d855760405163118cdaa760e01b8152336004820152602401610a68565b600080612abe6040840160208501615372565b6001600160401b0316118015612ae357506000612ade602084018461538f565b60ff16115b8015610b9f5750607f612af9602084018461538f565b60ff16111592915050565b60006000805160206158c28339815191528054600090612b23906153ac565b918290555090506000612b3582612948565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b6020820152919250612b75916001600160a01b0390911615906126a0565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b0316178155600281018590558360038201612bcd82826153c5565b905050509392505050565b600180546001600160a01b0319169055611b54816136b9565b60005b8151811015612c67576000828281518110612c1157612c11614ca4565b602002602001015190506001612c326000805160206158c283398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101612bf4565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516114919190614e6e565b60606000612ca483613709565b6001600160401b03811115612cbb57612cbb61460f565b6040519080825280601f01601f191660200182016040528015612ce5576020820181803683370190505b50905060005b8151811015610c8f57838160208110612d0657612d06614ca4565b1a60f81b828281518110612d1c57612d1c614ca4565b60200101906001600160f81b031916908160001a905350600101612ceb565b6000612d4a8686868686612733565b9050612d563382612912565b95945050505050565b60009081526000805160206158e28339815191526020526040902060040190565b8054600090612d939060ff166003614c69565b8254610b9f9160ff169061010090046001600160401b0316615415565b6040805180820190915260008152606060208201526000612dd083612966565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b846282612df686612d5f565b6002016040518363ffffffff1660e01b8152600401612e16929190615440565b600060405180830381865af4925050508015612e5457506040513d6000823e601f3d908101601f19168201604052612e5191908101906154df565b60015b611b3c57612e60615578565b806308c379a003612ebc5750612e74615594565b80612e7f5750612ebe565b60408051808201909152806000815260200182604051602001612ea2919061561d565b60408051601f198184030181529190529052949350505050565b505b3d808015612ee8576040519150601f19603f3d011682016040523d82523d6000602084013e612eed565b606091505b506040805180820190915280600081526020016040518060600160405280602181526020016158a1602191399052949350505050565b612f2b61423e565b60008281526000805160206158e283398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a085019190612fa690614e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054612fd290614e3a565b801561301f5780601f10612ff45761010080835404028352916020019161301f565b820191906000526020600020905b81548152906001019060200180831161300257829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff1692810192909252600585015460608301526006850180549490930193919290916080840191906130cd90614e3a565b80601f01602080910402602001604051908101604052809291908181526020018280546130f990614e3a565b80156131465780601f1061311b57610100808354040283529160200191613146565b820191906000526020600020905b81548152906001019060200180831161312957829003601f168201915b5050509190925250505090525092915050565b6131616141cf565b61316a82612d5f565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff1691810191909152600182015460608201526002820180549192916080840191906131cd90614e3a565b80601f01602080910402602001604051908101604052809291908181526020018280546131f990614e3a565b80156132465780601f1061321b57610100808354040283529160200191613246565b820191906000526020600020905b81548152906001019060200180831161322957829003601f168201915b5050505050815250509050919050565b60008060605a9250601b60fb1b878760008161327457613274614ca4565b9050013560f81c60f81b6001600160f81b031916036134c45760006132d66132d189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b61376c565b90506002815110156133fd57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b815260040161338a969594939291906156d7565b600060405180830381600088803b1580156133a457600080fd5b5087f1935050505080156133b6575060015b6133f4576133c2615578565b806308c379a0036133e857506133d6615594565b806133e157506133ea565b91506134be565b505b3d6000803e3d6000fd5b600192506134be565b856001600160a01b03166363febc9c868d8d8d436134348860008151811061342757613427614ca4565b602002602001015161391c565b60fe811115613445576134456145d7565b8860008151811061345857613458614ca4565b60200260200101516040518863ffffffff1660e01b8152600401613481969594939291906156d7565b600060405180830381600088803b15801561349b57600080fd5b5087f1935050505080156134ad575060015b6134b9576133c2615578565b600192505b506135d2565b846001600160a01b031663bcc6307b858c8c8c436135178e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b6040518763ffffffff1660e01b8152600401613537959493929190615724565b600060405180830381600088803b15801561355157600080fd5b5087f193505050508015613563575060015b6135cd5761356f615578565b806308c379a0036135955750613583615594565b8061358e5750613597565b90506135d2565b505b3d8080156135c1576040519150601f19603f3d011682016040523d82523d6000602084013e6135c6565b606091505b50506135d2565b600191505b5a6135dd9084615758565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061363485612948565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136b0908261576b565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137425781816020811061372757613727614ca4565b1a60f81b6001600160f81b031916156137425760010161370c565b919050565b61374f61429a565b60408051808201909152828152600060208201526122be8161397f565b60608160048060ff16826040015160ff16146137ac57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b60006137c085600001518660600151613a9f565b90506137cd81600161582a565b6001600160401b03166001600160401b038111156137ed576137ed61460f565b60405190808252806020026020018201604052801561382657816020015b61381361429a565b81526020019060019003908161380b5790505b50935060005b816001600160401b03168110156138ec5761384686613b67565b955061385186613b8f565b85828151811061386357613863614ca4565b6020026020010181905250600460ff16866040015160ff16036138bc57600061388b8761376c565b9050806001825161389c9190615758565b815181106138ac576138ac614ca4565b60200260200101519650506138e4565b600560ff16866040015160ff16036138d957600061388b87613c27565b6138e286613e11565b505b60010161382c565b508484826001600160401b03168151811061390957613909614ca4565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461395c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b61396e84600001518560600151613a9f565b6001600160401b0316949350505050565b61398761429a565b81515182906000036139ac576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a2f576139cc89613fd6565b9550816139d8816153ac565b6007600589901c169650601f881695509250506005198501613a27576020890151613a038a86613a9f565b9350808a60200151613a159190615758565b613a1f9084614cd1565b9250506139bd565b5060006139bd565b600760ff86161115613a595760405163bd2ac87960e01b815260ff86166004820152602401610a68565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ab7575060ff8116610b9f565b8160ff16601803613ad557613acb83613fd6565b60ff169050610b9f565b8160ff16601903613af457613ae983614038565b61ffff169050610b9f565b8160ff16601a03613b1557613b08836140a4565b63ffffffff169050610b9f565b8160ff16601b03613b3057613b2983614103565b9050610b9f565b8160ff16601f03613b4957506001600160401b03610b9f565b604051636d785b1360e01b815260ff83166004820152602401610a68565b613b6f61429a565b81518051516020909101511015613b8b578151610b9f9061397f565b5090565b613b9761429a565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c6757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b6000613c7b85600001518660600151613a9f565b613c86906002615415565b9050613c9381600161582a565b6001600160401b03166001600160401b03811115613cb357613cb361460f565b604051908082528060200260200182016040528015613cec57816020015b613cd961429a565b815260200190600190039081613cd15790505b50935060005b816001600160401b03168110156138ec57613d0c86613b67565b9550613d1786613b8f565b858281518110613d2957613d29614ca4565b6020908102919091010152613d3f60028261584a565b158015613d545750604086015160ff16600314155b15613d8257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a68565b604086015160ff1660041480613d9f5750604086015160ff166005145b15613dfe57604086015160009060ff16600414613dc457613dbf87613c27565b613dcd565b613dcd8761376c565b90508060018251613dde9190615758565b81518110613dee57613dee614ca4565b6020026020010151965050613e09565b613e0786613e11565b505b600101613cf2565b613e1961429a565b604082015160ff161580613e345750604082015160ff166001145b80613e6d5750604082015160ff166007148015613e5957506019826060015160ff1610155b8015613e6d5750601b826060015160ff1611155b15613ea057613e7b82614162565b6001600160401b03168260000151602001818151613e999190614cd1565b9052505090565b604082015160ff1660031480613ebd5750604082015160ff166002145b15613f01576000613ed683600001518460600151613a9f565b9050806001600160401b03168360000151602001818151613ef79190614cd1565b905250613b8b9050565b604082015160ff1660041480613f1e5750604082015160ff166005145b15613f4757613f3582600001518360600151613a9f565b6001600160401b031660808301525090565b604082015160ff166007141580613f795750816060015160ff16601414158015613f795750816060015160ff16601514155b15613b8b5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a68565b600081602001518260000151518082111561400e576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b835160208501805180830160010151955090819061402b826153ac565b8152505050505050919050565b60008160200151600261404b9190614cd1565b82515180821115614079576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516002818401810151965090916140978284614cd1565b9052509395945050505050565b6000816020015160046140b79190614cd1565b825151808211156140e5576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516004818401810151965090916140978284614cd1565b6000816020015160086141169190614cd1565b82515180821115614144576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516008818401810151965090916140978284614cd1565b60006018826060015160ff16101561417c57506000919050565b601c826060015160ff1610156141ab576018826060015161419d919061585e565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a68565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b50805461420b90614e3a565b6000825580601f1061421b575050565b601f016020900490600052602060002090810190611b5491906142e1565b905290565b604051806040016040528061428d6040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526020016142396141cf565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613b8b57600081556001016142e2565b60005b838110156143115781810151838201526020016142f9565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614348816013850160208a016142f6565b85519083019061435f816013840160208a016142f6565b85519101906143758160138401602089016142f6565b845191019061438b8160138401602088016142f6565b016013019695505050505050565b6001600160a01b0381168114611b5457600080fd5b6000602082840312156143c057600080fd5b8135611b3c81614399565b803562ffffff8116811461374257600080fd5b600080604083850312156143f157600080fd5b82359150614401602084016143cb565b90509250929050565b60008083601f84011261441c57600080fd5b5081356001600160401b0381111561443357600080fd5b6020830191508360208260051b850101111561444e57600080fd5b9250929050565b6000806020838503121561446857600080fd5b82356001600160401b0381111561447e57600080fd5b61448a8582860161440a565b90969095509350505050565b6000602082840312156144a857600080fd5b5035919050565b600081518084526144c78160208601602086016142f6565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a0608085015261213160a08501826144af565b602081526000611b3c60208301846144db565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261458b60e08501826144af565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000611b3c6020830184614542565b634e487b7160e01b600052602160045260246000fd5b600681106145fd576145fd6145d7565b9052565b60208101610b9f82846145ed565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561464a5761464a61460f565b6040525050565b60006001600160401b0382111561466a5761466a61460f565b5060051b60200190565b6000602080838503121561468757600080fd5b82356001600160401b0381111561469d57600080fd5b8301601f810185136146ae57600080fd5b80356146b981614651565b6040516146c68282614625565b82815260059290921b83018401918481019150878311156146e657600080fd5b928401925b8284101561470d5783356146fe81614399565b825292840192908401906146eb565b979650505050505050565b6000604082840312156122c157600080fd5b6000806060838503121561473d57600080fd5b823591506144018460208501614718565b60006001600160401b038211156147675761476761460f565b50601f01601f191660200190565b60006020828403121561478757600080fd5b81356001600160401b0381111561479d57600080fd5b8201601f810184136147ae57600080fd5b80356147b98161474e565b6040516147c68282614625565b8281528660208486010111156147db57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561485157603f1988860301845261483f8583516144af565b94509285019290850190600101614823565b5092979650505050505050565b602081526000611b3c60208301846144af565b600481106145fd576145fd6145d7565b6020808252825182820181905260009190848201906040850190845b818110156148c0576148b0838551614871565b928401929184019160010161489d565b50909695505050505050565b60008083601f8401126148de57600080fd5b5081356001600160401b038111156148f557600080fd5b60208301915083602082850101111561444e57600080fd5b6000806000806060858703121561492357600080fd5b843593506020850135925060408501356001600160401b0381111561494757600080fd5b614953878288016148cc565b95989497509550505050565b60208101610b9f8284614871565b61ffff81168114611b5457600080fd5b6000806040838503121561499057600080fd5b8235915060208301356149a28161496d565b809150509250929050565b600080600080600080608087890312156149c657600080fd5b86356001600160401b03808211156149dd57600080fd5b6149e98a838b0161440a565b90985096506020890135915080821115614a0257600080fd5b50614a0f89828a016148cc565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a3d57600080fd5b50508035926020909101359150565b60008060008060808587031215614a6257600080fd5b84356001600160401b03811115614a7857600080fd5b614a84878288016148cc565b9095509350614a9890508660208701614718565b9150614aa6606086016143cb565b905092959194509250565b60ff81106145fd576145fd6145d7565b60208152614ad3602082018351614ab1565b6000602083015160408084015261213160608401826144af565b602081526000825160406020840152614b096060840182614542565b90506020840151601f19848303016040850152612d5682826144db565b803563ffffffff8116811461374257600080fd5b600080600080600060808688031215614b5257600080fd5b85359450614b6260208701614b26565b93506040860135925060608601356001600160401b03811115614b8457600080fd5b614b90888289016148cc565b969995985093965092949392505050565b600080600060808486031215614bb657600080fd5b83359250614bc78560208601614718565b9150614bd5606085016143cb565b90509250925092565b60008351614bf08184602088016142f6565b6101d160f51b9083019081528351614c0f8160028401602088016142f6565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c5a57614c5a614c1b565b8060ff84160491505092915050565b60ff8181168382160190811115610b9f57610b9f614c31565b600060ff831680614c9557614c95614c1b565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b9f57610b9f614c31565b80820180821115610b9f57610b9f614c31565b60008235607e19833603018112614cfa57600080fd5b9190910192915050565b600082601f830112614d1557600080fd5b8151614d208161474e565b604051614d2d8282614625565b828152856020848701011115614d4257600080fd5b612d568360208301602088016142f6565b600060208284031215614d6557600080fd5b81516001600160401b03811115614d7b57600080fd5b61213184828501614d04565b82815260406020820152600061213160408301846144af565b600060208284031215614db257600080fd5b611b3c82614b26565b6000808335601e19843603018112614dd257600080fd5b8301803591506001600160401b03821115614dec57600080fd5b60200191503681900382131561444e57600080fd5b60008251614e138184602087016142f6565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b600181811c90821680614e4e57607f821691505b6020821081036122c157634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148c05783516001600160a01b031683529284019291840191600101614e8a565b60ff81168114611b5457600080fd5b6001600160401b0381168114611b5457600080fd5b83815260208101839052608081018235614eec81614eaf565b60ff1660408301526020830135614f0281614ebe565b6001600160401b038116606084015250949350505050565b60008060408385031215614f2d57600080fd5b8251614f3881614399565b60208401519092506001600160401b03811115614f5457600080fd5b614f6085828601614d04565b9150509250929050565b60006020808385031215614f7d57600080fd5b82516001600160401b03811115614f9357600080fd5b8301601f81018513614fa457600080fd5b8051614faf81614651565b604051614fbc8282614625565b82815260059290921b8301840191848101915087831115614fdc57600080fd5b928401925b8284101561470d578351614ff481614399565b82529284019290840190614fe1565b60006020828403121561501557600080fd5b81516001600160e01b031981168114611b3c57600080fd5b60006020828403121561503f57600080fd5b8151611b3c81614399565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561507a57600080fd5b8260051b8085606085013791909101606001949350505050565b600060208083850312156150a757600080fd5b82516001600160401b03808211156150be57600080fd5b818501915085601f8301126150d257600080fd5b81516150dd81614651565b6040516150ea8282614625565b82815260059290921b840185019185810191508883111561510a57600080fd5b8585015b83811015615142578051858111156151265760008081fd5b6151348b89838a0101614d04565b84525091860191860161510e565b5098975050505050505050565b61ffff828116828216039080821115610c8f57610c8f614c31565b600061ffff8084168061517f5761517f614c1b565b92169190910492915050565b61ffff818116838216019080821115610c8f57610c8f614c31565b6000602082840312156151b857600080fd5b8151611b3c8161496d565b6000602082840312156151d557600080fd5b81518015158114611b3c57600080fd5b601f821115612571576000816000526020600020601f850160051c8101602086101561520e5750805b601f850160051c820191505b8181101561522d5782815560010161521a565b505050505050565b6001600160401b0383111561524c5761524c61460f565b6152608361525a8354614e3a565b836151e5565b6000601f841160018114615294576000851561527c5750838201355b600019600387901b1c1916600186901b1783556152ee565b600083815260209020601f19861690835b828110156152c557868501358255602094850194600190920191016152a5565b50868210156152e25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160481b03818116838216019080821115610c8f57610c8f614c31565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261536560c08201856144af565b9998505050505050505050565b60006020828403121561538457600080fd5b8135611b3c81614ebe565b6000602082840312156153a157600080fd5b8135611b3c81614eaf565b6000600182016153be576153be614c31565b5060010190565b81356153d081614eaf565b60ff8116905081548160ff19821617835560208401356153ef81614ebe565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b6001600160401b0381811683821602808216919082811461543857615438614c31565b505092915050565b61544a81846145ed565b60006020604060208401526000845461546281614e3a565b806040870152606060018084166000811461548457600181146154a0576154d0565b60ff19851660608a0152606084151560051b8a010195506154d0565b89600052602060002060005b858110156154c75781548b82018601529083019088016154ac565b8a016060019650505b50939998505050505050505050565b6000602082840312156154f157600080fd5b81516001600160401b038082111561550857600080fd5b908301906040828603121561551c57600080fd5b6040516040810181811083821117156155375761553761460f565b604052825160ff811061554957600080fd5b815260208301518281111561555d57600080fd5b61556987828601614d04565b60208301525095945050505050565b600060033d11156155915760046000803e5060005160e01c5b90565b600060443d10156155a25790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156155d157505050505090565b82850191508151818111156155e95750505050505090565b843d87010160208285010111156156035750505050505090565b61561260208286010187614625565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b8152600082516156498160118501602087016142f6565b9190910160110192915050565b6000815160c084528051604060c08601526156756101008601826144af565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526157026080820184614ab1565b60c060a0820152600061571860c0830184615656565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a06080820152600061470d60a0830184615656565b81810381811115610b9f57610b9f614c31565b81516001600160401b038111156157845761578461460f565b615798816157928454614e3a565b846151e5565b602080601f8311600181146157cd57600084156157b55750858301515b600019600386901b1c1916600185901b17855561522d565b600085815260208120601f198616915b828110156157fc578886015182559484019460019091019084016157dd565b508582101561581a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115610c8f57610c8f614c31565b60008261585957615859614c1b565b500690565b60ff8281168282160390811115610b9f57610b9f614c3156fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220840aee61fc3c262ab74b0df7938e5dc1e0bfe9e1e9a23680e58a8e0e4ca2983e64736f6c63430008190033",
  "deployedBytecode": "0x6080604052600436106102765760003560e01c80637b1039991161014f578063aeb2ffc1116100c1578063e30c39781161007a578063e30c397814610970578063e5a6b10f1461098e578063e900aa33146109c2578063ec5946db146109d5578063f2fde38b146109e8578063f61921b214610a08576102b3565b8063aeb2ffc114610892578063b207e730146108bf578063bff852fa146108df578063c45a0155146108f4578063c805dd0f14610927578063d5f394881461093c576102b3565b806393d5185c1161011357806393d5185c146107955780639cc56e67146107ca578063a3ff5b00146107ea578063a77fc1a4146107fd578063a9e954b91461082a578063adb7c3f71461085e576102b3565b80637b103999146106b35780637bbdb96e146106e75780637bd88218146107375780638d3d8b38146107575780638da5cb5b14610777576102b3565b80635001f3b5116101e85780636280bce8116101ac5780636280bce8146105d25780636b58960a146105f25780636f07abcc146106125780636fdaab7e1461063f578063715018a61461068957806379ba50971461069e576102b3565b80635001f3b5146104d557806352d1902d1461051c5780635479d9401461055057806354fd4d5014610583578063581f5094146105a5576102b3565b8063234fe6e31161023a578063234fe6e31461040857806328a78d9b146104355780633dc2b7a214610455578063439fab911461046857806345ea6c17146104885780634c9f72e3146104b5576102b3565b8063044ad7be1461032b57806305e742ef1461036057806306eb2c421461038e57806308b7e85e146103ae5780630aa4112a146103db576102b3565b366102b3576102b1604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610a28565b005b3480156102bf57600080fd5b506102b16102d160003560f81c610a71565b6102e260ff60003560f01c16610a71565b6102f360ff60003560e81c16610a71565b61030460ff60003560e01c16610a71565b604051602001610317949392919061431a565b604051602081830303815290604052610a28565b34801561033757600080fd5b5061034b6103463660046143ae565b610b63565b60405190151581526020015b60405180910390f35b34801561036c57600080fd5b5061038061037b3660046143de565b610ba5565b604051908152602001610357565b34801561039a57600080fd5b506103806103a9366004614455565b610c96565b3480156103ba57600080fd5b506103ce6103c9366004614496565b611000565b604051610357919061452f565b3480156103e757600080fd5b506103fb6103f6366004614496565b611272565b60405161035791906145c4565b34801561041457600080fd5b50610428610423366004614496565b6113d8565b6040516103579190614601565b34801561044157600080fd5b506102b1610450366004614674565b6113e3565b61038061046336600461472a565b61149c565b34801561047457600080fd5b506102b1610483366004614775565b6115a6565b34801561049457600080fd5b506104a86104a3366004614455565b611a9a565b60405161035791906147fa565b3480156104c157600080fd5b506102b16104d0366004614674565b611b43565b3480156104e157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610357565b34801561052857600080fd5b506103807f000000000000000000000000000000000000000000000000000000000000000081565b34801561055c57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034b565b34801561058f57600080fd5b50610598611b57565b604051610357919061485e565b3480156105b157600080fd5b506105c56105c0366004614455565b611b87565b6040516103579190614881565b3480156105de57600080fd5b506103806105ed36600461490d565b611c42565b3480156105fe57600080fd5b5061034b61060d3660046143ae565b611d12565b34801561061e57600080fd5b5061063261062d366004614496565b611d68565b604051610357919061495f565b34801561064b57600080fd5b5061038061065a366004614496565b60009081526000805160206158e28339815191526020526040902054600160b81b90046001600160481b031690565b34801561069557600080fd5b506102b1611d73565b3480156106aa57600080fd5b506102b1611d87565b3480156106bf57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f357600080fd5b5060408051306020808301919091524682840152825180830384018152606090920190925280519101205b6040516001600160e01b03199091168152602001610357565b34801561074357600080fd5b5061038061075236600461497d565b611dfe565b34801561076357600080fd5b50610598610772366004614496565b611e96565b34801561078357600080fd5b506000546001600160a01b0316610504565b3480156107a157600080fd5b506107b56107b03660046149ad565b611f34565b60408051928352602083019190915201610357565b3480156107d657600080fd5b506103806107e5366004614a2a565b612063565b6103806107f8366004614a4c565b612139565b34801561080957600080fd5b5061081d610818366004614496565b612293565b6040516103579190614ac1565b34801561083657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000003f610380565b34801561086a57600080fd5b5061071e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561089e57600080fd5b506108b26108ad366004614496565b6122c7565b6040516103579190614aed565b3480156108cb57600080fd5b506103806108da366004614b3a565b6122e5565b3480156108eb57600080fd5b50610598612400565b34801561090057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610504565b34801561093357600080fd5b50610380612437565b34801561094857600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b34801561097c57600080fd5b506001546001600160a01b0316610504565b34801561099a57600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b6103806109d0366004614ba1565b612454565b6102b16109e3366004614496565b612513565b3480156109f457600080fd5b506102b1610a033660046143ae565b612611565b348015610a1457600080fd5b506103ce610a23366004614496565b612682565b610a30612400565b81604051602001610a42929190614bde565b60408051601f198184030181529082905262461bcd60e51b8252610a689160040161485e565b60405180910390fd5b604080516002808252818301909252606091600091906020820181803683370190505090506000610aa3601085614c47565b610aae906030614c69565b90506000610abd601086614c82565b610ac8906030614c69565b905060398260ff161115610ae457610ae1600783614c69565b91505b60398160ff161115610afe57610afb600782614c69565b90505b8160f81b83600081518110610b1557610b15614ca4565b60200101906001600160f81b031916908160001a9053508060f81b83600181518110610b4357610b43614ca4565b60200101906001600160f81b031916908160001a90535091949350505050565b6001600160a01b03811660009081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e185602052604081205460ff165b92915050565b600080610bd37f00000000000000000000000000000000000000000000000000000000000000006003614cba565b610bfd907f0000000000000000000000000000000000000000000000000000000000000000614cd1565b9050808362ffffff161080610c3f575080610c3d62ffffff85167f0000000000000000000000000000000000000000000000000000000000000000614cd1565b105b15610c5657610c4e8185614cba565b915050610b9f565b610c8562ffffff84167f0000000000000000000000000000000000000000000000000000000000000000614cd1565b610c4e9085614cba565b5092915050565b6000610cf86000805160206158c28339815191525b336000908152600291909101602090815260409182902054825180840190935260158352743ab730baba3437b934bd32b2103932b837b93a32b960591b9183019190915260ff16906126a0565b60005b82811015610fef576001610d32858584818110610d1a57610d1a614ca4565b9050602002810190610d2c9190614ce4565b356126b2565b6003811115610d4357610d436145d7565b14610e28577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610d7b57610d7b614ca4565b9050602002810190610d8d9190614ce4565b6040516353e8875160e11b815290359073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea290610dc89060019060040161495f565b600060405180830381865af4158015610de5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e0d9190810190614d53565b604051610e1b929190614d87565b60405180910390a1610fe7565b838382818110610e3a57610e3a614ca4565b9050602002810190610e4c9190614ce4565b610e5d906040810190602001614da0565b63ffffffff161580610ea05750838382818110610e7c57610e7c614ca4565b9050602002810190610e8e9190614ce4565b610e9c906060810190614dbb565b1590505b15610f1e577f4df64445edc775fba59db44b8001852fb1b777eea88fd54f04572dd114e3ff7f848483818110610ed857610ed8614ca4565b9050602002810190610eea9190614ce4565b35610ef3612400565b604051602001610f039190614e01565b60408051601f1981840301815290829052610e1b9291614d87565b610fda848483818110610f3357610f33614ca4565b9050602002810190610f459190614ce4565b35858584818110610f5857610f58614ca4565b9050602002810190610f6a9190614ce4565b610f7b906040810190602001614da0565b868685818110610f8d57610f8d614ca4565b9050602002810190610f9f9190614ce4565b60400135878786818110610fb557610fb5614ca4565b9050602002810190610fc79190614ce4565b610fd5906060810190614dbb565b612733565b610fe49083614cd1565b91505b600101610cfb565b508015610b9f57610b9f3382612912565b6110086141cf565b81600380611015836126b2565b6003811115611026576110266145d7565b146110b5576040516353e8875160e11b81526110b09073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b600060405180830381865af4158015611083573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110ab9190810190614d53565b610a28565b61126b565b836110fe6110c282612948565b546040805180820190915260118152703737ba103a3432903932b8bab2b9ba32b960791b60208201526001600160a01b039091163314906126a0565b61110785612948565b6040805160a0810182526004830180546001600160a01b0381168352600160a01b81046001600160401b03166020840152600160e01b900463ffffffff1692820192909252600583015460608201526006909201805460808401919061116c90614e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461119890614e3a565b80156111e55780601f106111ba576101008083540402835291602001916111e5565b820191906000526020600020905b8154815290600101906020018083116111c857829003601f168201915b50505050508152505093506112056000805160206158c283398151915290565b6000868152600191820160205260408120818155918290829061122a908301826141ff565b506000600282018190556003909101805468ffffffffffffffffff1916905560048301818155600584018290559061126560068501826141ff565b50505050505b5050919050565b6112b66040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b6112bf82612948565b6040805160c08101825282546001600160a01b0381168252600160a01b810462ffffff166020830152600160b81b90046001600160481b03169181019190915260018201805491929160608401919061131790614e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461134390614e3a565b80156113905780601f1061136557610100808354040283529160200191611390565b820191906000526020600020905b81548152906001019060200180831161137357829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b031691840191909152015292915050565b6000610b9f82612966565b6113eb612a7e565b60005b815181101561146157600082828151811061140b5761140b614ca4565b60200260200101519050600061142c6000805160206158c283398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff19169115159190911790556001016113ee565b507f646436560d9757cb3c0f01da0f62642c6040b00c9a80685f94ef1a7725cad5f1816040516114919190614e6e565b60405180910390a150565b60006114a83a84612063565b6114e181345b1015604051806040016040528060138152602001721a5b9cdd59999a58da595b9d081c995dd85c99606a1b8152506126a0565b61151f6114ef82600a614cba565b3411156040518060400160405280600f81526020016e1d1bdbc81b5d58da081c995dd85c99608a1b8152506126a0565b8261155561152c82612aab565b6040518060400160405280600b81526020016a696e76616c696420534c4160a81b8152506126a0565b61156185856000612b04565b92507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61683348660405161159693929190614ed3565b60405180910390a1505092915050565b6000546001600160a01b03166060816115f9576060838060200190518101906115cf9190614f1a565b90935090506115dd83612bd8565b808060200190518101906115f19190614f6a565b915050611653565b61163c826001600160a01b0316336001600160a01b0316146040518060400160405280600d81526020016c3737ba103a34329037bbb732b960991b8152506126a0565b828060200190518101906116509190614f6a565b90505b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906116c457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b156116fa576116fa6040518060400160405280601081526020016f185b1c9958591e481d5c19dc9859195960821b815250610a28565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe55604080518082019091526012815271696e6578697374656e7420666163746f727960701b602082015261179e907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1515906126a0565b611871630db7c58b60e41b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118359190615003565b6001600160e01b0319161460405180604001604052806013815260200172756e636f6d706c69616e7420666163746f727960681b8152506126a0565b6119f8306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346d1d21a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611900919061502d565b6001600160a01b03161480156119c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd919061502d565b6001600160a01b0316145b60405180604001604052806012815260200171646973636f7264616e7420666163746f727960701b8152506126a0565b611a0181612bf1565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f6611a80611b57565b604051611a8d919061485e565b60405180910390a4505050565b6040516251ca3160e21b815260609073__$e6ff738751a05f257ae0de251e4d5c9673$__9063014728c490611af7907f0000000000000000000000000000000000000000000000000000000000000000908790879060040161504a565b600060405180830381865af4158015611b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3c9190810190615094565b9392505050565b611b4b612a7e565b611b5481612bf1565b50565b6060611b827f0000000000000000000000000000000000000000000000000000000000000000612c97565b905090565b6060816001600160401b03811115611ba157611ba161460f565b604051908082528060200260200182016040528015611bca578160200160208202803683370190505b50905060005b82811015610c8f57611bf9848483818110611bed57611bed614ca4565b905060200201356126b2565b828281518110611c0b57611c0b614ca4565b60200260200101906003811115611c2457611c246145d7565b90816003811115611c3757611c376145d7565b905250600101611bd0565b6000611c5b6000805160206158c2833981519152610cab565b84600180611c68836126b2565b6003811115611c7957611c796145d7565b14611cbe576040516353e8875160e11b8152611cb99073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b611d08565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b6020820152611cf890851515906126a0565b611d058742888888612d3b565b92505b5050949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000008015610b9f5750816001600160a01b0316611d586000546001600160a01b031690565b6001600160a01b03161492915050565b6000610b9f826126b2565b611d7b612a7e565b611d856000612bd8565b565b60015433906001600160a01b03168114611df55760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a68565b611b5481612bd8565b6000602061ffff831615611e1c57611e1760018461514f565b611e1f565b60005b611e29919061516a565b611e3490600461518b565b611e629061ffff167f0000000000000000000000000000000000000000000000000000000000000000614cba565b611e8c907f0000000000000000000000000000000000000000000000000000000000000000614cd1565b611b3c9084614cba565b6060611ea182612d5f565b6002018054611eaf90614e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611edb90614e3a565b8015611f285780601f10611efd57610100808354040283529160200191611f28565b820191906000526020600020905b815481529060010190602001808311611f0b57829003601f168201915b50505050509050919050565b60008060005b87811015612057576001611f598a8a84818110611bed57611bed614ca4565b6003811115611f6a57611f6a6145d7565b0361204f576000611f928a8a84818110611f8657611f86614ca4565b90506020020135612948565b8054909150611fb190600160b81b90046001600160481b031685614cd1565b8154909450600160a01b900462ffffff1615611ff1578054611fe0908790600160a01b900462ffffff16610ba5565b611fea9084614cd1565b9250612021565b60028101541561200957611fe0868260020154612063565b612014866000611dfe565b61201e9084614cd1565b92505b8461202e82600301612d80565b6001600160401b03166120419190614cba565b61204b9084614cd1565b9250505b600101611f3a565b50965096945050505050565b604051633b5bc50360e11b81526004810182905260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906376b78a0690602401602060405180830381865afa1580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906151a6565b905061212760008261ffff16116040518060400160405280600b81526020016a1a5b9d985b1a590814905160aa1b8152506126a0565b6121318482611dfe565b949350505050565b600033826121f3823b158015906121b457506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e56906024015b602060405180830381865afa158015612190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b491906151c3565b80156121c5575060008262ffffff16115b6040518060400160405280601081526020016f696e76616c69642063616c6c6261636b60801b8152506126a0565b6121fe3a5b85610ba5565b61220881346114ae565b6122166114ef82600a614cba565b8561222361152c82612aab565b61222f60008888612b04565b9450888861223c87612948565b6001019161224b919083615235565b507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161227f93929190614ed3565b60405180910390a150505050949350505050565b604080518082019091526000815260606020820152816122b56110c282612948565b6122be83612db0565b91505b50919050565b6122cf61423e565b816122dc6110c282612948565b6122be83612f23565b60006122fe6000805160206158c2833981519152610cab565b8560018061230b836126b2565b600381111561231c5761231c6145d7565b14612361576040516353e8875160e11b815261235c9073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b6123f5565b6123ab60008863ffffffff161180156123805750428863ffffffff1611155b6040518060400160405280600d81526020016c06261642074696d657374616d7609c1b8152506126a0565b604080518082019091526016815275726573756c742063616e6e6f7420626520656d70747960501b60208201526123e590851515906126a0565b6123f28888888888612d3b565b92505b505095945050505050565b60408051808201909152601c81527f5769746e65744f7261636c65547275737461626c654f62736375726f00000000602082015290565b60006000805160206158c283398151915254611b82906001614cd1565b60003382612492823b158015906121b457506040516323d0872b60e11b81523060048201526001600160a01b038416906347a10e5690602401612173565b61249b3a6121f8565b6124a581346114ae565b6124b36114ef82600a614cba565b856124c061152c82612aab565b6124cb888888612b04565b94507ffb94adf28ab7e538d2691d90927f622cbc1100eae6afec58052efdee6c98a61685348960405161250093929190614ed3565b60405180910390a1505050509392505050565b80600180612520836126b2565b6003811115612531576125316145d7565b14612576576040516353e8875160e11b81526125719073__$e6ff738751a05f257ae0de251e4d5c9673$__9063a7d10ea29061106690859060040161495f565b505050565b600061258184612948565b905034815482906017906125a6908490600160b81b90046001600160481b03166152f5565b82546101009290920a6001600160481b03818102199093169183160217909155825460408051888152600160b81b90920490921660208201527fdcced240139c3504c690fc16a776a5a4da3d5d1c139539e75037554ddc21e55b92500160405180910390a150505050565b612619612a7e565b600180546001600160a01b0383166001600160a01b0319909116811790915561264a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61268a6141cf565b816126976110c282612948565b6122be83613159565b816126ae576126ae81610a28565b5050565b60008181526000805160206158e2833981519152602052604081206004810154600160e01b900463ffffffff1615612711576004810154600160a01b90046001600160401b031643106127085750600392915050565b50600292915050565b80546001600160a01b03161561272a5750600192915050565b50600092915050565b60008061273f87612948565b80546001600160b81b038116808355600160b81b9091046001600160481b03169350909150600160a01b900462ffffff161561288b578054600090819081906127ae908b9063ffffffff8c16908b908b908b906001600160a01b03811690600160a01b900462ffffff16613256565b92509250925081156127fe57604080518b81523a602082015280820185905290517f37fc320f2d5c58a36c657d3b047384d42550bcc0d9781d13a7d97f8a97c2370c9181900360600190a1612868565b7f794f0625cb473a6fc2bbc46c87577b8e719f074c42f7fe02abdf08e7435b1d8d8a88883a87600087511161284b576040518060600160405280602981526020016158786029913961284d565b865b60405161285f96959493929190615315565b60405180910390a15b6128838a8a8a604051806020016040528060008152506135ec565b505050612908565b7f1fd7bc07c18ac1c4f6d3111c704cd1b4c29b9f7980b7c5a9a2fddeef29d6c277873a6040805192835260208301919091520160405180910390a161290887878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b5095945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612571573d6000803e3d6000fd5b60009081526000805160206158e28339815191526020526040902090565b600080612972836126b2565b90506003816003811115612988576129886145d7565b03612a3a5760008381526000805160206158e283398151915260205260408120600601805490919082906129bb90614e3a565b90501115612a30578054601b60fb1b9082906000906129d990614e3a565b81106129e7576129e7614ca4565b815460011615612a065790600052602060002090602091828204019190065b9054901a600160f81b026001600160f81b03191614612a26576002612131565b6003949350505050565b5060059392505050565b6001816003811115612a4e57612a4e6145d7565b03612a5c5750600192915050565b6002816003811115612a7057612a706145d7565b0361272a5750600492915050565b6000546001600160a01b03163314611d855760405163118cdaa760e01b8152336004820152602401610a68565b600080612abe6040840160208501615372565b6001600160401b0316118015612ae357506000612ade602084018461538f565b60ff16115b8015610b9f5750607f612af9602084018461538f565b60ff16111592915050565b60006000805160206158c28339815191528054600090612b23906153ac565b918290555090506000612b3582612948565b805460408051808201909152600e81526d185b1c9958591e481c1bdcdd195960921b6020820152919250612b75916001600160a01b0390911615906126a0565b8054346001600160481b0316600160b81b026001600160b81b03199091163362ffffff60a01b191617600160a01b62ffffff861602176001600160b81b0316178155600281018590558360038201612bcd82826153c5565b905050509392505050565b600180546001600160a01b0319169055611b54816136b9565b60005b8151811015612c67576000828281518110612c1157612c11614ca4565b602002602001015190506001612c326000805160206158c283398151915290565b6001600160a01b0392909216600090815260029092016020526040909120805460ff1916911515919091179055600101612bf4565b507f4d570ee36dec878006609360d34ac8d6a0b68d521871ae15a407b6340877ca01816040516114919190614e6e565b60606000612ca483613709565b6001600160401b03811115612cbb57612cbb61460f565b6040519080825280601f01601f191660200182016040528015612ce5576020820181803683370190505b50905060005b8151811015610c8f57838160208110612d0657612d06614ca4565b1a60f81b828281518110612d1c57612d1c614ca4565b60200101906001600160f81b031916908160001a905350600101612ceb565b6000612d4a8686868686612733565b9050612d563382612912565b95945050505050565b60009081526000805160206158e28339815191526020526040902060040190565b8054600090612d939060ff166003614c69565b8254610b9f9160ff169061010090046001600160401b0316615415565b6040805180820190915260008152606060208201526000612dd083612966565b905073__$ef6db950c2506c2808ebbf3a91851f2b43$__63a62b846282612df686612d5f565b6002016040518363ffffffff1660e01b8152600401612e16929190615440565b600060405180830381865af4925050508015612e5457506040513d6000823e601f3d908101601f19168201604052612e5191908101906154df565b60015b611b3c57612e60615578565b806308c379a003612ebc5750612e74615594565b80612e7f5750612ebe565b60408051808201909152806000815260200182604051602001612ea2919061561d565b60408051601f198184030181529190529052949350505050565b505b3d808015612ee8576040519150601f19603f3d011682016040523d82523d6000602084013e612eed565b606091505b506040805180820190915280600081526020016040518060600160405280602181526020016158a1602191399052949350505050565b612f2b61423e565b60008281526000805160206158e283398151915260205260409081902081516101008101835281546001600160a01b038116938201938452600160a01b810462ffffff166060830152600160b81b90046001600160481b03166080820152600182018054919384929091849160a085019190612fa690614e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054612fd290614e3a565b801561301f5780601f10612ff45761010080835404028352916020019161301f565b820191906000526020600020905b81548152906001019060200180831161300257829003601f168201915b5050509183525050600282015460208083019190915260408051808201825260039094015460ff8116855261010090046001600160401b039081168584015292810193909352928452815160a0810183526004860180546001600160a01b0381168352600160a01b810490931682860152600160e01b90920463ffffffff1692810192909252600585015460608301526006850180549490930193919290916080840191906130cd90614e3a565b80601f01602080910402602001604051908101604052809291908181526020018280546130f990614e3a565b80156131465780601f1061311b57610100808354040283529160200191613146565b820191906000526020600020905b81548152906001019060200180831161312957829003601f168201915b5050509190925250505090525092915050565b6131616141cf565b61316a82612d5f565b6040805160a08101825282546001600160a01b0381168252600160a01b81046001600160401b03166020830152600160e01b900463ffffffff1691810191909152600182015460608201526002820180549192916080840191906131cd90614e3a565b80601f01602080910402602001604051908101604052809291908181526020018280546131f990614e3a565b80156132465780601f1061321b57610100808354040283529160200191613246565b820191906000526020600020905b81548152906001019060200180831161322957829003601f168201915b5050505050815250509050919050565b60008060605a9250601b60fb1b878760008161327457613274614ca4565b9050013560f81c60f81b6001600160f81b031916036134c45760006132d66132d189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b61376c565b90506002815110156133fd57856001600160a01b03166363febc9c868d8d8d4360006040518060c00160405280604051806040016040528060405180602001604052806000815250815260200160008152508152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160401b0316815260200160006001600160401b03168152506040518863ffffffff1660e01b815260040161338a969594939291906156d7565b600060405180830381600088803b1580156133a457600080fd5b5087f1935050505080156133b6575060015b6133f4576133c2615578565b806308c379a0036133e857506133d6615594565b806133e157506133ea565b91506134be565b505b3d6000803e3d6000fd5b600192506134be565b856001600160a01b03166363febc9c868d8d8d436134348860008151811061342757613427614ca4565b602002602001015161391c565b60fe811115613445576134456145d7565b8860008151811061345857613458614ca4565b60200260200101516040518863ffffffff1660e01b8152600401613481969594939291906156d7565b600060405180830381600088803b15801561349b57600080fd5b5087f1935050505080156134ad575060015b6134b9576133c2615578565b600192505b506135d2565b846001600160a01b031663bcc6307b858c8c8c436135178e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061374792505050565b6040518763ffffffff1660e01b8152600401613537959493929190615724565b600060405180830381600088803b15801561355157600080fd5b5087f193505050508015613563575060015b6135cd5761356f615578565b806308c379a0036135955750613583615594565b8061358e5750613597565b90506135d2565b505b3d8080156135c1576040519150601f19603f3d011682016040523d82523d6000602084013e6135c6565b606091505b50506135d2565b600191505b5a6135dd9084615758565b92509750975097945050505050565b6040518060a00160405280336001600160a01b03168152602001436001600160401b031681526020018463ffffffff1681526020018381526020018281525061363485612948565b81516004820180546020850151604086015163ffffffff16600160e01b026001600160e01b036001600160401b03909216600160a01b026001600160e01b03199093166001600160a01b039095169490941791909117169190911781556060830151600583015560808301519091600601906136b0908261576b565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60208110156137425781816020811061372757613727614ca4565b1a60f81b6001600160f81b031916156137425760010161370c565b919050565b61374f61429a565b60408051808201909152828152600060208201526122be8161397f565b60608160048060ff16826040015160ff16146137ac57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b60006137c085600001518660600151613a9f565b90506137cd81600161582a565b6001600160401b03166001600160401b038111156137ed576137ed61460f565b60405190808252806020026020018201604052801561382657816020015b61381361429a565b81526020019060019003908161380b5790505b50935060005b816001600160401b03168110156138ec5761384686613b67565b955061385186613b8f565b85828151811061386357613863614ca4565b6020026020010181905250600460ff16866040015160ff16036138bc57600061388b8761376c565b9050806001825161389c9190615758565b815181106138ac576138ac614ca4565b60200260200101519650506138e4565b600560ff16866040015160ff16036138d957600061388b87613c27565b6138e286613e11565b505b60010161382c565b508484826001600160401b03168151811061390957613909614ca4565b6020026020010181905250505050919050565b60008160008060ff16826040015160ff161461395c57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b61396e84600001518560600151613a9f565b6001600160401b0316949350505050565b61398761429a565b81515182906000036139ac576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b8015613a2f576139cc89613fd6565b9550816139d8816153ac565b6007600589901c169650601f881695509250506005198501613a27576020890151613a038a86613a9f565b9350808a60200151613a159190615758565b613a1f9084614cd1565b9250506139bd565b5060006139bd565b600760ff86161115613a595760405163bd2ac87960e01b815260ff86166004820152602401610a68565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613ab7575060ff8116610b9f565b8160ff16601803613ad557613acb83613fd6565b60ff169050610b9f565b8160ff16601903613af457613ae983614038565b61ffff169050610b9f565b8160ff16601a03613b1557613b08836140a4565b63ffffffff169050610b9f565b8160ff16601b03613b3057613b2983614103565b9050610b9f565b8160ff16601f03613b4957506001600160401b03610b9f565b604051636d785b1360e01b815260ff83166004820152602401610a68565b613b6f61429a565b81518051516020909101511015613b8b578151610b9f9061397f565b5090565b613b9761429a565b6040805160c081018083528451610100830184526060909152600060e0830152825180840190935280518352602090810151908301529081908152602001836020015160ff168152602001836040015160ff168152602001836060015160ff16815260200183608001516001600160401b031681526020018360a001516001600160401b03168152509050919050565b60608160058060ff16826040015160ff1614613c6757604080830151905161800560e51b815260ff91821660048201529082166024820152604401610a68565b6000613c7b85600001518660600151613a9f565b613c86906002615415565b9050613c9381600161582a565b6001600160401b03166001600160401b03811115613cb357613cb361460f565b604051908082528060200260200182016040528015613cec57816020015b613cd961429a565b815260200190600190039081613cd15790505b50935060005b816001600160401b03168110156138ec57613d0c86613b67565b9550613d1786613b8f565b858281518110613d2957613d29614ca4565b6020908102919091010152613d3f60028261584a565b158015613d545750604086015160ff16600314155b15613d8257604080870151905161800560e51b815260ff909116600482015260036024820152604401610a68565b604086015160ff1660041480613d9f5750604086015160ff166005145b15613dfe57604086015160009060ff16600414613dc457613dbf87613c27565b613dcd565b613dcd8761376c565b90508060018251613dde9190615758565b81518110613dee57613dee614ca4565b6020026020010151965050613e09565b613e0786613e11565b505b600101613cf2565b613e1961429a565b604082015160ff161580613e345750604082015160ff166001145b80613e6d5750604082015160ff166007148015613e5957506019826060015160ff1610155b8015613e6d5750601b826060015160ff1611155b15613ea057613e7b82614162565b6001600160401b03168260000151602001818151613e999190614cd1565b9052505090565b604082015160ff1660031480613ebd5750604082015160ff166002145b15613f01576000613ed683600001518460600151613a9f565b9050806001600160401b03168360000151602001818151613ef79190614cd1565b905250613b8b9050565b604082015160ff1660041480613f1e5750604082015160ff166005145b15613f4757613f3582600001518360600151613a9f565b6001600160401b031660808301525090565b604082015160ff166007141580613f795750816060015160ff16601414158015613f795750816060015160ff16601514155b15613b8b5760405162461bcd60e51b815260206004820152602760248201527f5769746e657443424f522e736b69703a20756e737570706f72746564206d616a6044820152666f72207479706560c81b6064820152608401610a68565b600081602001518260000151518082111561400e576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b835160208501805180830160010151955090819061402b826153ac565b8152505050505050919050565b60008160200151600261404b9190614cd1565b82515180821115614079576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516002818401810151965090916140978284614cd1565b9052509395945050505050565b6000816020015160046140b79190614cd1565b825151808211156140e5576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516004818401810151965090916140978284614cd1565b6000816020015160086141169190614cd1565b82515180821115614144576040516363a056dd60e01b81526004810183905260248101829052604401610a68565b83516020850180516008818401810151965090916140978284614cd1565b60006018826060015160ff16101561417c57506000919050565b601c826060015160ff1610156141ab576018826060015161419d919061585e565b60ff166001901b9050919050565b6060820151604051636d785b1360e01b815260ff9091166004820152602401610a68565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915290565b50805461420b90614e3a565b6000825580601f1061421b575050565b601f016020900490600052602060002090810190611b5491906142e1565b905290565b604051806040016040528061428d6040805160c081018252600080825260208083018290528284018290526060808401526080830182905283518085019094528184528301529060a082015290565b81526020016142396141cf565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613b8b57600081556001016142e2565b60005b838110156143115781810151838201526020016142f9565b50506000910152565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b815260008551614348816013850160208a016142f6565b85519083019061435f816013840160208a016142f6565b85519101906143758160138401602089016142f6565b845191019061438b8160138401602088016142f6565b016013019695505050505050565b6001600160a01b0381168114611b5457600080fd5b6000602082840312156143c057600080fd5b8135611b3c81614399565b803562ffffff8116811461374257600080fd5b600080604083850312156143f157600080fd5b82359150614401602084016143cb565b90509250929050565b60008083601f84011261441c57600080fd5b5081356001600160401b0381111561443357600080fd5b6020830191508360208260051b850101111561444e57600080fd5b9250929050565b6000806020838503121561446857600080fd5b82356001600160401b0381111561447e57600080fd5b61448a8582860161440a565b90969095509350505050565b6000602082840312156144a857600080fd5b5035919050565b600081518084526144c78160208601602086016142f6565b601f01601f19169290920160200192915050565b60018060a01b0381511682526001600160401b03602082015116602083015263ffffffff6040820151166040830152606081015160608301526000608082015160a0608085015261213160a08501826144af565b602081526000611b3c60208301846144db565b60018060a01b03815116825262ffffff60208201511660208301526001600160481b0360408201511660408301526000606082015160e0606085015261458b60e08501826144af565b90506080830151608085015260a083015160ff81511660a08601526001600160401b0360208201511660c0860152508091505092915050565b602081526000611b3c6020830184614542565b634e487b7160e01b600052602160045260246000fd5b600681106145fd576145fd6145d7565b9052565b60208101610b9f82846145ed565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561464a5761464a61460f565b6040525050565b60006001600160401b0382111561466a5761466a61460f565b5060051b60200190565b6000602080838503121561468757600080fd5b82356001600160401b0381111561469d57600080fd5b8301601f810185136146ae57600080fd5b80356146b981614651565b6040516146c68282614625565b82815260059290921b83018401918481019150878311156146e657600080fd5b928401925b8284101561470d5783356146fe81614399565b825292840192908401906146eb565b979650505050505050565b6000604082840312156122c157600080fd5b6000806060838503121561473d57600080fd5b823591506144018460208501614718565b60006001600160401b038211156147675761476761460f565b50601f01601f191660200190565b60006020828403121561478757600080fd5b81356001600160401b0381111561479d57600080fd5b8201601f810184136147ae57600080fd5b80356147b98161474e565b6040516147c68282614625565b8281528660208486010111156147db57600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561485157603f1988860301845261483f8583516144af565b94509285019290850190600101614823565b5092979650505050505050565b602081526000611b3c60208301846144af565b600481106145fd576145fd6145d7565b6020808252825182820181905260009190848201906040850190845b818110156148c0576148b0838551614871565b928401929184019160010161489d565b50909695505050505050565b60008083601f8401126148de57600080fd5b5081356001600160401b038111156148f557600080fd5b60208301915083602082850101111561444e57600080fd5b6000806000806060858703121561492357600080fd5b843593506020850135925060408501356001600160401b0381111561494757600080fd5b614953878288016148cc565b95989497509550505050565b60208101610b9f8284614871565b61ffff81168114611b5457600080fd5b6000806040838503121561499057600080fd5b8235915060208301356149a28161496d565b809150509250929050565b600080600080600080608087890312156149c657600080fd5b86356001600160401b03808211156149dd57600080fd5b6149e98a838b0161440a565b90985096506020890135915080821115614a0257600080fd5b50614a0f89828a016148cc565b979a9699509760408101359660609091013595509350505050565b60008060408385031215614a3d57600080fd5b50508035926020909101359150565b60008060008060808587031215614a6257600080fd5b84356001600160401b03811115614a7857600080fd5b614a84878288016148cc565b9095509350614a9890508660208701614718565b9150614aa6606086016143cb565b905092959194509250565b60ff81106145fd576145fd6145d7565b60208152614ad3602082018351614ab1565b6000602083015160408084015261213160608401826144af565b602081526000825160406020840152614b096060840182614542565b90506020840151601f19848303016040850152612d5682826144db565b803563ffffffff8116811461374257600080fd5b600080600080600060808688031215614b5257600080fd5b85359450614b6260208701614b26565b93506040860135925060608601356001600160401b03811115614b8457600080fd5b614b90888289016148cc565b969995985093965092949392505050565b600080600060808486031215614bb657600080fd5b83359250614bc78560208601614718565b9150614bd5606085016143cb565b90509250925092565b60008351614bf08184602088016142f6565b6101d160f51b9083019081528351614c0f8160028401602088016142f6565b01600201949350505050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff831680614c5a57614c5a614c1b565b8060ff84160491505092915050565b60ff8181168382160190811115610b9f57610b9f614c31565b600060ff831680614c9557614c95614c1b565b8060ff84160691505092915050565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b9f57610b9f614c31565b80820180821115610b9f57610b9f614c31565b60008235607e19833603018112614cfa57600080fd5b9190910192915050565b600082601f830112614d1557600080fd5b8151614d208161474e565b604051614d2d8282614625565b828152856020848701011115614d4257600080fd5b612d568360208301602088016142f6565b600060208284031215614d6557600080fd5b81516001600160401b03811115614d7b57600080fd5b61213184828501614d04565b82815260406020820152600061213160408301846144af565b600060208284031215614db257600080fd5b611b3c82614b26565b6000808335601e19843603018112614dd257600080fd5b8301803591506001600160401b03821115614dec57600080fd5b60200191503681900382131561444e57600080fd5b60008251614e138184602087016142f6565b743a20696e76616c6964207265706f7274206461746160581b920191825250601501919050565b600181811c90821680614e4e57607f821691505b6020821081036122c157634e487b7160e01b600052602260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156148c05783516001600160a01b031683529284019291840191600101614e8a565b60ff81168114611b5457600080fd5b6001600160401b0381168114611b5457600080fd5b83815260208101839052608081018235614eec81614eaf565b60ff1660408301526020830135614f0281614ebe565b6001600160401b038116606084015250949350505050565b60008060408385031215614f2d57600080fd5b8251614f3881614399565b60208401519092506001600160401b03811115614f5457600080fd5b614f6085828601614d04565b9150509250929050565b60006020808385031215614f7d57600080fd5b82516001600160401b03811115614f9357600080fd5b8301601f81018513614fa457600080fd5b8051614faf81614651565b604051614fbc8282614625565b82815260059290921b8301840191848101915087831115614fdc57600080fd5b928401925b8284101561470d578351614ff481614399565b82529284019290840190614fe1565b60006020828403121561501557600080fd5b81516001600160e01b031981168114611b3c57600080fd5b60006020828403121561503f57600080fd5b8151611b3c81614399565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b0383111561507a57600080fd5b8260051b8085606085013791909101606001949350505050565b600060208083850312156150a757600080fd5b82516001600160401b03808211156150be57600080fd5b818501915085601f8301126150d257600080fd5b81516150dd81614651565b6040516150ea8282614625565b82815260059290921b840185019185810191508883111561510a57600080fd5b8585015b83811015615142578051858111156151265760008081fd5b6151348b89838a0101614d04565b84525091860191860161510e565b5098975050505050505050565b61ffff828116828216039080821115610c8f57610c8f614c31565b600061ffff8084168061517f5761517f614c1b565b92169190910492915050565b61ffff818116838216019080821115610c8f57610c8f614c31565b6000602082840312156151b857600080fd5b8151611b3c8161496d565b6000602082840312156151d557600080fd5b81518015158114611b3c57600080fd5b601f821115612571576000816000526020600020601f850160051c8101602086101561520e5750805b601f850160051c820191505b8181101561522d5782815560010161521a565b505050505050565b6001600160401b0383111561524c5761524c61460f565b6152608361525a8354614e3a565b836151e5565b6000601f841160018114615294576000851561527c5750838201355b600019600387901b1c1916600186901b1783556152ee565b600083815260209020601f19861690835b828110156152c557868501358255602094850194600190920191016152a5565b50868210156152e25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160481b03818116838216019080821115610c8f57610c8f614c31565b86815260a060208201528460a0820152848660c0830137600060c086830101526000601f19601f870116820185604084015284606084015260c083820301608084015261536560c08201856144af565b9998505050505050505050565b60006020828403121561538457600080fd5b8135611b3c81614ebe565b6000602082840312156153a157600080fd5b8135611b3c81614eaf565b6000600182016153be576153be614c31565b5060010190565b81356153d081614eaf565b60ff8116905081548160ff19821617835560208401356153ef81614ebe565b68ffffffffffffffff008160081b16836001600160481b03198416171784555050505050565b6001600160401b0381811683821602808216919082811461543857615438614c31565b505092915050565b61544a81846145ed565b60006020604060208401526000845461546281614e3a565b806040870152606060018084166000811461548457600181146154a0576154d0565b60ff19851660608a0152606084151560051b8a010195506154d0565b89600052602060002060005b858110156154c75781548b82018601529083019088016154ac565b8a016060019650505b50939998505050505050505050565b6000602082840312156154f157600080fd5b81516001600160401b038082111561550857600080fd5b908301906040828603121561551c57600080fd5b6040516040810181811083821117156155375761553761460f565b604052825160ff811061554957600080fd5b815260208301518281111561555d57600080fd5b61556987828601614d04565b60208301525095945050505050565b600060033d11156155915760046000803e5060005160e01c5b90565b600060443d10156155a25790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156155d157505050505090565b82850191508151818111156155e95750505050505090565b843d87010160208285010111156156035750505050505090565b61561260208286010187614625565b509095945050505050565b7002bb4ba3732ba22b93937b939a634b11d1607d1b8152600082516156498160118501602087016142f6565b9190910160110192915050565b6000815160c084528051604060c08601526156756101008601826144af565b9050602082015160e086015260ff602085015116602086015260ff604085015116604086015260ff6060850151166060860152608084015191506001600160401b0380831660808701528060a08601511660a087015250809250505092915050565b8681526001600160401b03861660208201528460408201528360608201526157026080820184614ab1565b60c060a0820152600061571860c0830184615656565b98975050505050505050565b8581526001600160401b038516602082015283604082015282606082015260a06080820152600061470d60a0830184615656565b81810381811115610b9f57610b9f614c31565b81516001600160401b038111156157845761578461460f565b615798816157928454614e3a565b846151e5565b602080601f8311600181146157cd57600084156157b55750858301515b600019600386901b1c1916600185901b17855561522d565b600085815260208120601f198616915b828110156157fc578886015182559484019460019091019084016157dd565b508582101561581a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b03818116838216019080821115610c8f57610c8f614c31565b60008261585957615859614c1b565b500690565b60ff8281168282160390811115610b9f57610b9f614c3156fe5769746e65744f7261636c653a2063616c6c6261636b20657863656564656420676173206c696d69745769746e65744572726f72734c69623a20617373657274696f6e206661696c6564f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183f595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e184a2646970667358221220840aee61fc3c262ab74b0df7938e5dc1e0bfe9e1e9a23680e58a8e0e4ca2983e64736f6c63430008190033",
  "linkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 4324
        },
        {
          "length": 20,
          "start": 4995
        },
        {
          "length": 20,
          "start": 7664
        },
        {
          "length": 20,
          "start": 8150
        },
        {
          "length": 20,
          "start": 9849
        },
        {
          "length": 20,
          "start": 10382
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 12569
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/data/WitnetOracleDataLib.sol": {
      "WitnetOracleDataLib": [
        {
          "length": 20,
          "start": 3487
        },
        {
          "length": 20,
          "start": 4158
        },
        {
          "length": 20,
          "start": 6827
        },
        {
          "length": 20,
          "start": 7313
        },
        {
          "length": 20,
          "start": 9012
        },
        {
          "length": 20,
          "start": 9545
        }
      ]
    },
    "contracts/libs/WitnetErrorsLib.sol": {
      "WitnetErrorsLib": [
        {
          "length": 20,
          "start": 11732
        }
      ]
    }
  }
}
