{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "Version",
          "name": "version",
          "type": "uint48"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "activatedBy",
          "type": "address"
        }
      ],
      "name": "LogVersionableActivated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "activatedBy",
          "type": "address"
        }
      ],
      "name": "activate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "idx",
          "type": "uint256"
        }
      ],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "Version",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Version",
          "name": "_version",
          "type": "uint48"
        }
      ],
      "name": "getVersionInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "Version",
              "name": "version",
              "type": "uint48"
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "activatedBy",
              "type": "address"
            },
            {
              "internalType": "Blocknumber",
              "name": "activatedIn",
              "type": "uint32"
            },
            {
              "internalType": "Timestamp",
              "name": "activatedAt",
              "type": "uint40"
            }
          ],
          "internalType": "struct IVersionable.VersionInfo",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Version",
          "name": "_version",
          "type": "uint48"
        }
      ],
      "name": "isActivated",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Version",
          "name": "_version",
          "type": "uint48"
        }
      ],
      "name": "toVersionParts",
      "outputs": [
        {
          "internalType": "VersionPart",
          "name": "major",
          "type": "uint16"
        },
        {
          "internalType": "VersionPart",
          "name": "minor",
          "type": "uint16"
        },
        {
          "internalType": "VersionPart",
          "name": "patch",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "Version",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "versionParts",
      "outputs": [
        {
          "internalType": "VersionPart",
          "name": "major",
          "type": "uint16"
        },
        {
          "internalType": "VersionPart",
          "name": "minor",
          "type": "uint16"
        },
        {
          "internalType": "VersionPart",
          "name": "patch",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "versions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "43": "contracts/shared/IBaseTypes.sol",
    "44": "contracts/shared/IVersionType.sol",
    "45": "contracts/shared/IVersionable.sol"
  },
  "ast": {
    "absolutePath": "contracts/shared/IVersionable.sol",
    "exportedSymbols": {
      "Blocknumber": [
        4713
      ],
      "IVersionable": [
        4856
      ],
      "Timestamp": [
        4530
      ],
      "Version": [
        12269
      ],
      "VersionPart": [
        12267
      ]
    },
    "id": 4857,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4755,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:24:45"
      },
      {
        "absolutePath": "contracts/shared/IBaseTypes.sol",
        "file": "./IBaseTypes.sol",
        "id": 4758,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4857,
        "sourceUnit": 4754,
        "src": "65:56:45",
        "symbolAliases": [
          {
            "foreign": {
              "id": 4756,
              "name": "Blocknumber",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 4713,
              "src": "73:11:45",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 4757,
              "name": "Timestamp",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 4530,
              "src": "86:9:45",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/shared/IVersionType.sol",
        "file": "./IVersionType.sol",
        "id": 4761,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4857,
        "sourceUnit": 12455,
        "src": "122:56:45",
        "symbolAliases": [
          {
            "foreign": {
              "id": 4759,
              "name": "Version",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 12269,
              "src": "130:7:45",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 4760,
              "name": "VersionPart",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 12267,
              "src": "139:11:45",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IVersionable",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 4856,
        "linearizedBaseContracts": [
          4856
        ],
        "name": "IVersionable",
        "nameLocation": "190:12:45",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "IVersionable.VersionInfo",
            "id": 4775,
            "members": [
              {
                "constant": false,
                "id": 4764,
                "mutability": "mutable",
                "name": "version",
                "nameLocation": "247:7:45",
                "nodeType": "VariableDeclaration",
                "scope": 4775,
                "src": "239:15:45",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                  "typeString": "Version"
                },
                "typeName": {
                  "id": 4763,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 4762,
                    "name": "Version",
                    "nameLocations": [
                      "239:7:45"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12269,
                    "src": "239:7:45"
                  },
                  "referencedDeclaration": 12269,
                  "src": "239:7:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4766,
                "mutability": "mutable",
                "name": "implementation",
                "nameLocation": "272:14:45",
                "nodeType": "VariableDeclaration",
                "scope": 4775,
                "src": "264:22:45",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 4765,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "264:7:45",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4768,
                "mutability": "mutable",
                "name": "activatedBy",
                "nameLocation": "304:11:45",
                "nodeType": "VariableDeclaration",
                "scope": 4775,
                "src": "296:19:45",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 4767,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "296:7:45",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4771,
                "mutability": "mutable",
                "name": "activatedIn",
                "nameLocation": "337:11:45",
                "nodeType": "VariableDeclaration",
                "scope": 4775,
                "src": "325:23:45",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_Blocknumber_$4713",
                  "typeString": "Blocknumber"
                },
                "typeName": {
                  "id": 4770,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 4769,
                    "name": "Blocknumber",
                    "nameLocations": [
                      "325:11:45"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4713,
                    "src": "325:11:45"
                  },
                  "referencedDeclaration": 4713,
                  "src": "325:11:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Blocknumber_$4713",
                    "typeString": "Blocknumber"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4774,
                "mutability": "mutable",
                "name": "activatedAt",
                "nameLocation": "368:11:45",
                "nodeType": "VariableDeclaration",
                "scope": 4775,
                "src": "358:21:45",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_userDefinedValueType$_Timestamp_$4530",
                  "typeString": "Timestamp"
                },
                "typeName": {
                  "id": 4773,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 4772,
                    "name": "Timestamp",
                    "nameLocations": [
                      "358:9:45"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4530,
                    "src": "358:9:45"
                  },
                  "referencedDeclaration": 4530,
                  "src": "358:9:45",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Timestamp_$4530",
                    "typeString": "Timestamp"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "VersionInfo",
            "nameLocation": "217:11:45",
            "nodeType": "StructDefinition",
            "scope": 4856,
            "src": "210:176:45",
            "visibility": "public"
          },
          {
            "anonymous": false,
            "eventSelector": "f7b17693e830f8b239607e857ac81b076450829d544c053d533d1b278d18cd89",
            "id": 4784,
            "name": "LogVersionableActivated",
            "nameLocation": "398:23:45",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4778,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "version",
                  "nameLocation": "430:7:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4784,
                  "src": "422:15:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4777,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4776,
                      "name": "Version",
                      "nameLocations": [
                        "422:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "422:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "422:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4780,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "447:14:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4784,
                  "src": "439:22:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4779,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "439:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4782,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "activatedBy",
                  "nameLocation": "471:11:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4784,
                  "src": "463:19:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "421:62:45"
            },
            "src": "392:92:45"
          },
          {
            "documentation": {
              "id": 4785,
              "nodeType": "StructuredDocumentation",
              "src": "490:243:45",
              "text": " @dev IMPORTANT this function needs to be implemented by each new version\n any such activate implementation needs to call internal function call _activate() \n any new version needs to inherit from previous version"
            },
            "functionSelector": "9555c4db",
            "id": 4792,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "activate",
            "nameLocation": "747:8:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4787,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "764:14:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "756:22:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "756:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4789,
                  "mutability": "mutable",
                  "name": "activatedBy",
                  "nameLocation": "788:11:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4792,
                  "src": "780:19:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "780:7:45",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "755:45:45"
            },
            "returnParameters": {
              "id": 4791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "809:0:45"
            },
            "scope": 4856,
            "src": "738:72:45",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "aa615ec8",
            "id": 4800,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isActivated",
            "nameLocation": "824:11:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4795,
                  "mutability": "mutable",
                  "name": "_version",
                  "nameLocation": "844:8:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4800,
                  "src": "836:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4794,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4793,
                      "name": "Version",
                      "nameLocations": [
                        "836:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "836:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "836:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "835:18:45"
            },
            "returnParameters": {
              "id": 4799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4798,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4800,
                  "src": "876:4:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4797,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "876:4:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "875:6:45"
            },
            "scope": 4856,
            "src": "815:67:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "c1f6a1b7",
            "id": 4815,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "toVersionParts",
            "nameLocation": "897:14:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4803,
                  "mutability": "mutable",
                  "name": "_version",
                  "nameLocation": "920:8:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4815,
                  "src": "912:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4802,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4801,
                      "name": "Version",
                      "nameLocations": [
                        "912:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "912:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "912:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "911:18:45"
            },
            "returnParameters": {
              "id": 4814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4807,
                  "mutability": "mutable",
                  "name": "major",
                  "nameLocation": "1001:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4815,
                  "src": "989:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4806,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4805,
                      "name": "VersionPart",
                      "nameLocations": [
                        "989:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "989:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "989:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4810,
                  "mutability": "mutable",
                  "name": "minor",
                  "nameLocation": "1032:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4815,
                  "src": "1020:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4809,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4808,
                      "name": "VersionPart",
                      "nameLocations": [
                        "1020:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "1020:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "1020:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4813,
                  "mutability": "mutable",
                  "name": "patch",
                  "nameLocation": "1063:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4815,
                  "src": "1051:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4812,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4811,
                      "name": "VersionPart",
                      "nameLocations": [
                        "1051:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "1051:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "1051:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "975:103:45"
            },
            "scope": 4856,
            "src": "888:191:45",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "54fd4d50",
            "id": 4821,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nameLocation": "1149:7:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4816,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1156:2:45"
            },
            "returnParameters": {
              "id": 4820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4819,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4821,
                  "src": "1181:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4818,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4817,
                      "name": "Version",
                      "nameLocations": [
                        "1181:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "1181:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "1181:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1180:9:45"
            },
            "scope": 4856,
            "src": "1140:50:45",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "bd4080ec",
            "id": 4833,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "versionParts",
            "nameLocation": "1204:12:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4822,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1216:2:45"
            },
            "returnParameters": {
              "id": 4832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4825,
                  "mutability": "mutable",
                  "name": "major",
                  "nameLocation": "1290:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4833,
                  "src": "1278:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4824,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4823,
                      "name": "VersionPart",
                      "nameLocations": [
                        "1278:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "1278:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "1278:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4828,
                  "mutability": "mutable",
                  "name": "minor",
                  "nameLocation": "1321:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4833,
                  "src": "1309:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4827,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4826,
                      "name": "VersionPart",
                      "nameLocations": [
                        "1309:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "1309:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "1309:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4831,
                  "mutability": "mutable",
                  "name": "patch",
                  "nameLocation": "1352:5:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4833,
                  "src": "1340:17:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                    "typeString": "VersionPart"
                  },
                  "typeName": {
                    "id": 4830,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4829,
                      "name": "VersionPart",
                      "nameLocations": [
                        "1340:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12267,
                      "src": "1340:11:45"
                    },
                    "referencedDeclaration": 12267,
                    "src": "1340:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_VersionPart_$12267",
                      "typeString": "VersionPart"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1264:103:45"
            },
            "scope": 4856,
            "src": "1195:173:45",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "f8b1cb3c",
            "id": 4838,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "versions",
            "nameLocation": "1383:8:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4834,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1391:2:45"
            },
            "returnParameters": {
              "id": 4837,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4836,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4838,
                  "src": "1416:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4835,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1416:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1415:9:45"
            },
            "scope": 4856,
            "src": "1374:51:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "b88da759",
            "id": 4846,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nameLocation": "1439:10:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4840,
                  "mutability": "mutable",
                  "name": "idx",
                  "nameLocation": "1458:3:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4846,
                  "src": "1450:11:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4839,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1450:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1449:13:45"
            },
            "returnParameters": {
              "id": 4845,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4844,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4846,
                  "src": "1485:7:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4843,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4842,
                      "name": "Version",
                      "nameLocations": [
                        "1485:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "1485:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "1485:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1484:9:45"
            },
            "scope": 4856,
            "src": "1430:64:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "de788b2c",
            "id": 4855,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getVersionInfo",
            "nameLocation": "1508:14:45",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4850,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4849,
                  "mutability": "mutable",
                  "name": "_version",
                  "nameLocation": "1531:8:45",
                  "nodeType": "VariableDeclaration",
                  "scope": 4855,
                  "src": "1523:16:45",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                    "typeString": "Version"
                  },
                  "typeName": {
                    "id": 4848,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4847,
                      "name": "Version",
                      "nameLocations": [
                        "1523:7:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 12269,
                      "src": "1523:7:45"
                    },
                    "referencedDeclaration": 12269,
                    "src": "1523:7:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_userDefinedValueType$_Version_$12269",
                      "typeString": "Version"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1522:18:45"
            },
            "returnParameters": {
              "id": 4854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4853,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4855,
                  "src": "1563:18:45",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_VersionInfo_$4775_memory_ptr",
                    "typeString": "struct IVersionable.VersionInfo"
                  },
                  "typeName": {
                    "id": 4852,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4851,
                      "name": "VersionInfo",
                      "nameLocations": [
                        "1563:11:45"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4775,
                      "src": "1563:11:45"
                    },
                    "referencedDeclaration": 4775,
                    "src": "1563:11:45",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VersionInfo_$4775_storage_ptr",
                      "typeString": "struct IVersionable.VersionInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1562:20:45"
            },
            "scope": 4856,
            "src": "1499:84:45",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 4857,
        "src": "180:1405:45",
        "usedErrors": []
      }
    ],
    "src": "39:1546:45"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.19+commit.7dd6d404"
  },
  "contractName": "IVersionable",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {
      "activate(address,address)": {
        "details": "IMPORTANT this function needs to be implemented by each new version any such activate implementation needs to call internal function call _activate()  any new version needs to inherit from previous version"
      }
    },
    "version": 1
  },
  "offset": [
    180,
    1585
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "1a67e38394ff4f093dc209d01362c8d3f9eb5720",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.19;\n\nimport {Blocknumber, Timestamp} from \"./IBaseTypes.sol\";\nimport {Version, VersionPart} from \"./IVersionType.sol\";\n\ninterface IVersionable {\n\n    struct VersionInfo {\n        Version version;\n        address implementation;\n        address activatedBy;\n        Blocknumber activatedIn;\n        Timestamp activatedAt;\n    }\n\n    event LogVersionableActivated(Version version, address implementation, address activatedBy);\n\n    /**\n     * @dev IMPORTANT this function needs to be implemented by each new version\n     * any such activate implementation needs to call internal function call _activate() \n     * any new version needs to inherit from previous version\n     */\n    function activate(address implementation, address activatedBy) external;\n    function isActivated(Version _version) external view returns(bool);\n\n    function toVersionParts(Version _version)\n        external\n        pure\n        returns(\n            VersionPart major,\n            VersionPart minor,\n            VersionPart patch\n        );\n    \n    // returns current version (ideally immutable)\n    function version() external pure returns(Version);\n    function versionParts()\n        external\n        pure\n        returns(\n            VersionPart major,\n            VersionPart minor,\n            VersionPart patch\n        );\n\n    function versions() external view returns(uint256);\n    function getVersion(uint256 idx) external view returns(Version);\n    function getVersionInfo(Version _version) external view returns(VersionInfo memory);\n}",
  "sourceMap": "",
  "sourcePath": "contracts/shared/IVersionable.sol",
  "type": "interface"
}