[
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001270",
    "rva": "0x1270",
    "function": "sub_140001270",
    "pseudocode": " \n__int64 __fastcall sub_140001270(__int64 a1, unsigned int a2, _QWORD *a3)\n{\n  *a3 = __readmsr(a2);\n  return 0;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001288",
    "rva": "0x1288",
    "function": "sub_140001288",
    "pseudocode": " \nchar __fastcall sub_140001288(__int64 a1, unsigned int a2, unsigned int *a3, __int64 a4)\n{\n  __int64 v8; \n\n  if ( *(_BYTE *)(a1 + 8) == 0 )\n    return 1;\n  v8 = 0;\n  if ( a2 == 0 )\n    return 1;\n  while ( (unsigned int)sub_140001270(a1, *a3, (_QWORD *)(a4 + 8 * v8)) == 0 )\n  {\n    v8 = (unsigned int)(v8 + 1);\n    ++a3;\n    if ( (unsigned int)v8 >= a2 )\n      return 1;\n  }\n  return 0;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x1400012f8",
    "rva": "0x12f8",
    "function": "sub_1400012F8",
    "pseudocode": " \nchar __fastcall sub_1400012F8(__int64 a1, unsigned __int8 a2, unsigned int a3, __int64 a4, __int64 a5)\n{\n  __int64 v5; \n  ULONG v6; \n\n  v5 = 0;\n  v6 = (32 * (a2 & 7)) | (a2 >> 3);\n  if ( a3 == 0 )\n    return 1;\n  while ( HalSetBusDataByOffset(PCIConfiguration, 0, v6, (PVOID)(a4 + 4 * v5), 0x60u, 4u) == 4\n       && HalGetBusDataByOffset(PCIConfiguration, 0, v6, (PVOID)(a5 + 4 * v5), 0x64u, 4u) == 4 )\n  {\n    v5 = (unsigned int)(v5 + 1);\n    if ( (unsigned int)v5 >= a3 )\n      return 1;\n  }\n  return 0;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001540",
    "rva": "0x1540",
    "function": "HandleInformation",
    "pseudocode": " \nvoid __fastcall HandleInformation(_QWORD *StartContext)\n{\n  __int64 v1; \n  void (__fastcall ***v2)(_QWORD); \n\n  v1 = StartContext[8];\n  v2 = *(void (__fastcall ****)(_QWORD))(v1 + 24);\n  if ( v2 != nullptr )\n  {\n    while ( *(_BYTE *)v1 == 0 )\n    {\n      (**v2)(v2);\n      KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)(v1 + 8));\n    }\n  }\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001590",
    "rva": "0x1590",
    "function": "sub_140001590",
    "pseudocode": " \nint __fastcall sub_140001590(__int64 a1)\n{\n  char v17; \n  int v18; \n  __int64 v19; \n  char Str1[4]; \n  int v22; \n  int v23; \n  __int128 v24; \n  int v25; \n\n  _RAX = 0;\n  __asm { cpuid }\n  if ( (int)_RAX >= 1 )\n  {\n    v25 = 0;\n    *(_QWORD *)(a1 + 24) = 0;\n    _RAX = 0;\n    __asm { cpuid }\n    v23 = _RCX;\n    _RAX = 1;\n    *(_DWORD *)Str1 = _RBX;\n    v22 = _RDX;\n    __asm { cpuid }\n    v17 = (_RDX & 0x20) != 0;\n    v18 = _RAX;\n    v24 = 0;\n    if ( strncmp(Str1, \"GenuineIntel\", 0x20u) == 0 )\n    {\n      LOBYTE(v19) = v17;\n      _RAX = sub_140001A98(v19);\nLABEL_7:\n      *(_QWORD *)(a1 + 24) = _RAX;\n      return _RAX;\n    }\n    LODWORD(_RAX) = strncmp(Str1, \"AuthenticAMD\", 0x20u);\n    if ( (_DWORD)_RAX == 0 )\n    {\n      *(_QWORD *)(a1 + 24) = sub_140001194(v17);\n      LODWORD(_RAX) = v18 >> 20;\n      if ( ((v18 >> 8) & 0xF) + (unsigned __int8)(v18 >> 20) == 23 )\n      {\n        _RAX = sub_140001194(v17);\n        goto LABEL_7;\n      }\n    }\n  }\n  return _RAX;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001690",
    "rva": "0x1690",
    "function": "sub_140001690",
    "pseudocode": " \nvoid __fastcall sub_140001690(__int64 a1)\n{\n  struct _DEVICE_OBJECT *v1; \n  PVOID DeviceExtension; \n  __int64 v3; \n  void *v4; \n\n  v1 = *(struct _DEVICE_OBJECT **)(a1 + 8);\n  DeviceExtension = v1->DeviceExtension;\n  v3 = *((_QWORD *)DeviceExtension + 3);\n  if ( v3 != 0 )\n    (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v3 + 8LL))(v3, 1);\n  v4 = *((void **)DeviceExtension + 2);\n  *(_BYTE *)DeviceExtension = 1;\n  KeWaitForSingleObject(v4, Executive, 0, 0, nullptr);\n  ObfDereferenceObject(*((PVOID *)DeviceExtension + 2));\n  sub_14000194C(&unk_140004000);\n  IoDeleteDevice(v1);\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001704",
    "rva": "0x1704",
    "function": "sub_140001704",
    "pseudocode": " \nNTSTATUS __fastcall sub_140001704(struct _DRIVER_OBJECT *a1)\n{\n  NTSTATUS result; \n  __int64 v3; \n  NTSTATUS v4; \n  PVOID StartContext; \n  void *ThreadHandle; \n\n  StartContext = nullptr;\n  result = IoCreateDevice(a1, 0x20u, nullptr, 0x22u, 0x100u, 0, (PDEVICE_OBJECT *)&StartContext);\n  if ( result >= 0 )\n  {\n    a1->MajorFunction[0] = (PDRIVER_DISPATCH)sub_140001520;\n    a1->MajorFunction[2] = (PDRIVER_DISPATCH)sub_140001520;\n    a1->DriverUnload = (PDRIVER_UNLOAD)sub_140001690;\n    sub_140001934(&unk_140003150, sub_140001830, &unk_140004000, &unk_140004000);\n    v3 = *((_QWORD *)StartContext + 8);\n    *(_BYTE *)v3 = 0;\n    *(_QWORD *)(v3 + 8) = -2000000;\n    sub_140001590(v3);\n    v4 = PsCreateSystemThread(\n           &ThreadHandle,\n           0,\n           nullptr,\n           nullptr,\n           nullptr,\n           (PKSTART_ROUTINE)HandleInformation,\n           StartContext);\n    if ( v4 >= 0 )\n      ObReferenceObjectByHandle(ThreadHandle, 0x1FFFFFu, nullptr, 0, (PVOID *)(v3 + 16), nullptr);\n    else\n      IoDeleteDevice((PDEVICE_OBJECT)StartContext);\n    ZwClose(ThreadHandle);\n    return v4;\n  }\n  else\n  {\n    _mm_lfence();\n  }\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x1400019d0",
    "rva": "0x19d0",
    "function": "sub_1400019D0",
    "pseudocode": " \nchar __fastcall sub_1400019D0(__int64 a1)\n{\n  char result; \n  unsigned int v3[12]; \n  __int64 v4; \n  _BYTE v5[72]; \n\n  v4 = -1;\n  v3[0] = 412;\n  v3[1] = 418;\n  v3[2] = 408;\n  v3[3] = 206;\n  v3[4] = 433;\n  v3[5] = 1542;\n  v3[6] = 1556;\n  v3[7] = 1553;\n  v3[8] = 1561;\n  v3[9] = 1593;\n  sub_140001F80(v5, 0, 72);\n  result = sub_140001288(a1, 0xAu, v3, (__int64)&v4);\n  if ( result == 1 )\n    return sub_1400011F0(a1, 10, (__int64)v3, (__int64)&v4);\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "frameview",
    "module": "FrameViewSDK\\bin\\FrameViewKMD.sys",
    "sha256": "f768f331ecd2ed3eb121ca28569e8c7c52561c6f8b1c40e8c8f1b2185c200e02",
    "va": "0x140001be0",
    "rva": "0x1be0",
    "function": "DriverEntry",
    "pseudocode": " \nNTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)\n{\n  _security_init_cookie();\n  return sub_140001C0C(DriverObject, RegistryPath);\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\McpServer\\NvAppMcpServer.exe",
    "sha256": "1a8f14df4d2d1070f56d1307ecef35765ea9a7ceba6197cdca3bc5ae27ac0a6c",
    "va": "0x14000f6e0",
    "rva": "0xf6e0",
    "function": "sub_14000F6E0",
    "pseudocode": " \n__int64 __fastcall sub_14000F6E0(__int64 a1)\n{\n  __int64 v2; \n  int v3; \n  const char *v4; \n  const CHAR *v5; \n  HANDLE FileA; \n  void *v7; \n  DWORD LastError; \n  DWORD v9; \n  const CHAR *v10; \n  BOOL v12; \n  DWORD CollectDataTimeout; \n  DWORD MaxCollectionCount; \n  DWORD nTimeOut[16]; \n  DWORD CurInstances; \n  DWORD State; \n  DWORD Mode; \n\n  nTimeOut[0] = 100;\n  nTimeOut[1] = 200;\n  nTimeOut[2] = 400;\n  v2 = 0;\n  nTimeOut[3] = 800;\n  v3 = 1;\n  nTimeOut[4] = 1500;\n  while ( 1 )\n  {\n    v4 = (const char *)a1;\n    if ( *(_QWORD *)(a1 + 24) > 0xFu )\n      v4 = *(const char **)a1;\n    sub_140010A10(\"ConnectWithRetry: attempt %d, pipe=%s\", v3, v4);\n    v5 = (const CHAR *)a1;\n    if ( *(_QWORD *)(a1 + 24) > 0xFu )\n      v5 = *(const CHAR **)a1;\n    FileA = CreateFileA(v5, 0xC0000000, 0, nullptr, 3u, 0x40000000u, nullptr);\n    v7 = FileA;\n    if ( FileA != (HANDLE)-1LL )\n      break;\n    LastError = GetLastError();\n    sub_140010A10(\"ConnectWithRetry: CreateFile failed err=%lu\", LastError);\n    if ( LastError == 5 )\n    {\n      sub_14000F940(\"auth_failed\", \"Access denied to NvApp MCP server pipe\");\n      return -1;\n    }\n    v9 = nTimeOut[v2];\n    if ( LastError == 231 )\n    {\n      v10 = (const CHAR *)a1;\n      if ( *(_QWORD *)(a1 + 24) > 0xFu )\n        v10 = *(const CHAR **)a1;\n      WaitNamedPipeA(v10, v9);\n    }\n    else\n    {\n      Sleep(v9);\n    }\n    ++v3;\n    if ( ++v2 >= 5 )\n    {\n      sub_14000F940(\n        \"service_unavailable\",\n        \"NvApp MCP server is unavailable. Ensure the user is logged in and NVIDIA App is installed.\");\n      return -1;\n    }\n  }\n  Mode = 0;\n  v12 = SetNamedPipeHandleState(FileA, &Mode, nullptr, nullptr);\n  sub_140010A10(\"ConnectWithRetry: connected! handle=%p (OVERLAPPED), SetPipeHandleState=%d\", v7, v12);\n  State = 0;\n  CurInstances = 0;\n  MaxCollectionCount = 0;\n  CollectDataTimeout = 0;\n  GetNamedPipeHandleStateA(v7, &State, &CurInstances, &MaxCollectionCount, &CollectDataTimeout, nullptr, 0);\n  sub_140010A10(\"ConnectWithRetry: pipeState=0x%lx, instances=%lu\", State, CurInstances);\n  return (__int64)v7;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\McpServer\\NvAppMcpServer.exe",
    "sha256": "1a8f14df4d2d1070f56d1307ecef35765ea9a7ceba6197cdca3bc5ae27ac0a6c",
    "va": "0x140010f90",
    "rva": "0x10f90",
    "function": "sub_140010F90",
    "pseudocode": " \nint __fastcall sub_140010F90(void *a1)\n{\n  DWORD v2; \n  char v3; \n  _BYTE *v4; \n  int v5; \n  _BYTE *v6; \n  HANDLE StdHandle; \n  BOOL v8; \n  DWORD i; \n  DWORD LastError; \n  DWORD v11; \n  char v12; \n  char v13; \n  DWORD v14; \n  char v15; \n  _BYTE v17[8]; \n  DWORD NumberOfBytesRead; \n  DWORD NumberOfBytesWritten; \n  struct _OVERLAPPED Overlapped; \n  _BYTE Buffer[4096]; \n\n  sub_140010A10(\"PumpStdinToPipe: started, pipe=%p\", a1);\n  memset(&Overlapped, 0, 24);\n  Overlapped.hEvent = CreateEventW(nullptr, true, false, nullptr);\n  if ( Overlapped.hEvent != nullptr )\n  {\n    v5 = 0;\n    v6 = (_BYTE *)sub_140002410(&unk_140029108);\n    if ( *v6 != 0 )\n    {\n      while ( 1 )\n      {\n        NumberOfBytesRead = 0;\n        sub_140010A10(\"PumpStdinToPipe: calling ReadFile on stdin...\");\n        StdHandle = GetStdHandle(0xFFFFFFF6);\n        v8 = ReadFile(StdHandle, Buffer, 0x1000u, &NumberOfBytesRead, nullptr);\n        if ( !v8 || NumberOfBytesRead == 0 )\n          break;\n        sub_140010A10(\"PumpStdinToPipe: read %lu bytes from stdin (msg #%d)\", NumberOfBytesRead, ++v5);\n        for ( i = 0; i < NumberOfBytesRead; i += NumberOfBytesWritten )\n        {\n          NumberOfBytesWritten = 0;\n          ResetEvent(Overlapped.hEvent);\n          sub_140010A10(\"PumpStdinToPipe: WriteFile to pipe, %lu bytes remaining...\", NumberOfBytesRead - i);\n          if ( !WriteFile(a1, &Buffer[i], NumberOfBytesRead - i, &NumberOfBytesWritten, &Overlapped) )\n          {\n            LastError = GetLastError();\n            if ( LastError != 997 )\n            {\n              sub_140010A10(\"PumpStdinToPipe: WriteFile FAILED err=%lu\", LastError);\n              v17[0] = 0;\n              v13 = sub_140002690(v17);\n              *(_BYTE *)sub_140003430(&unk_140029108) = v13;\n              LODWORD(v4) = CloseHandle(Overlapped.hEvent);\n              return (int)v4;\n            }\n            if ( !GetOverlappedResult(a1, &Overlapped, &NumberOfBytesWritten, true) )\n            {\n              v11 = GetLastError();\n              sub_140010A10(\"PumpStdinToPipe: GetOverlappedResult FAILED err=%lu\", v11);\n              v17[0] = 0;\n              v12 = sub_140002690(v17);\n              *(_BYTE *)sub_140003430(&unk_140029108) = v12;\n              LODWORD(v4) = CloseHandle(Overlapped.hEvent);\n              return (int)v4;\n            }\n          }\n          sub_140010A10(\"PumpStdinToPipe: WriteFile wrote %lu bytes\", NumberOfBytesWritten);\n        }\n        if ( *v6 == 0 )\n          goto LABEL_16;\n      }\n      v14 = GetLastError();\n      sub_140010A10(\"PumpStdinToPipe: stdin closed (ok=%d, read=%lu, err=%lu)\", v8, NumberOfBytesRead, v14);\n    }\nLABEL_16:\n    sub_140010A10(\"PumpStdinToPipe: exiting, setting g_running=false\");\n    CloseHandle(Overlapped.hEvent);\n    v17[0] = 0;\n    v15 = sub_140002690(v17);\n    v4 = (_BYTE *)sub_140003430(&unk_140029108);\n    *v4 = v15;\n    return (int)v4;\n  }\n  v2 = GetLastError();\n  sub_140010A10(\"PumpStdinToPipe: CreateEventW failed (err=%lu)\", v2);\n  v17[0] = 0;\n  v3 = sub_140002690(v17);\n  v4 = (_BYTE *)sub_140003430(&unk_140029108);\n  *v4 = v3;\n  return (int)v4;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\McpServer\\NvAppMcpServer.exe",
    "sha256": "1a8f14df4d2d1070f56d1307ecef35765ea9a7ceba6197cdca3bc5ae27ac0a6c",
    "va": "0x140011360",
    "rva": "0x11360",
    "function": "sub_140011360",
    "pseudocode": " \n__int64 sub_140011360()\n{\n  FILE *v0; \n  int v1; \n  unsigned int v2; \n  FILE *v3; \n  int v4; \n  void **v5; \n  void *v6; \n  void *v7; \n  _QWORD *v8; \n  _QWORD *v9; \n  void *v10; \n  _BYTE *v11; \n  void *v12; \n  void *v13; \n  HANDLE hThread[2]; \n  unsigned int ThrdAddr[4]; \n  HANDLE Handles[2]; \n  void *Block[2]; \n  __m128i si128; \n  void *v20[2]; \n  __int64 v21; \n  unsigned __int64 v22; \n  void *v23[3]; \n  unsigned __int64 v24; \n  _BYTE v25[8]; \n  void *v26; \n  __m128i v27; \n  CHAR Buffer[256]; \n\n  sub_140010A10(\"RunBridgeMode: starting\");\n  v0 = __acrt_iob_func(0);\n  v1 = _fileno(v0);\n  _setmode(v1, 0x8000);\n  v2 = 1;\n  v3 = __acrt_iob_func(1u);\n  v4 = _fileno(v3);\n  _setmode(v4, 0x8000);\n  sub_14000F290((__int64)v23);\n  __wind\n  {\n    if ( v23[2] == nullptr )\n    {\n      sub_140010A10(\"RunBridgeMode: failed to build pipe name\");\nLABEL_9:\n      sub_14000F940();\n      goto LABEL_65;\n    }\n    v5 = v23;\n    if ( v24 > 0xF )\n      v5 = (void **)v23[0];\n    sub_140010A10(\"RunBridgeMode: connecting to %s\", (const char *)v5);\n    v6 = (void *)sub_14000F6E0((__int64)v23);\n    if ( v6 == (void *)-1LL )\n    {\n      if ( (unsigned __int8)sub_1400100F0() == 0 )\n      {\n        v2 = 0;\n        sub_140010A10(\"RunBridgeMode: MCP server readiness event not signaled — server is disabled or not running\");\n        goto LABEL_9;\n      }\n      sub_140010A10(\"RunBridgeMode: connection failed (server ready event signaled, pipe may be initializing)\");\n      goto LABEL_65;\n    }\n    memset(Buffer, 0, sizeof(Buffer));\n    GetEnvironmentVariableA(\"NVAPP_MCP_TOKEN\", Buffer, 0x100u);\n    *(_OWORD *)v20 = 0;\n    v21 = 0;\n    v22 = 0;\n    sub_140001390();\n    __wind\n    {\n      sub_14000FDC0((__int64)v25);\n      __wind\n      {\n        sub_140010A10(\"RunBridgeMode: NVAPP_MCP_TOKEN not set, proceeding unauthenticated\");\n        *(_OWORD *)Block = 0;\n        si128 = _mm_load_si128(xmmword_140022190);\n        LOBYTE(Block[0]) = 0;\n        __wind\n        {\n          sub_1400119A0(v6);\n        }\n        __unwind\n        {\n          sub_140001790(Block);\n        }\n        if ( si128.m128i_i64[1] > 0xFuLL )\n        {\n          v7 = Block[0];\n          if ( (unsigned __int64)(si128.m128i_i64[1] + 1) >= 0x1000 )\n          {\n            v7 = *((void **)Block[0] - 1);\n            if ( (unsigned __int64)((char *)Block[0] - (char *)v7 - 8) > 0x1F )\n              _invalid_parameter_noinfo_noreturn();\n          }\n          j_j_j_j_free(v7);\n        }\n        sub_140010A10(\"RunBridgeMode: connected, starting relay threads\");\n        v8 = operator new(0x10u);\n        if ( v8 != nullptr )\n        {\n          *v8 = v6;\n          v8[1] = sub_140010F90;\n        }\n        else\n        {\n          v8 = nullptr;\n        }\n        Block[0] = v8;\n        __eh34_enter_wind_state(2, 4);\n        hThread[0] = (HANDLE)_beginthreadex(\n                               nullptr,\n                               0,\n                               (_beginthreadex_proc_type)StartAddress,\n                               v8,\n                               0,\n                               (unsigned int *)&hThread[1]);\n        if ( hThread[0] != nullptr )\n        {\n          if ( __eh34_unwind(4) )\n          {\nunwind_state_4:\n            sub_140001420(Block);\n            __eh34_continue_unwinding(4, 2);\n          }\n          __eh34_exit_wind_state(4, 2);\n          __eh34_enter_wind_state(2, 5);\n          v9 = operator new(0x10u);\n          if ( v9 != nullptr )\n          {\n            *v9 = v6;\n            v9[1] = sub_140010C20;\n          }\n          else\n          {\n            v9 = nullptr;\n          }\n          Block[0] = v9;\n          v10 = (void *)_beginthreadex(nullptr, 0, (_beginthreadex_proc_type)StartAddress, v9, 0, &ThrdAddr[2]);\n          *(_QWORD *)ThrdAddr = v10;\n          if ( v10 != nullptr )\n          {\n            Handles[0] = hThread[0];\n            Handles[1] = v10;\n            WaitForMultipleObjects(2u, Handles, false, 0xFFFFFFFF);\n            CancelIoEx(v6, nullptr);\n            CancelSynchronousIo(hThread[0]);\n            __eh34_enter_wind_state(5, 7);\n            if ( LODWORD(hThread[1]) != 0 )\n            {\n              if ( LODWORD(hThread[1]) == Thrd_id() )\n                goto LABEL_55;\n              *(_OWORD *)Block = *(_OWORD *)hThread;\n              if ( Thrd_join((_Thrd_t *)Block, nullptr) != 0 )\n                goto LABEL_54;\n              *(_OWORD *)hThread = 0;\n              if ( ThrdAddr[2] != 0 )\n              {\n                if ( ThrdAddr[2] != Thrd_id() )\n                {\n                  *(_OWORD *)Block = *(_OWORD *)ThrdAddr;\n                  if ( Thrd_join((_Thrd_t *)Block, nullptr) == 0 )\n                  {\n                    *(_OWORD *)ThrdAddr = 0;\n                    sub_140010A10(\"RunBridgeMode: both relay threads exited\");\n                    CloseHandle(v6);\n                    sub_140010A10(\"RunBridgeMode: done\");\n                    v2 = 0;\n                    if ( __eh34_unwind(7) )\n                    {\n                      sub_140002240((__int64)ThrdAddr);\n                      __eh34_continue_unwinding(7, 5);\n                    }\n                    __eh34_exit_wind_state(7, 5);\n                    if ( ThrdAddr[2] != 0 )\n                      terminate();\n                    if ( LODWORD(hThread[1]) != 0 )\n                      terminate();\n                    if ( v27.m128i_i64[1] > 0xFuLL )\n                    {\n                      v11 = v26;\n                      if ( (unsigned __int64)(v27.m128i_i64[1] + 1) >= 0x1000 )\n                      {\n                        v11 = *((_BYTE **)v26 - 1);\n                        if ( (unsigned __int64)((_BYTE *)v26 - v11 - 8) > 0x1F )\n                          _invalid_parameter_noinfo_noreturn();\n                      }\n                      j_j_j_j_free(v11);\n                    }\n                    v27 = _mm_load_si128(xmmword_140022190);\n                    LOBYTE(v26) = 0;\n                    if ( v22 > 0xF )\n                    {\n                      v12 = v20[0];\n                      if ( v22 + 1 >= 0x1000 )\n                      {\n                        v12 = *((void **)v20[0] - 1);\n                        if ( (unsigned __int64)((char *)v20[0] - (char *)v12 - 8) > 0x1F )\n                          _invalid_parameter_noinfo_noreturn();\n                      }\n                      j_j_j_j_free(v12);\n                    }\n                    if ( __eh34_unwind(5) )\n                      goto unwind_state_5;\n                    __eh34_exit_wind_state(5, 2);\n                    goto LABEL_65;\n                  }\nLABEL_54:\n                  std::_Throw_Cpp_error(2);\n                  __debugbreak();\n                }\nLABEL_55:\n                std::_Throw_Cpp_error(5);\n                __debugbreak();\n              }\n            }\n            std::_Throw_Cpp_error(1);\n            JUMPOUT(0x14001185ALL);\n          }\n          __wind\n          {\n            ThrdAddr[2] = 0;\n            std::_Throw_Cpp_error(6);\n          }\n          __unwind\n          {\n            sub_140001420(Block);\n          }\n          if ( __eh34_unwind(5) )\n          {\nunwind_state_5:\n            sub_140002240((__int64)hThread);\n            __eh34_continue_unwinding(5, 2);\n          }\n          __eh34_exit_wind_state(5, 2);\n          __eh34_enter_wind_state(2, 4);\n        }\n        LODWORD(hThread[1]) = 0;\n        std::_Throw_Cpp_error(6);\n        if ( __eh34_unwind(4) )\n          goto unwind_state_4;\n        __eh34_exit_wind_state(4, 2);\n        __eh34_enter_wind_state(2, 5);\n        __eh34_enter_wind_state(5, 7);\n        goto LABEL_54;\n      }\n      __unwind\n      {\n        sub_1400034E0(v25);\n      }\n    }\n    __unwind\n    {\n      sub_140001790(v20);\n    }\n  }\n  __unwind\n  {\n    sub_140001790(v23);\n  }\nLABEL_65:\n  if ( v24 > 0xF )\n  {\n    v13 = v23[0];\n    if ( v24 + 1 >= 0x1000 )\n    {\n      v13 = *((void **)v23[0] - 1);\n      if ( (unsigned __int64)((char *)v23[0] - (char *)v13 - 8) > 0x1F )\n        _invalid_parameter_noinfo_noreturn();\n    }\n    j_j_j_j_free(v13);\n  }\n  return v2;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\McpServer\\NvAppMcpServer.exe",
    "sha256": "1a8f14df4d2d1070f56d1307ecef35765ea9a7ceba6197cdca3bc5ae27ac0a6c",
    "va": "0x1400119a0",
    "rva": "0x119a0",
    "function": "sub_1400119A0",
    "pseudocode": " \n__int64 __fastcall sub_1400119A0(HANDLE hFile, __int64 *a2, __int64 *a3)\n{\n  size_t v6; \n  __m128i *v7; \n  __m128i *v8; \n  __int64 v9; \n  unsigned __int64 v10; \n  unsigned __int64 v11; \n  __int64 v12; \n  __m128i v13; \n  void **v14; \n  _BYTE *v15; \n  __int64 v16; \n  __m128i v17; \n  void **v18; \n  _BYTE *v19; \n  __int64 v20; \n  __m128i v21; \n  void **v22; \n  _BYTE *v23; \n  __int64 v24; \n  void *v25; \n  void *v26; \n  void *v27; \n  void *v28; \n  void *v29; \n  void *v30; \n  void *v31; \n  void *v32; \n  DWORD v33; \n  LPCVOID *v34; \n  BOOL OverlappedResult; \n  unsigned __int8 v36; \n  DWORD LastError; \n  void *v38; \n  DWORD NumberOfBytesWritten; \n  struct _OVERLAPPED Overlapped; \n  void *Src[2]; \n  __m128i v43; \n  LPCVOID lpBuffer[2]; \n  DWORD nNumberOfBytesToWrite[4]; \n  void *Block[2]; \n  __m128i si128; \n  void *v48[2]; \n  __m128i v49; \n  void *v50[2]; \n  __int128 v51; \n  void *v52[2]; \n  __int128 v53; \n  void *v54[2]; \n  __m128i v55; \n  void *v56[2]; \n  __m128i v57; \n  void *v58[3]; \n  unsigned __int64 v59; \n\n  v6 = 0;\n  sub_140001BA0(v58, *(unsigned int *)a3);\n  __wind\n  {\n    sub_140010160(v56, a3 + 1);\n    __wind\n    {\n      v7 = (__m128i *)sub_140010160(v54, a2);\n      __wind\n      {\n        v8 = v7;\n        v9 = v7[1].m128i_i64[0];\n        v10 = v7[1].m128i_u64[1];\n        if ( v10 - v9 < 0x1F )\n        {\n          v12 = sub_140001D10(v7, 31, 0, 0, \"{\\\"_bridge_handshake\\\":{\\\"token\\\":\\\"\", 0x1Fu);\n          v8 = (__m128i *)v12;\n        }\n        else\n        {\n          v7[1].m128i_i64[0] = v9 + 31;\n          v11 = (unsigned __int64)v7;\n          if ( v10 > 0xF )\n            v11 = v7->m128i_i64[0];\n          if ( (unsigned __int64)\"\" <= v11 || (unsigned __int64)\"{\\\"_bridge_handshake\\\":{\\\"token\\\":\\\"\" > v11 + v9 )\n          {\n            v6 = 31;\n          }\n          else if ( v11 > (unsigned __int64)\"{\\\"_bridge_handshake\\\":{\\\"token\\\":\\\"\" )\n          {\n            v6 = v11 - (_QWORD)\"{\\\"_bridge_handshake\\\":{\\\"token\\\":\\\"\";\n          }\n          memmove((void *)(v11 + 31), (const void *)v11, v9 + 1);\n          memcpy((void *)v11, \"{\\\"_bridge_handshake\\\":{\\\"token\\\":\\\"\", v6);\n          memcpy((void *)(v11 + v6), &aBridgeHandshak[v6 + 31], 31 - v6);\n        }\n        __wind\n        {\n          *(_OWORD *)Src = 0;\n          v43 = 0;\n          *(__m128i *)Src = *v8;\n          v43 = v8[1];\n          v8[1].m128i_i64[0] = 0;\n          v8[1].m128i_i64[1] = 15;\n          v8->m128i_i8[0] = 0;\n          v13 = v43;\n          if ( v43.m128i_i64[1] - v43.m128i_i64[0] < 0xFuLL )\n          {\n            _mm_lfence();\n            v16 = sub_140001EE0(Src, 15, 0, (__int64)\"\\\",\\\"parentExe\\\":\\\"\", 0xFu);\n          }\n          else\n          {\n            v43.m128i_i64[0] += 15;\n            v14 = Src;\n            if ( v13.m128i_i64[1] > 0xFuLL )\n              v14 = (void **)Src[0];\n            v15 = (char *)v14 + v13.m128i_i64[0];\n            memmove(v15, \"\\\",\\\"parentExe\\\":\\\"\", 0xFu);\n            v15[15] = 0;\n            v16 = (__int64)Src;\n          }\n          __wind\n          {\n            *(_OWORD *)v52 = *(_OWORD *)v16;\n            v53 = *(_OWORD *)(v16 + 16);\n            *(_QWORD *)(v16 + 16) = 0;\n            *(_QWORD *)(v16 + 24) = 15;\n            *(_BYTE *)v16 = 0;\n            sub_140001150();\n            __wind\n            {\n              v17 = v49;\n              if ( v49.m128i_i64[1] - v49.m128i_i64[0] < 0xEuLL )\n              {\n                _mm_lfence();\n                v20 = sub_140001EE0(v48, 14, 0, (__int64)\"\\\",\\\"parentPid\\\":\", 0xEu);\n              }\n              else\n              {\n                v49.m128i_i64[0] += 14;\n                v18 = v48;\n                if ( v17.m128i_i64[1] > 0xFuLL )\n                  v18 = (void **)v48[0];\n                v19 = (char *)v18 + v17.m128i_i64[0];\n                memmove(v19, \"\\\",\\\"parentPid\\\":\", 0xEu);\n                v19[14] = 0;\n                v20 = (__int64)v48;\n              }\n              __wind\n              {\n                *(_OWORD *)v50 = *(_OWORD *)v20;\n                v51 = *(_OWORD *)(v20 + 16);\n                *(_QWORD *)(v20 + 16) = 0;\n                *(_QWORD *)(v20 + 24) = 15;\n                *(_BYTE *)v20 = 0;\n                sub_140001150();\n                v21 = si128;\n                if ( si128.m128i_i64[1] - si128.m128i_i64[0] < 3uLL )\n                {\n                  __wind\n                  {\n                    _mm_lfence();\n                    v24 = sub_140001EE0(Block, 3, 0, (__int64)\"}}\\n\", 3u);\n                  }\n                  __unwind\n                  {\n                    sub_140001790(Block);\n                  }\n                }\n                else\n                {\n                  si128.m128i_i64[0] += 3;\n                  v22 = Block;\n                  if ( v21.m128i_i64[1] > 0xFuLL )\n                    v22 = (void **)Block[0];\n                  v23 = (char *)v22 + v21.m128i_i64[0];\n                  memmove(v23, \"}}\\n\", 3u);\n                  v23[3] = 0;\n                  v24 = (__int64)Block;\n                }\n              }\n              __unwind\n              {\n                sub_140001790(v50);\n              }\n            }\n            __unwind\n            {\n              sub_140001790(v48);\n            }\n          }\n          __unwind\n          {\n            sub_140001790(v52);\n          }\n        }\n        __unwind\n        {\n          sub_140001790(Src);\n        }\n      }\n      __unwind\n      {\n        sub_140001790(v54);\n      }\n    }\n    __unwind\n    {\n      sub_140001790(v56);\n    }\n  }\n  __unwind\n  {\n    sub_140001790(v58);\n  }\n  __wind\n  {\n    *(_OWORD *)lpBuffer = 0;\n    memset(nNumberOfBytesToWrite, 0, sizeof(nNumberOfBytesToWrite));\n    *(_OWORD *)lpBuffer = *(_OWORD *)v24;\n    *(_OWORD *)nNumberOfBytesToWrite = *(_OWORD *)(v24 + 16);\n    *(_QWORD *)(v24 + 16) = 0;\n    *(_QWORD *)(v24 + 24) = 15;\n    *(_BYTE *)v24 = 0;\n    if ( si128.m128i_i64[1] > 0xFuLL )\n    {\n      v25 = Block[0];\n      if ( (unsigned __int64)(si128.m128i_i64[1] + 1) >= 0x1000 )\n      {\n        v25 = *((void **)Block[0] - 1);\n        if ( (unsigned __int64)((char *)Block[0] - (char *)v25 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v25);\n    }\n    si128 = _mm_load_si128(xmmword_140022190);\n    LOBYTE(Block[0]) = 0;\n    if ( *((_QWORD *)&v51 + 1) > 0xFu )\n    {\n      v26 = v50[0];\n      if ( (unsigned __int64)(*((_QWORD *)&v51 + 1) + 1LL) >= 0x1000 )\n      {\n        v26 = *((void **)v50[0] - 1);\n        if ( (unsigned __int64)((char *)v50[0] - (char *)v26 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v26);\n    }\n    if ( v49.m128i_i64[1] > 0xFuLL )\n    {\n      v27 = v48[0];\n      if ( (unsigned __int64)(v49.m128i_i64[1] + 1) >= 0x1000 )\n      {\n        v27 = *((void **)v48[0] - 1);\n        if ( (unsigned __int64)((char *)v48[0] - (char *)v27 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v27);\n    }\n    v49 = _mm_load_si128(xmmword_140022190);\n    LOBYTE(v48[0]) = 0;\n    if ( *((_QWORD *)&v53 + 1) > 0xFu )\n    {\n      v28 = v52[0];\n      if ( (unsigned __int64)(*((_QWORD *)&v53 + 1) + 1LL) >= 0x1000 )\n      {\n        v28 = *((void **)v52[0] - 1);\n        if ( (unsigned __int64)((char *)v52[0] - (char *)v28 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v28);\n    }\n    if ( v43.m128i_i64[1] > 0xFuLL )\n    {\n      v29 = Src[0];\n      if ( (unsigned __int64)(v43.m128i_i64[1] + 1) >= 0x1000 )\n      {\n        v29 = *((void **)Src[0] - 1);\n        if ( (unsigned __int64)((char *)Src[0] - (char *)v29 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v29);\n    }\n    v43 = _mm_load_si128(xmmword_140022190);\n    LOBYTE(Src[0]) = 0;\n    if ( v55.m128i_i64[1] > 0xFuLL )\n    {\n      v30 = v54[0];\n      if ( (unsigned __int64)(v55.m128i_i64[1] + 1) >= 0x1000 )\n      {\n        v30 = *((void **)v54[0] - 1);\n        if ( (unsigned __int64)((char *)v54[0] - (char *)v30 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v30);\n    }\n    v55 = _mm_load_si128(xmmword_140022190);\n    LOBYTE(v54[0]) = 0;\n    if ( v57.m128i_i64[1] > 0xFuLL )\n    {\n      v31 = v56[0];\n      if ( (unsigned __int64)(v57.m128i_i64[1] + 1) >= 0x1000 )\n      {\n        v31 = *((void **)v56[0] - 1);\n        if ( (unsigned __int64)((char *)v56[0] - (char *)v31 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v31);\n    }\n    v57 = _mm_load_si128(xmmword_140022190);\n    LOBYTE(v56[0]) = 0;\n    if ( v59 > 0xF )\n    {\n      v32 = v58[0];\n      if ( v59 + 1 >= 0x1000 )\n      {\n        v32 = *((void **)v58[0] - 1);\n        if ( (unsigned __int64)((char *)v58[0] - (char *)v32 - 8) > 0x1F )\n          _invalid_parameter_noinfo_noreturn();\n      }\n      j_j_j_j_free(v32);\n    }\n    sub_140010A10(\"SendBridgeHandshake: sending %zu bytes\", *(size_t *)nNumberOfBytesToWrite);\n    memset(&Overlapped, 0, 24);\n    Overlapped.hEvent = CreateEventW(nullptr, true, false, nullptr);\n    if ( Overlapped.hEvent != nullptr )\n    {\n      NumberOfBytesWritten = 0;\n      v34 = lpBuffer;\n      if ( *(_QWORD *)&nNumberOfBytesToWrite[2] > 0xFu )\n        v34 = (LPCVOID *)lpBuffer[0];\n      OverlappedResult = WriteFile(hFile, v34, nNumberOfBytesToWrite[0], &NumberOfBytesWritten, &Overlapped);\n      if ( !OverlappedResult && GetLastError() == 997 )\n        OverlappedResult = GetOverlappedResult(hFile, &Overlapped, &NumberOfBytesWritten, OverlappedResult + 1);\n      CloseHandle(Overlapped.hEvent);\n      if ( OverlappedResult && NumberOfBytesWritten == nNumberOfBytesToWrite[0] )\n      {\n        sub_140010A10(\"SendBridgeHandshake: sent successfully\");\n        v36 = 1;\n        goto LABEL_84;\n      }\n      LastError = GetLastError();\n      sub_140010A10(\n        \"SendBridgeHandshake: WriteFile FAILED (ok=%d, written=%lu, err=%lu)\",\n        OverlappedResult,\n        NumberOfBytesWritten,\n        LastError);\n    }\n    else\n    {\n      v33 = GetLastError();\n      sub_140010A10(\"SendBridgeHandshake: CreateEventW failed (err=%lu)\", v33);\n    }\n    v36 = 0;\n  }\n  __unwind\n  {\n    sub_140001790(lpBuffer);\n  }\nLABEL_84:\n  if ( *(_QWORD *)&nNumberOfBytesToWrite[2] > 0xFu )\n  {\n    v38 = (void *)lpBuffer[0];\n    if ( (unsigned __int64)(*(_QWORD *)&nNumberOfBytesToWrite[2] + 1LL) >= 0x1000 )\n    {\n      v38 = *((void **)lpBuffer[0] - 1);\n      if ( (unsigned __int64)((char *)lpBuffer[0] - (char *)v38 - 8) > 0x1F )\n        _invalid_parameter_noinfo_noreturn();\n    }\n    j_j_j_j_free(v38);\n  }\n  return v36;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\Plugins\\aiuser\\McpServerPlugin.dll",
    "sha256": "c8fe52a475cdaececd2e7d1fff2f16ad2c932d9549492727fa3fc459a5a7943e",
    "va": "0x180072c80",
    "rva": "0x72c80",
    "function": "sub_180072C80",
    "pseudocode": " \nchar __fastcall sub_180072C80(__int64 a1)\n{\n  _BYTE *v2; \n  bool v3; \n  const char *v4; \n  const char *v5; \n  int v6; \n  const char *v8; \n  int v9; \n  _BYTE *Block; \n  unsigned __int64 v11; \n\n  sub_18002AE70();\n  sub_18000BD20();\n  if ( v11 > 0xF )\n  {\n    v2 = Block;\n    if ( v11 + 1 >= 0x1000 )\n    {\n      v2 = *((_BYTE **)Block - 1);\n      if ( (unsigned __int64)(Block - v2 - 8) > 0x1F )\n        _invalid_parameter_noinfo_noreturn();\n    }\n    j_j_j_j_free(v2);\n  }\n  v3 = *(_QWORD *)(a1 + 1008) == 0;\n  v4 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n  if ( v3 )\n  {\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92) != nullptr )\n      v5 = strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92)\n         + 1;\n    else\n      v5 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n    if ( strrchr(v5, 47) != nullptr )\n    {\n      if ( strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92) != nullptr )\n        v4 = strrchr(\n               \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n               92)\n           + 1;\n      v6 = 47;\n    }\n    else\n    {\n      if ( strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92) == nullptr )\n      {\nLABEL_17:\n        GXP::LogMessage(1, v4, 181, \"GenerateSessionToken: CSPRNG failed\");\n        return 0;\n      }\n      v6 = 92;\n    }\n    v4 = strrchr(v4, v6) + 1;\n    goto LABEL_17;\n  }\n  if ( strrchr(\n         \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n         92) != nullptr )\n    v8 = strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92)\n       + 1;\n  else\n    v8 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n  if ( strrchr(v8, 47) != nullptr )\n  {\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92) != nullptr )\n      v4 = strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92)\n         + 1;\n    v9 = 47;\n    goto LABEL_27;\n  }\n  if ( strrchr(\n         \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n         92) != nullptr )\n  {\n    v9 = 92;\nLABEL_27:\n    v4 = strrchr(v4, v9) + 1;\n  }\n  GXP::LogMessage(2, v4, 184, \"GenerateSessionToken: 256-bit session token generated\");\n  return 1;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\Plugins\\aiuser\\McpServerPlugin.dll",
    "sha256": "c8fe52a475cdaececd2e7d1fff2f16ad2c932d9549492727fa3fc459a5a7943e",
    "va": "0x18007c320",
    "rva": "0x7c320",
    "function": "sub_18007C320",
    "pseudocode": " \n__int64 sub_18007C320()\n{\n  LSTATUS ValueW; \n  const char *v1; \n  const char *v2; \n  int v3; \n  unsigned int v5; \n  int v6; \n  const char *v7; \n  const char *v8; \n  const char *v9; \n  int v10; \n  int pvData; \n  DWORD pcbData; \n\n  pcbData = 4;\n  pvData = 0;\n  ValueW = RegGetValueW(\n             HKEY_LOCAL_MACHINE,\n             L\"SOFTWARE\\\\NVIDIA Corporation\\\\Global\\\\NvApp\",\n             L\"McpAccessLevel\",\n             0x10010u,\n             nullptr,\n             &pvData,\n             &pcbData);\n  if ( ValueW != 0 )\n  {\n    v1 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92) != nullptr )\n      v2 = strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92)\n         + 1;\n    else\n      v2 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n    if ( strrchr(v2, 47) != nullptr )\n    {\n      if ( strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92) != nullptr )\n        v1 = strrchr(\n               \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n               92)\n           + 1;\n      v3 = 47;\n    }\n    else\n    {\n      if ( strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92) == nullptr )\n      {\nLABEL_12:\n        GXP::LogMessage(2, v1, 114, \"McpServerPlugin: McpAccessLevel not set (rc=%ld), defaulting to standard\", ValueW);\n        return 1;\n      }\n      v3 = 92;\n    }\n    v1 = strrchr(v1, v3) + 1;\n    goto LABEL_12;\n  }\n  v5 = 1;\n  v6 = pvData;\n  v7 = \"standard\";\n  if ( pvData == 1 )\n  {\n    v7 = \"readonly\";\n    v5 = 0;\n  }\n  else if ( pvData == 3 )\n  {\n    v7 = \"full_access\";\n    v5 = 2;\n  }\n  v8 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n  if ( strrchr(\n         \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n         92) != nullptr )\n    v9 = strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92)\n       + 1;\n  else\n    v9 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\";\n  if ( strrchr(v9, 47) != nullptr )\n  {\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n           92) != nullptr )\n      v8 = strrchr(\n             \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n             92)\n         + 1;\n    v10 = 47;\n    goto LABEL_26;\n  }\n  if ( strrchr(\n         \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\McpServerPlugin.cpp\",\n         92) != nullptr )\n  {\n    v10 = 92;\nLABEL_26:\n    v8 = strrchr(v8, v10) + 1;\n  }\n  GXP::LogMessage(2, v8, 134, \"McpServerPlugin: McpAccessLevel registry value=%lu, resolved to '%s'\", v6, v7);\n  return v5;\n}\n\n\n"
  },
  {
    "chapter": "mcp",
    "module": "NVIDIA App\\Plugins\\aiuser\\McpServerPlugin.dll",
    "sha256": "c8fe52a475cdaececd2e7d1fff2f16ad2c932d9549492727fa3fc459a5a7943e",
    "va": "0x1800f9ae0",
    "rva": "0xf9ae0",
    "function": "sub_1800F9AE0",
    "pseudocode": " \nchar __fastcall sub_1800F9AE0(__int64 a1, _QWORD *a2)\n{\n  __int64 v4; \n  __int64 v5; \n  _QWORD *v6; \n  _QWORD *v7; \n  _QWORD *v8; \n  _QWORD *v9; \n  __int64 v10; \n  unsigned __int8 v11; \n  int v12; \n  unsigned __int64 *v13; \n  unsigned __int64 v14; \n  const void *v15; \n  unsigned __int64 v16; \n  _BYTE *v17; \n  _BYTE *i; \n  _BYTE *v19; \n  _BYTE *v20; \n  _BYTE *j; \n  _BYTE *v22; \n  _BYTE *v23; \n  _BYTE *k; \n  _BYTE *v25; \n  _BYTE *v26; \n  _BYTE *m; \n  _BYTE *v28; \n  char result; \n  const char *v30; \n  const char *v31; \n  int v32; \n  __int64 v33; \n  void (__fastcall *v34)(__int64, _QWORD, __int64, void **, __int64, char *); \n  __int64 v35; \n  __int64 v36; \n  void *v37; \n  void *v38; \n  _BYTE *v39; \n  char v40[8]; \n  void *v41; \n  __int128 v42; \n  _QWORD v43[2]; \n  __int64 v44; \n  __int64 v45; \n  void *Block[2]; \n  __m128i si128; \n  void *v48[2]; \n  __m128i v49; \n\n  *(_OWORD *)v43 = 0;\n  v44 = 6;\n  v45 = 15;\n  strcpy((char *)v43, \"origin\");\n  v4 = sub_18000AF10();\n  v5 = a2[11];\n  v6 = *(_QWORD **)(v5 + 16 * (v4 & a2[14]) + 8);\n  v7 = (_QWORD *)a2[9];\n  if ( v6 == v7 )\n  {\nLABEL_14:\n    v6 = nullptr;\n  }\n  else\n  {\n    v8 = *(_QWORD **)(v5 + 16 * (v4 & a2[14]));\n    while ( 1 )\n    {\n      v9 = v6 + 2;\n      if ( v6[5] > 0xFu )\n        v9 = (_QWORD *)*v9;\n      if ( v6[4] == 6 )\n      {\n        v10 = 0;\n        while ( 1 )\n        {\n          v11 = *((_BYTE *)v43 + v10++);\n          if ( v11 != *((_BYTE *)v9 + v10 - 1) )\n            break;\n          if ( v10 == 6 )\n          {\n            v12 = 0;\n            goto LABEL_11;\n          }\n        }\n        v12 = v11 < *((_BYTE *)v9 + v10 - 1) ? -1 : 1;\nLABEL_11:\n        if ( v12 == 0 )\n          break;\n      }\n      if ( v6 == v8 )\n        goto LABEL_14;\n      v6 = (_QWORD *)v6[1];\n    }\n  }\n  if ( v6 == nullptr )\n    return 1;\n  v44 = 0;\n  v45 = 15;\n  LOBYTE(v43[0]) = 0;\n  if ( v6 == v7 )\n    return 1;\n  v13 = v6 + 6;\n  v14 = v13[2];\n  v15 = v13;\n  v16 = v13[3];\n  if ( v16 > 0xF )\n    v15 = (const void *)*v13;\n  if ( v14 == 4 && memcmp(v15, \"null\", 4u) == 0 )\n    return 1;\n  v17 = v13;\n  if ( v16 > 0xF )\n    v17 = (_BYTE *)*v13;\n  if ( v14 >= 0x10 )\n  {\n    for ( i = v17; *i != 104 || memcmp(i, \"http://localhost\", 0x10u) != 0; --i )\n    {\n      if ( i == v17 )\n        goto LABEL_34;\n    }\n    if ( i == v17 )\n    {\n      if ( v13[2] == 16 )\n        return 1;\n      v19 = v13;\n      if ( v16 > 0xF )\n        v19 = (_BYTE *)*v13;\n      if ( v19[16] == 58 )\n        return 1;\n    }\n  }\nLABEL_34:\n  v20 = v13;\n  if ( v16 > 0xF )\n    v20 = (_BYTE *)*v13;\n  if ( v13[2] >= 0x10 )\n  {\n    for ( j = v20; *j != 104 || memcmp(j, \"http://127.0.0.1\", 0x10u) != 0; --j )\n    {\n      if ( j == v20 )\n        goto LABEL_47;\n    }\n    if ( j == v20 )\n    {\n      if ( v13[2] == 16 )\n        return 1;\n      v22 = v13;\n      if ( v16 > 0xF )\n        v22 = (_BYTE *)*v13;\n      if ( v22[16] == 58 )\n        return 1;\n    }\n  }\nLABEL_47:\n  v23 = v13;\n  if ( v16 > 0xF )\n    v23 = (_BYTE *)*v13;\n  if ( v13[2] >= 0x11 )\n  {\n    for ( k = v23; *k != 104 || memcmp(k, \"https://localhost\", 0x11u) != 0; --k )\n    {\n      if ( k == v23 )\n        goto LABEL_60;\n    }\n    if ( k == v23 )\n    {\n      if ( v13[2] == 17 )\n        return 1;\n      v25 = v13;\n      if ( v16 > 0xF )\n        v25 = (_BYTE *)*v13;\n      if ( v25[17] == 58 )\n        return 1;\n    }\n  }\nLABEL_60:\n  v26 = v13;\n  if ( v16 > 0xF )\n    v26 = (_BYTE *)*v13;\n  if ( v13[2] >= 0x11 )\n  {\n    for ( m = v26; *m != 104 || memcmp(m, \"https://127.0.0.1\", 0x11u) != 0; --m )\n    {\n      if ( m == v26 )\n        goto LABEL_74;\n    }\n    if ( m == v26 )\n    {\n      if ( v13[2] == 17 )\n        return 1;\n      v28 = v13;\n      if ( v16 > 0xF )\n        v28 = (_BYTE *)*v13;\n      if ( v28[17] == 58 )\n        return 1;\n    }\n  }\nLABEL_74:\n  if ( v13[3] > 0xF )\n    v13 = (unsigned __int64 *)*v13;\n  v30 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transport\\\\H\"\n        \"ttpTransport.cpp\";\n  if ( strrchr(\n         \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transport\\\\\"\n         \"HttpTransport.cpp\",\n         92) != nullptr )\n    v31 = strrchr(\n            \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transpor\"\n            \"t\\\\HttpTransport.cpp\",\n            92)\n        + 1;\n  else\n    v31 = \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transport\\\\\"\n          \"HttpTransport.cpp\";\n  if ( strrchr(v31, 47) != nullptr )\n  {\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transport\"\n           \"\\\\HttpTransport.cpp\",\n           92) != nullptr )\n      v30 = strrchr(\n              \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transp\"\n              \"ort\\\\HttpTransport.cpp\",\n              92)\n          + 1;\n    v32 = 47;\n  }\n  else\n  {\n    if ( strrchr(\n           \"C:\\\\tmp\\\\workspace\\\\NvAppP1\\\\qemu_NvAppWinNightly\\\\plugins\\\\src\\\\plugin-modules\\\\McpServer\\\\plugin\\\\transport\"\n           \"\\\\HttpTransport.cpp\",\n           92) == nullptr )\n      goto LABEL_86;\n    v32 = 92;\n  }\n  v30 = strrchr(v30, v32) + 1;\nLABEL_86:\n  GXP::LogMessage(1, v30, 522, \"HttpTransport: rejected request with invalid Origin: %s\", (const char *)v13);\n  v33 = *(_QWORD *)(a1 + 136);\n  v34 = *(void (__fastcall **)(__int64, _QWORD, __int64, void **, __int64, char *))(*(_QWORD *)v33 + 40LL);\n  sub_180010CE0();\n  __wind\n  {\n    v35 = sub_1800EBD00((__int64)v48, -32600, \"Forbidden: invalid origin\", 0);\n    v36 = v35;\n    __wind\n    {\n      *(_OWORD *)Block = 0;\n      si128 = 0;\n      _mm_lfence();\n      Block[0] = operator new(0x20u);\n      si128 = _mm_load_si128((const __m128i *)&xmmword_18021CE60);\n      strcpy((char *)Block[0], \"application/json\");\n      __wind\n      {\n        v34(v33, a2[20], 403, Block, v36, v40);\n      }\n      __unwind\n      {\n        sub_1800084D0(Block);\n      }\n      if ( si128.m128i_i64[1] > 0xFuLL )\n      {\n        v37 = Block[0];\n        if ( (unsigned __int64)(si128.m128i_i64[1] + 1) >= 0x1000 )\n        {\n          v37 = *((void **)Block[0] - 1);\n          if ( (unsigned __int64)((char *)Block[0] - (char *)v37 - 8) > 0x1F )\n            _invalid_parameter_noinfo_noreturn();\n        }\n        j_j_j_j_free(v37);\n      }\n      si128 = _mm_load_si128((const __m128i *)&xmmword_180217880);\n      LOBYTE(Block[0]) = 0;\n      if ( v49.m128i_i64[1] > 0xFuLL )\n      {\n        v38 = v48[0];\n        if ( (unsigned __int64)(v49.m128i_i64[1] + 1) >= 0x1000 )\n        {\n          v38 = *((void **)v48[0] - 1);\n          if ( (unsigned __int64)((char *)v48[0] - (char *)v38 - 8) > 0x1F )\n            _invalid_parameter_noinfo_noreturn();\n        }\n        j_j_j_j_free(v38);\n      }\n      v49 = _mm_load_si128((const __m128i *)&xmmword_180217880);\n      LOBYTE(v48[0]) = 0;\n      v39 = v41;\n      if ( v41 != nullptr )\n      {\n        if ( ((*((_QWORD *)&v42 + 1) - (_QWORD)v41) & 0xFFFFFFFFFFFFFFF8uLL) >= 0x1000 )\n        {\n          v39 = *((_BYTE **)v41 - 1);\n          if ( (unsigned __int64)((_BYTE *)v41 - v39 - 8) > 0x1F )\n            _invalid_parameter_noinfo_noreturn();\n        }\n        j_j_j_j_free(v39);\n        v41 = nullptr;\n        v42 = 0;\n      }\n      sub_1800229A0();\n      result = 0;\n    }\n    __unwind\n    {\n      sub_1800084D0(v48);\n    }\n  }\n  __unwind\n  {\n    sub_180029E20();\n  }\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "containers",
    "module": "NvContainer\\nvcontainer.exe",
    "sha256": "0f0a5352c50d4701d629e7c88a7a45632e76217bdc8e21569af5d2ab3c345817",
    "va": "0x14000c400",
    "rva": "0xc400",
    "function": "sub_14000C400",
    "pseudocode": " \nchar __fastcall sub_14000C400(__int64 *a1, __int64 *a2)\n{\n  bool v2; \n  __int64 *v3; \n  __int64 v5; \n  _QWORD *v6; \n  _QWORD *v7; \n  bool v8; \n  _QWORD *v10; \n  _QWORD *v11; \n  _QWORD *v12; \n  char v13; \n  __int64 v14; \n  __int64 v15; \n  DWORD LastError; \n  unsigned int *v17; \n  int v18; \n  int *v19; \n  unsigned int v20; \n  bool v21; \n  __int64 v22; \n  __int64 v23; \n  __int64 (*v24)(void); \n  __int64 v25; \n  __int64 v26; \n  __m128i si128; \n  const char *v28; \n  __int64 v29; \n  __int64 v30; \n  char v31; \n  unsigned int v32; \n  int v33[4]; \n  char v34[8]; \n  _QWORD v35[16]; \n  __int16 v36; \n  _BYTE v37[510]; \n  __int16 v38; \n  _BYTE v39[510]; \n\n  v2 = (unsigned __int64)a2[3] <= 7;\n  v3 = a2;\n  *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n  strcpy(v34, \"r.cpp\");\n  LOBYTE(v5) = (_BYTE)a2;\n  if ( !v2 )\n    v5 = *a2;\n  sub_1400229E0(*a1, (int)v33, 115, 3, (wchar_t *)L\"Loading %ls\", v5);\n  v6 = a1 + 5;\n  if ( a1 + 5 != v3 )\n  {\n    v7 = v3;\n    if ( (unsigned __int64)v3[3] > 7 )\n      v7 = (_QWORD *)*v3;\n    sub_14000EE20(a1 + 5, v7, v3[2]);\n  }\n  v36 = 0;\n  sub_140122090(v37, 0, 510);\n  if ( (unsigned __int64)a1[8] > 7 )\n    v6 = (_QWORD *)*v6;\n  sub_14001E390(v6, &v36, 256);\n  v8 = v36 != 95;\n  *((_BYTE *)a1 + 72) = v36 != 95;\n  if ( !v8 && (*(unsigned __int8 (__fastcall **)(__int64))(*(_QWORD *)a1[2] + 8LL))(a1[2]) != 0 )\n  {\n    v2 = (unsigned __int64)v3[3] <= 7;\n    *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n    strcpy(v34, \"r.cpp\");\n    if ( !v2 )\n      v3 = (__int64 *)*v3;\n    sub_1400229E0(*a1, (int)v33, 126, 2, (wchar_t *)L\"Safe mode: skip optional plugin %ls\", (char)v3);\n    return 0;\n  }\n  v10 = v3;\n  if ( (unsigned __int64)v3[3] > 7 )\n    v10 = (_QWORD *)*v3;\n  sub_140013360(a1 + 42, v10);\n  v38 = 0;\n  sub_140122090(v39, 0, 510);\n  v11 = a1 + 5;\n  if ( (unsigned __int64)a1[8] > 7 )\n    v11 = (_QWORD *)*v11;\n  sub_14001E390(v11, &v38, 256);\n  if ( (unsigned __int8)sub_140011950(a1 + 42, &v38, a1[4] + 1008) != 0 )\n  {\n    v2 = (unsigned __int64)v3[3] <= 7;\n    *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n    strcpy(v34, \"r.cpp\");\n    if ( !v2 )\n      v3 = (__int64 *)*v3;\n    sub_1400229E0(*a1, (int)v33, 135, 2, (wchar_t *)L\"Disable loading of plugin %ls\", (char)v3);\n    *((_DWORD *)a1 + 57) = 5;\n    sub_14001EB00((char *)a1 + 160, 0x40u);\n    return 1;\n  }\n  if ( a1[32] != 0 )\n    *(_QWORD *)(a1[32] + 72) = sub_14001E730();\n  v12 = v3;\n  if ( (unsigned __int64)v3[3] > 7 )\n    v12 = (_QWORD *)*v3;\n  v13 = sub_140013E40(a1 + 42, v12, a1 + 10, 0);\n  if ( v13 != 0 )\n  {\n    if ( a1[32] != 0 )\n    {\n      v17 = (unsigned int *)a1[32];\n      v18 = sub_14001E730();\n      v19 = (int *)&v32;\n      v20 = v18 - v17[18];\n      v21 = *v17 < v20;\n      v32 = v20;\n      if ( !v21 )\n        v19 = (int *)v17;\n      *v17 = *v19;\n    }\n    v2 = (unsigned __int64)v3[3] <= 7;\n    LOBYTE(v22) = (_BYTE)v3;\n    *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n    strcpy(v34, \"r.cpp\");\n    if ( !v2 )\n      v22 = *v3;\n    sub_1400229E0(*a1, (int)v33, 157, 3, (wchar_t *)L\"Loaded %ls\", v22);\n    v23 = a1[10];\n    *(_OWORD *)v35 = xmmword_14012E2E8;\n    memset(&v35[2], 0, 112);\n    v24 = (__int64 (*)(void))sub_1400132A0(a1 + 42, v23, v35);\n    strcpy(v34, \"r.cpp\");\n    *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n    if ( v24 != nullptr )\n    {\n      LOBYTE(v25) = (_BYTE)v3;\n      if ( (unsigned __int64)v3[3] > 7 )\n        v25 = *v3;\n      sub_1400229E0(*a1, (int)v33, 170, 4, (wchar_t *)L\"Query plugin information for %ls\", v25);\n      v26 = v24();\n      if ( v26 != 0 && *(_DWORD *)v26 != 0 )\n      {\n        *(_OWORD *)(a1 + 11) = *(_OWORD *)v26;\n        *(_OWORD *)(a1 + 13) = *(_OWORD *)(v26 + 16);\n        *(_OWORD *)(a1 + 15) = *(_OWORD *)(v26 + 32);\n        *(_OWORD *)(a1 + 17) = *(_OWORD *)(v26 + 48);\n        a1[19] = *(_QWORD *)(v26 + 64);\n        sub_14001EBB0(a1 + 20, 64, a1[12]);\n        si128 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n        v28 = \"optional\";\n        if ( *((_BYTE *)a1 + 72) != 0 )\n          v28 = \"mandatory\";\n        strcpy(v34, \"r.cpp\");\n        v31 = (char)v28;\n        v29 = *a1;\n        *(__m128i *)v33 = si128;\n        sub_140022750(v29, (int)v33, 198, 3, \"Loaded %s plugin %s, version %u\", v31);\n        *((_DWORD *)a1 + 58) = 1;\n        *((_DWORD *)a1 + 57) = 1;\n        return v13;\n      }\n      v2 = (unsigned __int64)v3[3] <= 7;\n      LOBYTE(v30) = (_BYTE)v3;\n      *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n      strcpy(v34, \"r.cpp\");\n      if ( !v2 )\n        v30 = *v3;\n      sub_1400229E0(\n        *a1,\n        (int)v33,\n        180,\n        1,\n        (wchar_t *)L\"NvPluginGetInfo for %ls returned invalid plugin descriptor\",\n        v30);\n      if ( (unsigned __int64)v3[3] > 7 )\n        v3 = (__int64 *)*v3;\n      sub_140007F90(0x24u, L\"NvPluginGetInfo for %ls returned invalid plugin descriptor\", v3);\n    }\n    else\n    {\n      if ( (unsigned __int64)v3[3] > 7 )\n        v3 = (__int64 *)*v3;\n      sub_1400229E0(*a1, (int)v33, 165, 2, (wchar_t *)L\"NvPluginGetInfo is not exported by %ls\", (char)v3);\n    }\n    v13 = 0;\n    sub_14000E670(a1);\n    return v13;\n  }\n  v14 = *a1;\n  *(__m128i *)v33 = _mm_load_si128((const __m128i *)&xmmword_14012ED70);\n  strcpy(v34, \"r.cpp\");\n  GetLastError();\n  LOBYTE(v15) = (_BYTE)v3;\n  if ( (unsigned __int64)v3[3] > 7 )\n    v15 = *v3;\n  sub_1400229E0(v14, (int)v33, 152, 1, (wchar_t *)L\"Failed to load library %ls. Error %u\", v15);\n  LastError = GetLastError();\n  if ( (unsigned __int64)v3[3] > 7 )\n    v3 = (__int64 *)*v3;\n  sub_140007F90(0x1Eu, L\"Failed to load library %ls. Error %u\", v3, LastError);\n  return 0;\n}\n\n\n"
  },
  {
    "chapter": "containers",
    "module": "NvContainer\\nvcontainer.exe",
    "sha256": "0f0a5352c50d4701d629e7c88a7a45632e76217bdc8e21569af5d2ab3c345817",
    "va": "0x140013360",
    "rva": "0x13360",
    "function": "sub_140013360",
    "pseudocode": " \nvoid __fastcall sub_140013360(__int64 a1, __int64 a2)\n{\n  __int64 v4; \n  volatile signed __int32 *v5; \n  _DWORD *v6; \n  unsigned __int64 v7; \n  __int64 v8; \n  int v9; \n  bool v10; \n  void *v11; \n  unsigned __int64 v12; \n  __int64 *v13; \n  __int64 v14; \n  __int64 v15; \n  _DWORD *v16; \n  volatile signed __int32 *v17; \n  void *v18; \n  _QWORD *v19; \n  _QWORD *v20; \n  _QWORD *v21; \n  __int64 v22; \n  volatile signed __int32 *v23; \n  volatile signed __int32 *v24; \n  int v25; \n  __int64 *v26; \n  __int64 v27; \n  __int64 v28; \n  _DWORD *v29; \n  volatile signed __int32 *v30; \n  void *v31; \n  volatile signed __int32 *v32; \n  volatile signed __int32 *v33; \n  void *v34; \n  __int64 v36; \n  char v37; \n  __int64 v38; \n  __int128 v39; \n  __int64 *v40; \n  void *Block; \n  char v42; \n  void *v43; \n  __int64 (__fastcall ***v44)(_QWORD, __int64); \n  _QWORD *v45; \n  volatile signed __int32 **v46; \n  __int64 (__fastcall ***v47)(_QWORD, __int64); \n  __int128 v48; \n  const std::exception *v49; \n  __int128 v50; \n  __m128i v51[2]; \n  char v52[16]; \n  __int128 v53; \n  __int64 v54; \n  unsigned __int64 v55; \n  __int128 v56; \n  __int64 v57; \n  unsigned __int64 v58; \n  _QWORD v59[3]; \n  unsigned __int64 v60; \n\n  v40 = (__int64 *)a1;\n  v4 = 0;\n  v45 = (_QWORD *)(a1 + 32);\n  *(_QWORD *)(a1 + 32) = 0;\n  v46 = (volatile signed __int32 **)(a1 + 40);\n  v5 = *(volatile signed __int32 **)(a1 + 40);\n  *(_QWORD *)(a1 + 40) = 0;\n  if ( v5 != nullptr && _InterlockedExchangeAdd(v5 + 2, 0xFFFFFFFF) == 1 )\n  {\n    (**(void (__fastcall ***)(volatile signed __int32 *))v5)(v5);\n    if ( _InterlockedExchangeAdd(v5 + 3, 0xFFFFFFFF) == 1 )\n      (*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v5 + 8LL))(v5);\n  }\n  Block = (void *)sub_1400118D0(a2);\n  v42 = 1;\n  v43 = nullptr;\n  if ( Block != nullptr )\n  {\n    v6 = operator new(4u, (const struct std::nothrow_t *)&unk_140137144);\n    if ( v6 != nullptr )\n    {\n      *v6 = 0;\n      v43 = v6;\n      ++*v6;\n    }\n    else\n    {\n      v43 = nullptr;\n      j_j_free_0_1(Block);\n      Block = nullptr;\n    }\n  }\n  v39 = 0;\n  v7 = -1;\n  do\n    ++v7;\n  while ( *((_WORD *)Block + v7) != 0 );\n  __wind\n  {\n    __wind\n    {\n      v53 = 0;\n      v54 = 0;\n      v55 = 0;\n      sub_1400037F0(&v53, (__int64)Block, v7);\n      v8 = sub_140014830(v51, &v53, 3);\n      v38 = *(_QWORD *)v8;\n      LODWORD(v48) = *(_DWORD *)(v8 + 8);\n      *((_QWORD *)&v48 + 1) = &off_140167060;\n      v50 = v48;\n      if ( (_DWORD)v38 != 0 )\n      {\n        v9 = 0;\n        v10 = (_DWORD)v38 != 1;\n      }\n      else\n      {\n        v10 = false;\n        v9 = v50;\n      }\n      if ( v55 > 7 )\n      {\n        v11 = (void *)v53;\n        if ( 2 * v55 + 2 >= 0x1000 )\n        {\n          v11 = *(void **)(v53 - 8);\n          if ( (unsigned __int64)(v53 - (_QWORD)v11 - 8) > 0x1F )\n            invalid_parameter_noinfo_noreturn();\n        }\n        j_j_free_0(v11);\n      }\n      if ( Block != nullptr && (v10 || v9 != 0) )\n      {\n        v12 = -1;\n        do\n          ++v12;\n        while ( *((_WORD *)Block + v12) != 0 );\n        try\n        {\n          v56 = 0;\n          v57 = 0;\n          v58 = 0;\n          sub_1400037F0(&v56, (__int64)Block, v12);\n          __wind\n          {\n            v13 = (__int64 *)sub_140033F90(&v44, a1, 1, &v56);\n            v14 = *v13;\n            v15 = 0;\n            v16 = nullptr;\n            if ( *v13 != 0 )\n            {\n              __wind\n              {\n                v16 = operator new(0x18u);\n                if ( v16 != nullptr )\n                {\n                  v16[2] = 1;\n                  v16[3] = 1;\n                  *(_QWORD *)v16 = &std::_Ref_count_resource<nvc::ISettingsStorage *,std::default_delete<nvc::ISettingsStorage>>::`vftable';\n                  *((_QWORD *)v16 + 2) = v14;\n                }\n                else\n                {\n                  v16 = nullptr;\n                }\n                *v13 = 0;\n                v15 = v14;\n              }\n              __unwind\n              {\n                sub_140012EC0(&v44);\n              }\n            }\n          }\n          __unwind\n          {\n            sub_140013010((__int64)&v56);\n          }\n        }\n        catch ( const std::exception *v49 )\n        {\n          v51[1] = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n          strcpy(v52, \"lperWin32.cpp\");\n          v36 = *v40;\n          v37 = (*(__int64 (__fastcall **)(const std::exception *))(*(_QWORD *)v49 + 8LL))(v49);\n          sub_140022750(v36, (int)v51[1].m128i_i32, 52, 1, \"Unable to load plugin config file, error: %s\", v37);\n          v4 = 0;\n          goto LABEL_41;\n        }\n        *(_QWORD *)&v39 = v15;\n        v17 = *((volatile signed __int32 **)&v39 + 1);\n        *((_QWORD *)&v39 + 1) = v16;\n        if ( v17 != nullptr && _InterlockedExchangeAdd(v17 + 2, 0xFFFFFFFF) == 1 )\n        {\n          (**(void (__fastcall ***)(volatile signed __int32 *))v17)(v17);\n          if ( _InterlockedExchangeAdd(v17 + 3, 0xFFFFFFFF) == 1 )\n            (*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v17 + 8LL))(v17);\n        }\n        if ( v44 != nullptr )\n          (**v44)(v44, 1);\n        if ( v58 > 7 )\n        {\n          v18 = (void *)v56;\n          if ( 2 * v58 + 2 >= 0x1000 )\n          {\n            v18 = *(void **)(v56 - 8);\n            if ( (unsigned __int64)(v56 - (_QWORD)v18 - 8) > 0x1F )\n              invalid_parameter_noinfo_noreturn();\n          }\n          j_j_free_0(v18);\n        }\n      }\n      else\n      {\n        try\n        {\n          v25 = (*(__int64 (__fastcall **)(_QWORD, _QWORD *))(**(_QWORD **)(a1 + 16) + 160LL))(\n                  *(_QWORD *)(a1 + 16),\n                  v59);\n          __wind\n          {\n            v26 = (__int64 *)sub_1400368E0((unsigned int)&v40, a1, v25, 1, 0);\n            v27 = *v26;\n            v28 = 0;\n            v29 = nullptr;\n            if ( *v26 != 0 )\n            {\n              __wind\n              {\n                v29 = operator new(0x18u);\n                if ( v29 != nullptr )\n                {\n                  v29[2] = 1;\n                  v29[3] = 1;\n                  *(_QWORD *)v29 = &std::_Ref_count_resource<nvc::ISettingsStorage *,std::default_delete<nvc::ISettingsStorage>>::`vftable';\n                  *((_QWORD *)v29 + 2) = v27;\n                }\n                else\n                {\n                  v29 = nullptr;\n                }\n                *v26 = 0;\n                v28 = v27;\n              }\n              __unwind\n              {\n                sub_140012EC0((__int64 (__fastcall ****)(_QWORD, __int64))&v40);\n              }\n            }\n          }\n          __unwind\n          {\n            sub_140002470(v59);\n          }\n        }\n        catch ( std::exception )\n        {\n          v4 = 0;\n          goto LABEL_41;\n        }\n        *(_QWORD *)&v39 = v28;\n        v30 = *((volatile signed __int32 **)&v39 + 1);\n        *((_QWORD *)&v39 + 1) = v29;\n        if ( v30 != nullptr && _InterlockedExchangeAdd(v30 + 2, 0xFFFFFFFF) == 1 )\n        {\n          (**(void (__fastcall ***)(volatile signed __int32 *))v30)(v30);\n          if ( _InterlockedExchangeAdd(v30 + 3, 0xFFFFFFFF) == 1 )\n            (*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v30 + 8LL))(v30);\n        }\n        if ( v40 != nullptr )\n          (*(void (__fastcall **)(__int64 *, __int64))*v40)(v40, 1);\n        if ( v60 > 7 )\n        {\n          v31 = (void *)v59[0];\n          if ( 2 * v60 + 2 >= 0x1000 )\n          {\n            v31 = *(void **)(v59[0] - 8LL);\n            if ( (unsigned __int64)(v59[0] - (_QWORD)v31 - 8LL) > 0x1F )\n              invalid_parameter_noinfo_noreturn();\n          }\n          j_j_free_0(v31);\n        }\n      }\nLABEL_41:\n      v19 = (_QWORD *)sub_140029830(&v47, &v39);\n      v20 = v19;\n      v21 = v45;\n      v22 = *v19;\n      v23 = nullptr;\n      if ( *v19 != 0 )\n      {\n        __wind\n        {\n          v24 = (volatile signed __int32 *)operator new(0x18u);\n        }\n        __unwind\n        {\n          sub_140012EA0(&v47);\n        }\n        v23 = v24;\n        if ( v24 != nullptr )\n        {\n          *(_OWORD *)v24 = 0;\n          *((_DWORD *)v24 + 2) = 1;\n          *((_DWORD *)v24 + 3) = 1;\n          *(_QWORD *)v24 = &std::_Ref_count_resource<nvc::IPluginConfig *,std::default_delete<nvc::IPluginConfig>>::`vftable';\n          *((_QWORD *)v24 + 2) = v22;\n        }\n        else\n        {\n          v23 = nullptr;\n        }\n        *v20 = 0;\n        v4 = v22;\n      }\n      *v21 = v4;\n      v32 = *v46;\n      *v46 = v23;\n      if ( v32 != nullptr && _InterlockedExchangeAdd(v32 + 2, 0xFFFFFFFF) == 1 )\n      {\n        (**(void (__fastcall ***)(volatile signed __int32 *))v32)(v32);\n        if ( _InterlockedExchangeAdd(v32 + 3, 0xFFFFFFFF) == 1 )\n          (*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v32 + 8LL))(v32);\n      }\n      if ( v47 != nullptr )\n        (**v47)(v47, 1);\n      v33 = *((volatile signed __int32 **)&v39 + 1);\n      if ( *((_QWORD *)&v39 + 1) != 0\n        && _InterlockedExchangeAdd((volatile signed __int32 *)(*((_QWORD *)&v39 + 1) + 8LL), 0xFFFFFFFF) == 1 )\n      {\n        (**(void (__fastcall ***)(volatile signed __int32 *))v33)(v33);\n        if ( _InterlockedExchangeAdd(v33 + 3, 0xFFFFFFFF) == 1 )\n          (*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v33 + 8LL))(v33);\n      }\n      v34 = v43;\n      if ( v43 != nullptr && (*(_DWORD *)v43)-- == 1 )\n      {\n        j_j_free_0_1(Block);\n        j_j_free_0(v34);\n      }\n    }\n    __unwind\n    {\n      sub_140012E40((__int64)&v39);\n    }\n  }\n  __unwind\n  {\n    sub_140012D80((__int64)&Block);\n  }\n}\n\n\n"
  },
  {
    "chapter": "containers",
    "module": "NvContainer\\nvcontainer.exe",
    "sha256": "0f0a5352c50d4701d629e7c88a7a45632e76217bdc8e21569af5d2ab3c345817",
    "va": "0x140013970",
    "rva": "0x13970",
    "function": "sub_140013970",
    "pseudocode": " \n__int64 __fastcall sub_140013970(__int64 *a1, __int64 a2)\n{\n  char v2; \n  __int64 v4; \n  void (__fastcall *v5)(__int64, char *, __int128 *); \n  unsigned __int64 v6; \n  void *v7; \n  char *v8; \n  __int64 v9; \n  __int64 v10; \n  DWORD LastError; \n  char *v12; \n  DWORD v13; \n  char *v14; \n  char *v15; \n  const nvc::ConfigErrorException *v17; \n  _QWORD *v18; \n  const char *v19; \n  __int64 v20; \n  __int64 v21; \n  DWORD v22; \n  __int64 v23; \n  __int64 *v24; \n  __int64 v25; \n  const nvc::ConfigErrorException *v26; \n  const std::exception *v27; \n  int v28[4]; \n  char v29[16]; \n  char v30[24]; \n  unsigned __int64 v31; \n  __int128 v32; \n  __m128i si128; \n\n  v2 = a2;\n  v24 = a1;\n  v25 = a2;\n  v23 = 0;\n  v4 = a1[4];\n  v5 = *(void (__fastcall **)(__int64, char *, __int128 *))(*(_QWORD *)v4 + 16LL);\n  v32 = 0;\n  si128 = 0;\n  v6 = -1;\n  do\n    ++v6;\n  while ( *(_WORD *)(a2 + 2 * v6) != 0 );\n  try\n  {\n    sub_1400037F0(&v32, a2, v6);\n    __wind\n    {\n      v5(v4, v30, &v32);\n      if ( si128.m128i_i64[1] > 7uLL )\n      {\n        v7 = (void *)v32;\n        if ( (unsigned __int64)(2 * si128.m128i_i64[1] + 2) >= 0x1000 )\n        {\n          v7 = *(void **)(v32 - 8);\n          if ( (unsigned __int64)(v32 - (_QWORD)v7 - 8) > 0x1F )\n            invalid_parameter_noinfo_noreturn();\n        }\n        j_j_free_0(v7);\n      }\n      si128 = _mm_load_si128((const __m128i *)&xmmword_14012C600);\n      LOWORD(v32) = 0;\n      v8 = v30;\n      if ( v31 > 7 )\n        v8 = *(char **)v30;\n    }\n    __unwind\n    {\n      sub_140002470(&v32);\n    }\n    __wind\n    {\n      v9 = sub_140013C10(a1, v8, 0);\n      v23 = v9;\n      strcpy(v29, \"lperWin32.cpp\");\n      *(__m128i *)v28 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n      if ( v9 != 0 )\n      {\n        sub_1400229E0(*a1, (int)v28, 140, 3, (wchar_t *)L\"Loaded dependency module %ls\", v2);\n      }\n      else\n      {\n        v10 = *a1;\n        LastError = GetLastError();\n        v12 = v30;\n        if ( v31 > 7 )\n          LOBYTE(v12) = v30[0];\n        v22 = LastError;\n        sub_1400229E0(v10, (int)v28, 144, 1, (wchar_t *)L\"Failed to load dependency %ls. Error %u\", (char)v12);\n        v13 = GetLastError();\n        v14 = v30;\n        if ( v31 > 7 )\n          v14 = *(char **)v30;\n        sub_140007F90(0x1Du, L\"Failed to load dependency %ls. Error %u\", v14, v13);\n      }\n    }\n    __unwind\n    {\n      sub_140002470(v30);\n    }\n    if ( v31 > 7 )\n    {\n      v15 = *(char **)v30;\n      if ( 2 * v31 + 2 >= 0x1000 )\n      {\n        v15 = *(char **)(*(_QWORD *)v30 - 8LL);\n        if ( (unsigned __int64)(*(_QWORD *)v30 - (_QWORD)v15 - 8LL) > 0x1F )\n          invalid_parameter_noinfo_noreturn();\n      }\n      j_j_free_0(v15);\n    }\n  }\n  catch ( const nvc::ConfigErrorException *v26 )\n  {\n    *(__m128i *)v28 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n    strcpy(v29, \"lperWin32.cpp\");\n    v17 = v26;\n    v18 = (_QWORD *)((char *)v26 + 24);\n    if ( *((_QWORD *)v26 + 6) > 0xFu )\n      v18 = (_QWORD *)*v18;\n    sub_140022750(*v24, (int)v28, 149, 1, \"%s\", (char)v18);\n    v19 = (char *)v17 + 24;\n    if ( *((_QWORD *)v17 + 6) > 0xFu )\n      v19 = *(const char **)v19;\n    sub_140007ED0(0x1Fu, \"%s\", v19);\n    return v23;\n  }\n  catch ( const std::exception *v27 )\n  {\n    *(__m128i *)v28 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n    strcpy(v29, \"lperWin32.cpp\");\n    v20 = *v24;\n    (*(void (__fastcall **)(const std::exception *))(*(_QWORD *)v27 + 8LL))(v27);\n    sub_140005CE0((__int64)&v32);\n    __wind\n    {\n      sub_1400229E0(\n        v20,\n        (unsigned int)&v21 + 104,\n        153,\n        2,\n        (wchar_t *)L\"Skipping loading dependency module %ls, reason: %ls\",\n        v25);\n    }\n    __unwind\n    {\n      sub_140002470(&v32);\n    }\n    if ( si128.m128i_i64[1] > 7uLL )\n      std::wstring::_Deallocate_for_capacity((__int64)&v32, (void *)v32, si128.m128i_i64[1]);\n    return v23;\n  }\n  return v9;\n}\n\n\n"
  },
  {
    "chapter": "containers",
    "module": "NvContainer\\nvcontainer.exe",
    "sha256": "0f0a5352c50d4701d629e7c88a7a45632e76217bdc8e21569af5d2ab3c345817",
    "va": "0x140013ec0",
    "rva": "0x13ec0",
    "function": "sub_140013EC0",
    "pseudocode": " \n_BOOL8 __fastcall sub_140013EC0(__int64 *a1, WCHAR *a2, __int64 *a3)\n{\n  __int64 *v3; \n  WCHAR *v4; \n  char v6; \n  DWORD LastError; \n  DWORD CurrentDirectoryW; \n  int v10; \n  HINSTANCE Library; \n  int StringW; \n  __int64 v13; \n  __int64 v14; \n  wchar_t *v15; \n  unsigned __int64 v16; \n  char *v17; \n  char *v18; \n  __int64 v19; \n  wchar_t *v20; \n  __int64 v21; \n  wchar_t *v22; \n  char *v23; \n  __int64 v24; \n  __int64 v25; \n  wchar_t *v26; \n  char *v27; \n  HMODULE *i; \n  bool v29; \n  char *v30; \n  _BOOL8 result; \n  __int64 v32; \n  char v33; \n  __int64 v34; \n  char v35; \n  DWORD dwErrCode; \n  __int16 v37[2]; \n  UINT uMode; \n  void *Block[2]; \n  char *v40; \n  __int128 v41; \n  wchar_t *v42; \n  WCHAR v43[4]; \n  wchar_t *Context; \n  WCHAR *v45; \n  __int64 v46; \n  __int64 *v47; \n  __int64 *v48; \n  HMODULE hLibModule; \n  __int64 *v50; \n  const std::exception *v51; \n  int v52[4]; \n  char v53[16]; \n  wchar_t Delimiter[4]; \n  WCHAR Buffer[264]; \n\n  v3 = a3;\n  v47 = a3;\n  v4 = a2;\n  v45 = a2;\n  v48 = a1;\n  v50 = a3;\n  uMode = GetErrorMode();\n  SetErrorMode(uMode | 1);\n  v6 = 1;\n  v35 = 1;\n  *(_OWORD *)Block = 0;\n  v40 = nullptr;\n  LastError = 0;\n  dwErrCode = 0;\n  if ( PathIsRelativeW(v4) )\n  {\n    CurrentDirectoryW = GetCurrentDirectoryW(0x104u, Buffer);\n    if ( CurrentDirectoryW != 0 )\n    {\n      wcscat_s(Buffer, 0x104u, ::Delimiter);\n      wcscat_s(Buffer, 0x104u, v4);\n      v4 = Buffer;\n      v45 = Buffer;\n    }\n  }\n  __wind\n  {\n    __wind\n    {\n      v10 = sub_14001E730();\n      Library = LoadLibraryExW(v4, nullptr, 2u);\n      hLibModule = Library;\n      if ( Library != nullptr )\n      {\n        if ( a1[6] != 0 )\n          *(_DWORD *)(a1[6] + 60) = sub_14001E730() - v10;\n        *(_QWORD *)v43 = 0;\n        StringW = LoadStringW(Library, 0x29BBu, v43, 0);\n        if ( StringW != 0 )\n        {\n          try\n          {\n            v13 = *(_QWORD *)v43;\n            v14 = *(_QWORD *)v43 + 2LL * StringW;\n            v41 = 0;\n            v15 = nullptr;\n            v42 = nullptr;\n            v16 = (2LL * StringW) >> 1;\n            v17 = nullptr;\n            v18 = nullptr;\n            if ( v16 != 0 )\n            {\n              if ( v16 > 0x7FFFFFFFFFFFFFFFLL )\n                unknown_libname_55(0x7FFFFFFFFFFFFFFFLL, 0);\n              _mm_lfence();\n              v19 = v16;\n              v20 = (wchar_t *)sub_1400035E0(2 * v16);\n              *(_QWORD *)&v41 = v20;\n              v15 = &v20[v19];\n              v42 = &v20[v19];\n              v21 = v14 - v13;\n              sub_140122450(v20, v13, v21);\n              v21 >>= 1;\n              v17 = (char *)&v20[v21];\n              *((_QWORD *)&v41 + 1) = v17;\n              v18 = (char *)&v20[v19];\n              LastError = dwErrCode;\n            }\n            else\n            {\n              v20 = (wchar_t *)v41;\n            }\n            __wind\n            {\n              v37[0] = 0;\n              if ( v17 == v18 )\n              {\n                sub_140012410((char **)&v41, v17, v37);\n                v15 = v42;\n                v20 = (wchar_t *)v41;\n              }\n              else\n              {\n                *(_WORD *)v17 = 0;\n                *((_QWORD *)&v41 + 1) = v17 + 2;\n              }\n              wcscpy(Delimiter, L\",; \");\n              Context = nullptr;\n              v22 = wcstok_s(v20, Delimiter, &Context);\n              v23 = (char *)Block[1];\n              while ( 1 )\n              {\n                v24 = (__int64)v22;\n                if ( v22 == nullptr )\n                  break;\n                if ( GetModuleHandleW(v22) != nullptr )\n                {\n                  *(__m128i *)v52 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n                  strcpy(v53, \"lperWin32.cpp\");\n                  sub_1400229E0(*a1, (int)v52, 216, 3, (wchar_t *)L\"Dependency module %ls has been loaded already\", v24);\n                  v22 = wcstok_s(nullptr, Delimiter, &Context);\n                }\n                else\n                {\n                  v25 = sub_140013970(a1, v24);\n                  v46 = v25;\n                  if ( v25 == 0 )\n                  {\n                    v35 = 0;\n                    LastError = GetLastError();\n                    dwErrCode = LastError;\n                    *(__m128i *)v52 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n                    strcpy(v53, \"lperWin32.cpp\");\n                    sub_140022750(*a1, (int)v52, 226, 1, \"Dependency module load failed\", LastError);\n                    goto LABEL_53;\n                  }\n                  if ( v23 == v40 )\n                  {\n                    sub_1400122B0((char **)Block, v23, &v46);\n                    v23 = (char *)Block[1];\n                  }\n                  else\n                  {\n                    *(_QWORD *)v23 = v25;\n                    v23 += 8;\n                    Block[1] = v23;\n                  }\n                  v22 = wcstok_s(nullptr, Delimiter, &Context);\n                }\n              }\n            }\n            __unwind\n            {\n              sub_140012F40((__int64)&v41);\n            }\nLABEL_53:\n            if ( v20 != nullptr )\n            {\n              v26 = v20;\n              if ( (unsigned __int64)(2 * (v15 - v20)) >= 0x1000 )\n              {\n                v20 = *((wchar_t **)v20 - 1);\n                if ( (unsigned __int64)((char *)v26 - (char *)v20 - 8) > 0x1F )\n                  invalid_parameter_noinfo_noreturn();\n              }\n              j_j_free_0(v20);\n            }\n            v4 = v45;\n            v6 = v35;\n            v3 = v47;\n          }\n          catch ( const std::exception *v51 )\n          {\n            dwErrCode = GetLastError();\n            *(__m128i *)v52 = _mm_load_si128((const __m128i *)&xmmword_14012FE50);\n            strcpy(v53, \"lperWin32.cpp\");\n            v32 = *v48;\n            v33 = (*(__int64 (__fastcall **)(const std::exception *))(*(_QWORD *)v51 + 8LL))(v51);\n            sub_140022750(v32, (unsigned int)&v34 + 184, 240, 1, \"Dependency module load exception\", v33);\n            FreeLibrary(hLibModule);\n            v23 = (char *)Block[1];\n            LastError = dwErrCode;\n            v3 = v50;\n            goto LABEL_37;\n          }\n        }\n        else\n        {\n          v23 = (char *)Block[1];\n        }\n        FreeLibrary(Library);\n        if ( v6 == 0 )\n          goto LABEL_37;\n      }\n      else\n      {\n        v23 = (char *)Block[1];\n      }\n      *v3 = sub_140013C10(a1, v4, 1);\nLABEL_37:\n      SetErrorMode(uMode);\n      v27 = (char *)Block[0];\n      for ( i = (HMODULE *)Block[0]; i != (HMODULE *)v23; ++i )\n        FreeLibrary(*i);\n      v29 = *v3 != 0;\n      if ( LastError != 0 )\n        SetLastError(LastError);\n      if ( v27 != nullptr )\n      {\n        v30 = v27;\n        if ( ((v40 - v27) & 0xFFFFFFFFFFFFFFF8uLL) >= 0x1000 )\n        {\n          v27 = *((char **)v27 - 1);\n          if ( (unsigned __int64)(v30 - v27 - 8) > 0x1F )\n            invalid_parameter_noinfo_noreturn();\n        }\n        j_j_free_0(v27);\n      }\n      result = v29;\n    }\n    __unwind\n    {\n      sub_140012FC0(&dwErrCode);\n    }\n  }\n  __unwind\n  {\n    sub_140012EE0((__int64)Block);\n  }\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "telemetry",
    "module": "NvTelemetry\\NvTelemetryAPI64.dll",
    "sha256": "ab5455ea4ae1780b9badb809f0a6ead682b8d9e34f1c9c36252b906c697737f4",
    "va": "0x180110550",
    "rva": "0x110550",
    "function": "InitializeTelemetry",
    "pseudocode": " \n\n__int64 InitializeTelemetry()\n{\n  unsigned int v0; \n  __int64 v1; \n  __int64 v2; \n  __int64 v3; \n  __int64 result; \n  _QWORD v5[4]; \n  __int64 v6; \n  _BYTE v7[48]; \n\n  v7[32] = 0;\n  LOBYTE(v6) = 0;\n  try\n  {\n    __wind\n    {\n      __wind\n      {\n        v0 = sub_18010F2E0((__int64)v5, (__int64)v7);\n        sub_180112EB0(v5);\n        sub_180112EB0(v7);\n        result = v0;\n      }\n      __unwind\n      {\n        ((void (__fastcall *)(_QWORD *, __int64, __int64, __int64))sub_1801105A0)(v5, v1, v2, v3);\n      }\n    }\n    __unwind\n    {\n      ((void (__fastcall *)(_BYTE *, __int64, __int64, __int64, _QWORD, _QWORD, _QWORD, _QWORD, __int64))sub_1801105A0)(\n        v7,\n        v1,\n        v2,\n        v3,\n        v5[0],\n        v5[1],\n        v5[2],\n        v5[3],\n        v6);\n    }\n  }\n  catch ( ... )\n  {\n    sub_180118998();\n  }\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "telemetry",
    "module": "NvTelemetry\\NvTelemetryAPI64.dll",
    "sha256": "ab5455ea4ae1780b9badb809f0a6ead682b8d9e34f1c9c36252b906c697737f4",
    "va": "0x180110700",
    "rva": "0x110700",
    "function": "InitializeTelemetry_2",
    "pseudocode": " \n__int64 __fastcall InitializeTelemetry_2(__int64 a1, __int64 a2)\n{\n  __int64 v3; \n  __int64 v4; \n  unsigned int v5; \n  __int64 result; \n  __int64 v7; \n  __int64 v8; \n  __int64 v9; \n  __int64 v10; \n  __int64 v11; \n  __int64 v12; \n  __int64 v13; \n  __int64 v14; \n  __int64 v15; \n  __int64 v16; \n  __int64 v17; \n  __int64 v18; \n  __int64 v19; \n  __int64 v20; \n  __int64 v21; \n  __int64 v22; \n  __int64 v23; \n  __int64 v24; \n  __int64 v25[4]; \n  __int64 v26[4]; \n  _QWORD v27[4]; \n  char v28; \n  _QWORD v29[4]; \n  char v30; \n  _BYTE pExceptionObject[24]; \n  _BYTE v32[24]; \n  _BYTE v33[256]; \n  int v34; \n\n  if ( a1 == 0 )\n  {\n    sub_1803348E0(v33, 0, 248);\n    __eh34_enter_try_state(-1, 0);\n    v7 = sub_1801109E0(v33);\n    __eh34_enter_wind_state(0, 1);\n    v8 = sub_1801167D0(v7, \"Invalid argument. \");\n    v9 = sub_1801167F0(v8);\n    v10 = sub_180116820(v9, sub_18010E9B0);\n    v11 = sub_180116850(v10);\n    v12 = sub_1801167D0(\n            v11,\n            \"C:\\\\dvs\\\\p4\\\\build\\\\sw\\\\gcomp\\\\rel\\\\src\\\\NvTelemetry\\\\NvTelemetryAPI\\\\src\\\\NvTelemetryAPI.cpp\");\n    v13 = sub_1801167D0(v12, \":\");\n    v34 = 102;\n    v14 = sub_180116880(v13, &v34);\n    v15 = sub_1801167D0(v14, \"]\");\n    std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::str(v15, (__int64)v25);\n    __eh34_enter_wind_state(1, 2);\n    sub_18010DE40((__int64)pExceptionObject, v25);\n    throw (std::invalid_argument *)pExceptionObject;\n  }\n  __eh34_enter_try_state(-1, 0);\n  if ( a2 == 0 )\n  {\n    sub_1803348E0(v33, 0, 248);\n    v16 = sub_1801109E0(v33);\n    __eh34_enter_wind_state(0, 1);\n    v17 = sub_1801167D0(v16, \"Invalid argument. \");\n    v18 = sub_1801167F0(v17);\n    v19 = sub_180116820(v18, sub_18010E9B0);\n    v20 = sub_180116850(v19);\n    v21 = sub_1801167D0(\n            v20,\n            \"C:\\\\dvs\\\\p4\\\\build\\\\sw\\\\gcomp\\\\rel\\\\src\\\\NvTelemetry\\\\NvTelemetryAPI\\\\src\\\\NvTelemetryAPI.cpp\");\n    v22 = sub_1801167D0(v21, \":\");\n    v34 = 103;\n    v23 = sub_180116880(v22, &v34);\n    v24 = sub_1801167D0(v23, \"]\");\n    std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::str(v24, (__int64)v25);\n    __eh34_enter_wind_state(1, 2);\n    sub_18010DE40((__int64)v32, v25);\n    throw (std::invalid_argument *)v32;\n  }\n  v3 = -1;\n  v4 = -1;\n  do\n    ++v4;\n  while ( *(_WORD *)(a2 + 2 * v4) != 0 );\n  memset(v26, 0, sizeof(v26));\n  sub_180116B50(v26, a2);\n  qmemcpy(v29, v26, sizeof(v29));\n  *(__m128i *)&v26[2] = _mm_load_si128((const __m128i *)&xmmword_180447800);\n  LOWORD(v26[0]) = 0;\n  v30 = 1;\n  do\n    ++v3;\n  while ( *(_WORD *)(a1 + 2 * v3) != 0 );\n  __wind\n  {\n    __wind\n    {\n      memset(v25, 0, sizeof(v25));\n      sub_180116B50(v25, a1);\n      __wind\n      {\n        __wind\n        {\n          qmemcpy(v27, v25, sizeof(v27));\n          *(__m128i *)&v25[2] = _mm_load_si128((const __m128i *)&xmmword_180447800);\n          LOWORD(v25[0]) = 0;\n          v28 = 1;\n          v5 = sub_18010F2E0((__int64)v27, (__int64)v29);\n          sub_180112EB0(v27);\n          sub_180112EB0(v29);\n          result = v5;\n        }\n        __unwind\n        {\n          sub_1801105A0((__int64)v27);\n        }\n      }\n      __unwind\n      {\n        sub_18010EFA0(v25);\n      }\n    }\n    __unwind\n    {\n      sub_1801105A0((__int64)v29);\n    }\n  }\n  __unwind\n  {\n    sub_18010EFA0(v26);\n  }\n  if ( __eh34_catch(0) )\n  {\n    if ( __eh34_catch_ellipsis(0) )\n      sub_180118998();\n  }\n  __eh34_exit_try_state(0, -1);\n  return result;\n}\n\n\n"
  },
  {
    "chapter": "telemetry",
    "module": "NvTelemetry\\NvTelemetryAPI64.dll",
    "sha256": "ab5455ea4ae1780b9badb809f0a6ead682b8d9e34f1c9c36252b906c697737f4",
    "va": "0x180111840",
    "rva": "0x111840",
    "function": "GetUserTelemetryConsent",
    "pseudocode": " \n__int64 __fastcall GetUserTelemetryConsent(__int64 a1, __int64 a2)\n{\n  int v4; \n  char v5; \n  int v7; \n  char v8; \n\n  if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n    std::_Throw_Cpp_error(5);\n  if ( dword_180478B9C == 0x7FFFFFFF )\n  {\n    dword_180478B9C = 2147483646;\n    std::_Throw_Cpp_error(6);\n  }\n  while ( byte_180478C34 != 0 || dword_180478C30 == -1 )\n    sub_180144B2C(&unk_180478BE8, &unk_180478B50);\n  ++dword_180478C30;\n  Mtx_unlock((_Mtx_t)&unk_180478B50);\n  if ( qword_180478D80 != 0 )\n  {\n    (*(void (__fastcall **)(_QWORD, __int64, __int64))(**(_QWORD **)(qword_180478D80 + 424) + 64LL))(\n      *(_QWORD *)(qword_180478D80 + 424),\n      a1,\n      a2);\n    if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n      std::_Throw_Cpp_error(5);\n    if ( dword_180478B9C == 0x7FFFFFFF )\n    {\n      dword_180478B9C = 2147483646;\n      std::_Throw_Cpp_error(6);\n    }\n    v7 = --dword_180478C30;\n    v8 = byte_180478C34;\n    Mtx_unlock((_Mtx_t)&unk_180478B50);\n    if ( v8 != 0 )\n    {\n      if ( v7 == 0 )\n        sub_180144A44(&unk_180478BA0);\n    }\n    else if ( v7 == -2 )\n    {\n      sub_180144A20(&unk_180478BE8);\n    }\n    return 0;\n  }\n  else\n  {\n    if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n      std::_Throw_Cpp_error(5);\n    if ( dword_180478B9C == 0x7FFFFFFF )\n    {\n      dword_180478B9C = 2147483646;\n      std::_Throw_Cpp_error(6);\n    }\n    v4 = --dword_180478C30;\n    v5 = byte_180478C34;\n    Mtx_unlock((_Mtx_t)&unk_180478B50);\n    if ( v5 != 0 )\n    {\n      if ( v4 == 0 )\n        sub_180144A44(&unk_180478BA0);\n    }\n    else if ( v4 == -2 )\n    {\n      sub_180144A20(&unk_180478BE8);\n    }\n    return 2147947423LL;\n  }\n}\n\n\n"
  },
  {
    "chapter": "telemetry",
    "module": "NvTelemetry\\NvTelemetryAPI64.dll",
    "sha256": "ab5455ea4ae1780b9badb809f0a6ead682b8d9e34f1c9c36252b906c697737f4",
    "va": "0x180111c60",
    "rva": "0x111c60",
    "function": "GetDeviceTelemetryConsent",
    "pseudocode": " \n__int64 __fastcall GetDeviceTelemetryConsent(__int64 a1, __int64 a2)\n{\n  int v4; \n  char v5; \n  int v7; \n  char v8; \n\n  if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n    std::_Throw_Cpp_error(5);\n  if ( dword_180478B9C == 0x7FFFFFFF )\n  {\n    dword_180478B9C = 2147483646;\n    std::_Throw_Cpp_error(6);\n  }\n  while ( byte_180478C34 != 0 || dword_180478C30 == -1 )\n    sub_180144B2C(&unk_180478BE8, &unk_180478B50);\n  ++dword_180478C30;\n  Mtx_unlock((_Mtx_t)&unk_180478B50);\n  if ( qword_180478D80 != 0 )\n  {\n    (*(void (__fastcall **)(_QWORD, __int64, __int64))(**(_QWORD **)(qword_180478D80 + 424) + 80LL))(\n      *(_QWORD *)(qword_180478D80 + 424),\n      a1,\n      a2);\n    if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n      std::_Throw_Cpp_error(5);\n    if ( dword_180478B9C == 0x7FFFFFFF )\n    {\n      dword_180478B9C = 2147483646;\n      std::_Throw_Cpp_error(6);\n    }\n    v7 = --dword_180478C30;\n    v8 = byte_180478C34;\n    Mtx_unlock((_Mtx_t)&unk_180478B50);\n    if ( v8 != 0 )\n    {\n      if ( v7 == 0 )\n        sub_180144A44(&unk_180478BA0);\n    }\n    else if ( v7 == -2 )\n    {\n      sub_180144A20(&unk_180478BE8);\n    }\n    return 0;\n  }\n  else\n  {\n    if ( (unsigned int)sub_1801455D4(&unk_180478B50) != 0 )\n      std::_Throw_Cpp_error(5);\n    if ( dword_180478B9C == 0x7FFFFFFF )\n    {\n      dword_180478B9C = 2147483646;\n      std::_Throw_Cpp_error(6);\n    }\n    v4 = --dword_180478C30;\n    v5 = byte_180478C34;\n    Mtx_unlock((_Mtx_t)&unk_180478B50);\n    if ( v5 != 0 )\n    {\n      if ( v4 == 0 )\n        sub_180144A44(&unk_180478BA0);\n    }\n    else if ( v4 == -2 )\n    {\n      sub_180144A20(&unk_180478BE8);\n    }\n    return 2147947423LL;\n  }\n}\n\n\n"
  }
]
