{
  "contractName": "WitnetUpgradableBase",
  "abi": [
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "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"
    },
    {
      "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": 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"
    },
    {
      "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": "codehash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_codehash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deployer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "class",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"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\"},{\"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\":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\"},{\"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\":\"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\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@otherplane.com>\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address,address,bytes32,string)\":{\"params\":{\"baseAddr\":\"The address of the new implementation contract.\",\"baseCodehash\":\"The EVM-codehash of the new implementation contract.\",\"from\":\"The address who ordered the upgrading. Namely, the WRB operator in \\\"trustable\\\" implementations.\",\"versionTag\":\"Ascii-encoded version literal with which the implementation deployer decided to tag it.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"base()\":{\"details\":\"Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern.\"},\"codehash()\":{\"details\":\"Retrieves the immutable codehash of this contract, even if invoked as delegatecall.\"},\"initialize(bytes)\":{\"details\":\"Must fail when trying to upgrade to same logic contract more than once.\"},\"isUpgradable()\":{\"details\":\"Determines whether the logic of this contract is potentially upgradable.\"},\"isUpgradableFrom(address)\":{\"details\":\"Tells whether provided address could eventually upgrade the contract.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"proxiableUUID\":{\"details\":\"Gets immutable \\\"heritage blood line\\\" (ie. genotype) as a Proxiable, and eventually Upgradeable, contract.      If implemented as an Upgradeable touch, upgrading this contract to another one with a different       `proxiableUUID()` value should fail.\"}},\"title\":\"Witnet Request Board base contract, with an Upgradeable (and Destructible) touch.\",\"version\":1},\"userdoc\":{\"events\":{\"Upgraded(address,address,bytes32,string)\":{\"notice\":\"Emitted every time the contract gets upgraded.\"}},\"kind\":\"user\",\"methods\":{\"initialize(bytes)\":{\"notice\":\"Re-initialize contract's storage context upon a new upgrade from a proxy.    \"},\"version()\":{\"notice\":\"Retrieves human-readable version tag of current implementation.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetUpgradableBase.sol\":\"WitnetUpgradableBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/core/WitnetUpgradableBase.sol\":{\"keccak256\":\"0x9cea47781e0005266e14fadf8d1ee565d0814d4d51b30dced11bdee37b663060\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb1f843f53c693f4b5a8f32249ac2eb93095671b99c90aa7c6d335eb7153e827\",\"dweb:/ipfs/QmSLvVGCcg2FZVWPB82yVb57SFixkuDm2BqjvgzJpnYfZp\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Ownable.sol\":{\"keccak256\":\"0x494bda32f9a218d9c33ea82112129c0933ab52f57eabfbf0d14a8742a3370800\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c4cf04ebb052fed9d15cf93ff4523955ee311aa4425ee85f0e80b4489c94e76\",\"dweb:/ipfs/QmfMf4WD7woTaQSTbJxxoan2aXSeY7ovY5NoipSBw5rMPK\"]},\"project:/contracts/patterns/Ownable2Step.sol\":{\"keccak256\":\"0x7033d8133957a291cf9b8be30bfc4b95e6414a20995911d1b5df8ea149580604\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e20a079adc224113306392d27e0cf202c6c4a7678c4705fd3bbbca99c1e9b816\",\"dweb:/ipfs/QmWrFv2SbSokhrWhwL94sW5x1HyT7rX5f4Scowe4bWHHqu\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/ReentrancyGuard.sol\":{\"keccak256\":\"0x1470caf4bd78b79f706e28a8a85c95a6e13ec33eda04275e5da84464130831e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c974fb4dc29718a84f9ab5fa3f8c25c7f889050a38445e16c3ead5ff9d4b4bab\",\"dweb:/ipfs/QmbuGjkSjngbTZMRPijL9p56fP9cK5jMnWsFmvYAQj3qAY\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\n// solhint-disable var-name-mixedcase\r\n// solhint-disable payable-fallback\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"../patterns/Ownable2Step.sol\";\r\nimport \"../patterns/ReentrancyGuard.sol\";\r\nimport \"../patterns/Upgradeable.sol\";\r\n\r\nimport \"./WitnetProxy.sol\";\r\n\r\n/// @title Witnet Request Board base contract, with an Upgradeable (and Destructible) touch.\r\n/// @author Guillermo Díaz <guillermo@otherplane.com>\r\nabstract contract WitnetUpgradableBase\r\n    is\r\n        Ownable2Step,\r\n        Upgradeable, \r\n        ReentrancyGuard\r\n{\r\n    bytes32 internal immutable _WITNET_UPGRADABLE_VERSION;\r\n\r\n    address public immutable deployer = msg.sender;\r\n\r\n    constructor(\r\n            bool _upgradable,\r\n            bytes32 _versionTag,\r\n            string memory _proxiableUUID\r\n        )\r\n        Upgradeable(_upgradable)\r\n    {\r\n        _WITNET_UPGRADABLE_VERSION = _versionTag;\r\n        proxiableUUID = keccak256(bytes(_proxiableUUID));\r\n    }\r\n    \r\n    /// @dev Reverts if proxy delegatecalls to unexistent method.\r\n    fallback() virtual external {\r\n        _revert(\"not implemented\");\r\n    }\r\n\r\n\r\n    function class() virtual public view returns (string memory) {\r\n        return type(WitnetUpgradableBase).name;\r\n    }\r\n   \r\n    // ================================================================================================================\r\n    // --- Overrides 'Proxiable' --------------------------------------------------------------------------------------\r\n\r\n    /// @dev Gets immutable \"heritage blood line\" (ie. genotype) as a Proxiable, and eventually Upgradeable, contract.\r\n    ///      If implemented as an Upgradeable touch, upgrading this contract to another one with a different \r\n    ///      `proxiableUUID()` value should fail.\r\n    bytes32 public immutable override proxiableUUID;\r\n\r\n\r\n    // ================================================================================================================\r\n    // --- Overrides 'Upgradeable' --------------------------------------------------------------------------------------\r\n\r\n    /// Retrieves human-readable version tag of current implementation.\r\n    function version() public view virtual override returns (string memory) {\r\n        return _toString(_WITNET_UPGRADABLE_VERSION);\r\n    }\r\n\r\n\r\n    // ================================================================================================================\r\n    // --- Internal methods -------------------------------------------------------------------------------------------\r\n\r\n    function _require(\r\n            bool _condition, \r\n            string memory _message\r\n        )\r\n        internal view\r\n    {\r\n        if (!_condition) {\r\n            _revert(_message);\r\n        }\r\n    }\r\n\r\n    function _revert(string memory _message)\r\n        internal view\r\n    {\r\n        revert(\r\n            string(abi.encodePacked(\r\n                class(),\r\n                \": \",\r\n                _message\r\n            ))\r\n        );\r\n    }\r\n\r\n    /// Converts bytes32 into string.\r\n    function _toString(bytes32 _bytes32)\r\n        internal pure\r\n        returns (string memory)\r\n    {\r\n        bytes memory _bytes = new bytes(_toStringLength(_bytes32));\r\n        for (uint _i = 0; _i < _bytes.length;) {\r\n            _bytes[_i] = _bytes32[_i];\r\n            unchecked {\r\n                _i ++;\r\n            }\r\n        }\r\n        return string(_bytes);\r\n    }\r\n\r\n    // Calculate length of string-equivalent to given bytes32.\r\n    function _toStringLength(bytes32 _bytes32)\r\n        internal pure\r\n        returns (uint _length)\r\n    {\r\n        for (; _length < 32; ) {\r\n            if (_bytes32[_length] == 0) {\r\n                break;\r\n            }\r\n            unchecked {\r\n                _length ++;\r\n            }\r\n        }\r\n    }\r\n\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\core\\WitnetUpgradableBase.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/WitnetUpgradableBase.sol",
    "exportedSymbols": {
      "Context": [
        509
      ],
      "ERC165": [
        602
      ],
      "IERC165": [
        614
      ],
      "Initializable": [
        253
      ],
      "Ownable": [
        401
      ],
      "Ownable2Step": [
        24094
      ],
      "Proxiable": [
        24189
      ],
      "ReentrancyGuard": [
        578
      ],
      "Upgradeable": [
        24304
      ],
      "WitnetProxy": [
        3700
      ],
      "WitnetUpgradableBase": [
        3887
      ]
    },
    "id": 3888,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3702,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "111:31:28"
      },
      {
        "absolutePath": "project:/contracts/patterns/Ownable2Step.sol",
        "file": "../patterns/Ownable2Step.sol",
        "id": 3703,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3888,
        "sourceUnit": 24095,
        "src": "146:38:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/patterns/ReentrancyGuard.sol",
        "file": "../patterns/ReentrancyGuard.sol",
        "id": 3704,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3888,
        "sourceUnit": 24193,
        "src": "186:41:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/patterns/Upgradeable.sol",
        "file": "../patterns/Upgradeable.sol",
        "id": 3705,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3888,
        "sourceUnit": 24305,
        "src": "229:37:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/core/WitnetProxy.sol",
        "file": "./WitnetProxy.sol",
        "id": 3706,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3888,
        "sourceUnit": 3701,
        "src": "270:27:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 3708,
              "name": "Ownable2Step",
              "nameLocations": [
                "507:12:28"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 24094,
              "src": "507:12:28"
            },
            "id": 3709,
            "nodeType": "InheritanceSpecifier",
            "src": "507:12:28"
          },
          {
            "baseName": {
              "id": 3710,
              "name": "Upgradeable",
              "nameLocations": [
                "530:11:28"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 24304,
              "src": "530:11:28"
            },
            "id": 3711,
            "nodeType": "InheritanceSpecifier",
            "src": "530:11:28"
          },
          {
            "baseName": {
              "id": 3712,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "553:15:28"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 578,
              "src": "553:15:28"
            },
            "id": 3713,
            "nodeType": "InheritanceSpecifier",
            "src": "553:15:28"
          }
        ],
        "canonicalName": "WitnetUpgradableBase",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 3707,
          "nodeType": "StructuredDocumentation",
          "src": "301:150:28",
          "text": "@title Witnet Request Board base contract, with an Upgradeable (and Destructible) touch.\n @author Guillermo Díaz <guillermo@otherplane.com>"
        },
        "fullyImplemented": false,
        "id": 3887,
        "linearizedBaseContracts": [
          3887,
          578,
          24304,
          24189,
          253,
          24094,
          401,
          509
        ],
        "name": "WitnetUpgradableBase",
        "nameLocation": "469:20:28",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 3715,
            "mutability": "immutable",
            "name": "_WITNET_UPGRADABLE_VERSION",
            "nameLocation": "604:26:28",
            "nodeType": "VariableDeclaration",
            "scope": 3887,
            "src": "577:53:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3714,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "577:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "d5f39488",
            "id": 3719,
            "mutability": "immutable",
            "name": "deployer",
            "nameLocation": "664:8:28",
            "nodeType": "VariableDeclaration",
            "scope": 3887,
            "src": "639:46:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3716,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "639:7:28",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "expression": {
                "id": 3717,
                "name": "msg",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967281,
                "src": "675:3:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_magic_message",
                  "typeString": "msg"
                }
              },
              "id": 3718,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberLocation": "679:6:28",
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "src": "675:10:28",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 3744,
              "nodeType": "Block",
              "src": "864:118:28",
              "statements": [
                {
                  "expression": {
                    "id": 3733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3731,
                      "name": "_WITNET_UPGRADABLE_VERSION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3715,
                      "src": "875:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3732,
                      "name": "_versionTag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3723,
                      "src": "904:11:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "875:40:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3734,
                  "nodeType": "ExpressionStatement",
                  "src": "875:40:28"
                },
                {
                  "expression": {
                    "id": 3742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3735,
                      "name": "proxiableUUID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3769,
                      "src": "926:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 3739,
                              "name": "_proxiableUUID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3725,
                              "src": "958:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "952:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3737,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "952:5:28",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "952:21:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3736,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967288,
                        "src": "942:9:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "942:32:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "926:48:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3743,
                  "nodeType": "ExpressionStatement",
                  "src": "926:48:28"
                }
              ]
            },
            "id": 3745,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 3728,
                    "name": "_upgradable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3721,
                    "src": "846:11:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                ],
                "id": 3729,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 3727,
                  "name": "Upgradeable",
                  "nameLocations": [
                    "834:11:28"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 24304,
                  "src": "834:11:28"
                },
                "nodeType": "ModifierInvocation",
                "src": "834:24:28"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3726,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3721,
                  "mutability": "mutable",
                  "name": "_upgradable",
                  "nameLocation": "725:11:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3745,
                  "src": "720:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3720,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "720:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3723,
                  "mutability": "mutable",
                  "name": "_versionTag",
                  "nameLocation": "759:11:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3745,
                  "src": "751:19:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3722,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "751:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3725,
                  "mutability": "mutable",
                  "name": "_proxiableUUID",
                  "nameLocation": "799:14:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3745,
                  "src": "785:28:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3724,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "785:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "705:119:28"
            },
            "returnParameters": {
              "id": 3730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "864:0:28"
            },
            "scope": 3887,
            "src": "694:288:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3753,
              "nodeType": "Block",
              "src": "1089:45:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f7420696d706c656d656e746564",
                        "id": 3750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1108:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_32d075b43bd38f25ee5981ec20d2adc90449bf9822d065b5dee1ff7a3dcb82b9",
                          "typeString": "literal_string \"not implemented\""
                        },
                        "value": "not implemented"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_32d075b43bd38f25ee5981ec20d2adc90449bf9822d065b5dee1ff7a3dcb82b9",
                          "typeString": "literal_string \"not implemented\""
                        }
                      ],
                      "id": 3749,
                      "name": "_revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3816,
                      "src": "1100:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) view"
                      }
                    },
                    "id": 3751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1100:26:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3752,
                  "nodeType": "ExpressionStatement",
                  "src": "1100:26:28"
                }
              ]
            },
            "documentation": {
              "id": 3746,
              "nodeType": "StructuredDocumentation",
              "src": "994:61:28",
              "text": "@dev Reverts if proxy delegatecalls to unexistent method."
            },
            "id": 3754,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3747,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1069:2:28"
            },
            "returnParameters": {
              "id": 3748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1089:0:28"
            },
            "scope": 3887,
            "src": "1061:73:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3764,
              "nodeType": "Block",
              "src": "1205:57:28",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 3760,
                          "name": "WitnetUpgradableBase",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3887,
                          "src": "1228:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_WitnetUpgradableBase_$3887_$",
                            "typeString": "type(contract WitnetUpgradableBase)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_contract$_WitnetUpgradableBase_$3887_$",
                            "typeString": "type(contract WitnetUpgradableBase)"
                          }
                        ],
                        "id": 3759,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967269,
                        "src": "1223:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 3761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1223:26:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetUpgradableBase_$3887",
                        "typeString": "type(contract WitnetUpgradableBase)"
                      }
                    },
                    "id": 3762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "1250:4:28",
                    "memberName": "name",
                    "nodeType": "MemberAccess",
                    "src": "1223:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 3758,
                  "id": 3763,
                  "nodeType": "Return",
                  "src": "1216:38:28"
                }
              ]
            },
            "functionSelector": "bff852fa",
            "id": 3765,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "class",
            "nameLocation": "1153:5:28",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3755,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1158:2:28"
            },
            "returnParameters": {
              "id": 3758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3757,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3765,
                  "src": "1190:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3756,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1190:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1189:15:28"
            },
            "scope": 3887,
            "src": "1144:118:28",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              24153
            ],
            "constant": false,
            "documentation": {
              "id": 3766,
              "nodeType": "StructuredDocumentation",
              "src": "1517:276:28",
              "text": "@dev Gets immutable \"heritage blood line\" (ie. genotype) as a Proxiable, and eventually Upgradeable, contract.\n      If implemented as an Upgradeable touch, upgrading this contract to another one with a different \n      `proxiableUUID()` value should fail."
            },
            "functionSelector": "52d1902d",
            "id": 3769,
            "mutability": "immutable",
            "name": "proxiableUUID",
            "nameLocation": "1833:13:28",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 3768,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1824:8:28"
            },
            "scope": 3887,
            "src": "1799:47:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3767,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1799:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              24303
            ],
            "body": {
              "id": 3780,
              "nodeType": "Block",
              "src": "2248:63:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3777,
                        "name": "_WITNET_UPGRADABLE_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3715,
                        "src": "2276:26:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3776,
                      "name": "_toString",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3861,
                      "src": "2266:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (bytes32) pure returns (string memory)"
                      }
                    },
                    "id": 3778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2266:37:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 3775,
                  "id": 3779,
                  "nodeType": "Return",
                  "src": "2259:44:28"
                }
              ]
            },
            "documentation": {
              "id": 3770,
              "nodeType": "StructuredDocumentation",
              "src": "2103:67:28",
              "text": "Retrieves human-readable version tag of current implementation."
            },
            "functionSelector": "54fd4d50",
            "id": 3781,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nameLocation": "2185:7:28",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3772,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2215:8:28"
            },
            "parameters": {
              "id": 3771,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2192:2:28"
            },
            "returnParameters": {
              "id": 3775,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3774,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3781,
                  "src": "2233:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3773,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2233:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2232:15:28"
            },
            "scope": 3887,
            "src": "2176:135:28",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3796,
              "nodeType": "Block",
              "src": "2690:79:28",
              "statements": [
                {
                  "condition": {
                    "id": 3789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2705:11:28",
                    "subExpression": {
                      "id": 3788,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3783,
                      "src": "2706:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3795,
                  "nodeType": "IfStatement",
                  "src": "2701:61:28",
                  "trueBody": {
                    "id": 3794,
                    "nodeType": "Block",
                    "src": "2718:44:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3791,
                              "name": "_message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3785,
                              "src": "2741:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 3790,
                            "name": "_revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3816,
                            "src": "2733:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) view"
                            }
                          },
                          "id": 3792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2733:17:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3793,
                        "nodeType": "ExpressionStatement",
                        "src": "2733:17:28"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_require",
            "nameLocation": "2574:8:28",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3783,
                  "mutability": "mutable",
                  "name": "_condition",
                  "nameLocation": "2602:10:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3797,
                  "src": "2597:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3782,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2597:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3785,
                  "mutability": "mutable",
                  "name": "_message",
                  "nameLocation": "2642:8:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3797,
                  "src": "2628:22:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3784,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2628:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2582:79:28"
            },
            "returnParameters": {
              "id": 3787,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2690:0:28"
            },
            "scope": 3887,
            "src": "2565:204:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3815,
              "nodeType": "Block",
              "src": "2846:166:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 3807,
                                  "name": "class",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3765,
                                  "src": "2920:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                                    "typeString": "function () view returns (string memory)"
                                  }
                                },
                                "id": 3808,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2920:7:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "hexValue": "3a20",
                                "id": 3809,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2946:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_e64009107d042bdc478cc69a5433e4573ea2e8a23a46646c0ee241e30c888e73",
                                  "typeString": "literal_string \": \""
                                },
                                "value": ": "
                              },
                              {
                                "id": 3810,
                                "name": "_message",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3799,
                                "src": "2969:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e64009107d042bdc478cc69a5433e4573ea2e8a23a46646c0ee241e30c888e73",
                                  "typeString": "literal_string \": \""
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "expression": {
                                "id": 3805,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967295,
                                "src": "2885:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 3806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "2889:12:28",
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "src": "2885:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 3811,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2885:107:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 3804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2878:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                            "typeString": "type(string storage pointer)"
                          },
                          "typeName": {
                            "id": 3803,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "2878:6:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2878:115:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3802,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967277,
                        4294967277
                      ],
                      "referencedDeclaration": 4294967277,
                      "src": "2857:6:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 3813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2857:147:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3814,
                  "nodeType": "ExpressionStatement",
                  "src": "2857:147:28"
                }
              ]
            },
            "id": 3816,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_revert",
            "nameLocation": "2786:7:28",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3799,
                  "mutability": "mutable",
                  "name": "_message",
                  "nameLocation": "2808:8:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3816,
                  "src": "2794:22:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3798,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2794:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2793:24:28"
            },
            "returnParameters": {
              "id": 3801,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2846:0:28"
            },
            "scope": 3887,
            "src": "2777:235:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3860,
              "nodeType": "Block",
              "src": "3157:274:28",
              "statements": [
                {
                  "assignments": [
                    3825
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3825,
                      "mutability": "mutable",
                      "name": "_bytes",
                      "nameLocation": "3181:6:28",
                      "nodeType": "VariableDeclaration",
                      "scope": 3860,
                      "src": "3168:19:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3824,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3168:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3832,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3829,
                            "name": "_bytes32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3819,
                            "src": "3216:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 3828,
                          "name": "_toStringLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3886,
                          "src": "3200:15:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                            "typeString": "function (bytes32) pure returns (uint256)"
                          }
                        },
                        "id": 3830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3200:25:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3190:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 3826,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3194:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 3831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3190:36:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3168:58:28"
                },
                {
                  "body": {
                    "id": 3853,
                    "nodeType": "Block",
                    "src": "3276:116:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 3847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3841,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3825,
                              "src": "3291:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3843,
                            "indexExpression": {
                              "id": 3842,
                              "name": "_i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3834,
                              "src": "3298:2:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3291:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 3844,
                              "name": "_bytes32",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3819,
                              "src": "3304:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 3846,
                            "indexExpression": {
                              "id": 3845,
                              "name": "_i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3834,
                              "src": "3313:2:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3304:12:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "3291:25:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 3848,
                        "nodeType": "ExpressionStatement",
                        "src": "3291:25:28"
                      },
                      {
                        "id": 3852,
                        "nodeType": "UncheckedBlock",
                        "src": "3331:50:28",
                        "statements": [
                          {
                            "expression": {
                              "id": 3850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "3360:5:28",
                              "subExpression": {
                                "id": 3849,
                                "name": "_i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3834,
                                "src": "3360:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3851,
                            "nodeType": "ExpressionStatement",
                            "src": "3360:5:28"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3837,
                      "name": "_i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3834,
                      "src": "3255:2:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 3838,
                        "name": "_bytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3825,
                        "src": "3260:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3839,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3267:6:28",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3260:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3255:18:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3854,
                  "initializationExpression": {
                    "assignments": [
                      3834
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 3834,
                        "mutability": "mutable",
                        "name": "_i",
                        "nameLocation": "3247:2:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 3854,
                        "src": "3242:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3833,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "3242:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 3836,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 3835,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3252:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3242:11:28"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "3237:155:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3857,
                        "name": "_bytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3825,
                        "src": "3416:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "3409:6:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 3855,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3409:6:28",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 3858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3409:14:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 3823,
                  "id": 3859,
                  "nodeType": "Return",
                  "src": "3402:21:28"
                }
              ]
            },
            "documentation": {
              "id": 3817,
              "nodeType": "StructuredDocumentation",
              "src": "3020:33:28",
              "text": "Converts bytes32 into string."
            },
            "id": 3861,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toString",
            "nameLocation": "3068:9:28",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3819,
                  "mutability": "mutable",
                  "name": "_bytes32",
                  "nameLocation": "3086:8:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3861,
                  "src": "3078:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3818,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3078:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3077:18:28"
            },
            "returnParameters": {
              "id": 3823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3822,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3861,
                  "src": "3137:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3821,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3137:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3136:15:28"
            },
            "scope": 3887,
            "src": "3059:372:28",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3885,
              "nodeType": "Block",
              "src": "3606:204:28",
              "statements": [
                {
                  "body": {
                    "id": 3883,
                    "nodeType": "Block",
                    "src": "3640:163:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          },
                          "id": 3875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 3871,
                              "name": "_bytes32",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3863,
                              "src": "3659:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 3873,
                            "indexExpression": {
                              "id": 3872,
                              "name": "_length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3866,
                              "src": "3668:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3659:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3874,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3680:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3659:22:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3878,
                        "nodeType": "IfStatement",
                        "src": "3655:68:28",
                        "trueBody": {
                          "id": 3877,
                          "nodeType": "Block",
                          "src": "3683:40:28",
                          "statements": [
                            {
                              "id": 3876,
                              "nodeType": "Break",
                              "src": "3702:5:28"
                            }
                          ]
                        }
                      },
                      {
                        "id": 3882,
                        "nodeType": "UncheckedBlock",
                        "src": "3737:55:28",
                        "statements": [
                          {
                            "expression": {
                              "id": 3880,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "3766:10:28",
                              "subExpression": {
                                "id": 3879,
                                "name": "_length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3866,
                                "src": "3766:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3881,
                            "nodeType": "ExpressionStatement",
                            "src": "3766:10:28"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3868,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3866,
                      "src": "3624:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 3869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3634:2:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "3624:12:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3884,
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "3617:186:28"
                }
              ]
            },
            "id": 3886,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toStringLength",
            "nameLocation": "3512:15:28",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3863,
                  "mutability": "mutable",
                  "name": "_bytes32",
                  "nameLocation": "3536:8:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3886,
                  "src": "3528:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3862,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3528:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3527:18:28"
            },
            "returnParameters": {
              "id": 3867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3866,
                  "mutability": "mutable",
                  "name": "_length",
                  "nameLocation": "3592:7:28",
                  "nodeType": "VariableDeclaration",
                  "scope": 3886,
                  "src": "3587:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3865,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3587:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3586:14:28"
            },
            "scope": 3887,
            "src": "3503:307:28",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3888,
        "src": "451:3364:28",
        "usedErrors": [
          16,
          19,
          267,
          272,
          523
        ],
        "usedEvents": [
          24,
          278,
          24023,
          24232
        ]
      }
    ],
    "src": "111:3704:28"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.217Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@otherplane.com>",
    "errors": {
      "InvalidInitialization()": [
        {
          "details": "The contract is already initialized."
        }
      ],
      "NotInitializing()": [
        {
          "details": "The contract is not initializing."
        }
      ],
      "OwnableInvalidOwner(address)": [
        {
          "details": "The owner is not a valid owner account. (eg. `address(0)`)"
        }
      ],
      "OwnableUnauthorizedAccount(address)": [
        {
          "details": "The caller account is not authorized to perform an operation."
        }
      ],
      "ReentrancyGuardReentrantCall()": [
        {
          "details": "Unauthorized reentrant call."
        }
      ]
    },
    "events": {
      "Initialized(uint64)": {
        "details": "Triggered when the contract has been initialized or reinitialized."
      },
      "Upgraded(address,address,bytes32,string)": {
        "params": {
          "baseAddr": "The address of the new implementation contract.",
          "baseCodehash": "The EVM-codehash of the new implementation contract.",
          "from": "The address who ordered the upgrading. Namely, the WRB operator in \"trustable\" implementations.",
          "versionTag": "Ascii-encoded version literal with which the implementation deployer decided to tag it."
        }
      }
    },
    "kind": "dev",
    "methods": {
      "acceptOwnership()": {
        "details": "The new owner accepts the ownership transfer."
      },
      "base()": {
        "details": "Retrieves base contract. Differs from address(this) when called via delegate-proxy pattern."
      },
      "codehash()": {
        "details": "Retrieves the immutable codehash of this contract, even if invoked as delegatecall."
      },
      "initialize(bytes)": {
        "details": "Must fail when trying to upgrade to same logic contract more than once."
      },
      "isUpgradable()": {
        "details": "Determines whether the logic of this contract is potentially upgradable."
      },
      "isUpgradableFrom(address)": {
        "details": "Tells whether provided address could eventually upgrade the contract."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "pendingOwner()": {
        "details": "Returns the address of the pending owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."
      }
    },
    "stateVariables": {
      "proxiableUUID": {
        "details": "Gets immutable \"heritage blood line\" (ie. genotype) as a Proxiable, and eventually Upgradeable, contract.      If implemented as an Upgradeable touch, upgrading this contract to another one with a different       `proxiableUUID()` value should fail."
      }
    },
    "title": "Witnet Request Board base contract, with an Upgradeable (and Destructible) touch.",
    "version": 1
  },
  "userdoc": {
    "events": {
      "Upgraded(address,address,bytes32,string)": {
        "notice": "Emitted every time the contract gets upgraded."
      }
    },
    "kind": "user",
    "methods": {
      "initialize(bytes)": {
        "notice": "Re-initialize contract's storage context upon a new upgrade from a proxy.    "
      },
      "version()": {
        "notice": "Retrieves human-readable version tag of current implementation."
      }
    },
    "version": 1
  }
}