Newer
Older
AMI-Aptio-BIOS-Reversed / SmbiosDataUpdateDxeNeonCityEPRP / SmbiosDataUpdateDxe_decompiled.c
@Ajax Dong Ajax Dong 2 days ago 57 KB Init
// Function: 0x370 - EFI_STATUS
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  double v2; // xmm2_8
  __int64 v4; // rdx

  UefiDriverEntryPoint((__int64)ImageHandle, SystemTable); /*0x379*/
  return SmbiosDataUpdateEntry(ImageHandle, v4, v2); /*0x386*/
}
// Function: 0x38C - __int64 __
__int64 __fastcall UefiDriverEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  __int64 v3; // rax
  __int64 v4; // rax
  __int64 v5; // rax
  __int64 result; // rax
  __int64 v7; // rbx

  ::ImageHandle = ImageHandle; /*0x3a1*/
  if ( !ImageHandle ) /*0x3b5*/
    AssertReport( /*0x3c4*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      51,
      (__int64)"gImageHandle != ((void *) 0)");
  ::SystemTable = (__int64)SystemTable; /*0x3c9*/
  if ( !SystemTable ) /*0x3d3*/
    AssertReport( /*0x3e2*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      57,
      (__int64)"gST != ((void *) 0)");
  BootServices = (__int64)SystemTable->BootServices; /*0x3eb*/
  if ( !BootServices ) /*0x3f5*/
    AssertReport( /*0x404*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
      63,
      (__int64)"gBS != ((void *) 0)");
  RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x40d*/
  if ( !RuntimeServices ) /*0x417*/
    AssertReport( /*0x42a*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
      47,
      (__int64)"gRT != ((void *) 0)");
  GetHobList(); /*0x42f*/
  v3 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3890, 0, &qword_3928); /*0x44b*/
  if ( v3 < 0 ) /*0x46e*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0x478*/
    AssertReport( /*0x488*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      88,
      (__int64)"!EFI_ERROR (Status)");
  }
  v4 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3880, 0, &qword_3948); /*0x4a4*/
  if ( v4 < 0 ) /*0x4ad*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0x4b8*/
    AssertReport( /*0x4c8*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      94,
      (__int64)"!EFI_ERROR (Status)");
  }
  v5 = (*(__int64 (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_3860, 0, &unk_3938); /*0x4e4*/
  if ( v5 < 0 ) /*0x4ed*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0x4f8*/
    AssertReport( /*0x508*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
      100,
      (__int64)"!EFI_ERROR (Status)");
  }
  (*(void (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_38C0, 0, &unk_3930); /*0x524*/
  (*(void (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_3870, 0, &unk_3940); /*0x541*/
  result = EfiGetSystemConfigurationTable(&TableGuid__0, (void **)&Table__0); /*0x555*/
  v7 = result; /*0x55a*/
  if ( result < 0 ) /*0x560*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x56b*/
    result = AssertReport( /*0x57f*/
               (__int64)"e:\\hs\\MdePkg\\Library\\DxeServicesTableLib\\DxeServicesTableLib.c",
               64,
               (__int64)"!EFI_ERROR (Status)");
  }
  if ( !Table__0 ) /*0x58c*/
    result = AssertReport( /*0x5a1*/
               (__int64)"e:\\hs\\MdePkg\\Library\\DxeServicesTableLib\\DxeServicesTableLib.c",
               65,
               (__int64)"gDS != ((void *) 0)");
  if ( v7 < 0 ) /*0x5a9*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0x5b4*/
    result = AssertReport( /*0x5c8*/
               (__int64)"e:\\hs\\Build\\HR6N0XMLK\\DEBUG_VS2015\\X64\\PurleyRpPkg\\Uba\\UbaMain\\Dxe\\TypeNeonCityEPRP\\S"
                        "mbiosDataUpdateDxe\\SmbiosDataUpdateDxe\\DEBUG\\AutoGen.c",
               295,
               (__int64)"!EFI_ERROR (Status)");
  }
  if ( !qword_3980 ) /*0x5d5*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31D0, 0, &qword_3980); /*0x5ee*/
    if ( result < 0 ) /*0x5f7*/
    {
      DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x602*/
      result = AssertReport( /*0x616*/
                 (__int64)"e:\\hs\\CpRcPkg\\Library\\DxeMmPciBaseLib\\DxeMmPciBaseLib.c",
                 52,
                 (__int64)"!EFI_ERROR (Status)");
    }
    if ( !qword_3980 ) /*0x623*/
      return AssertReport( /*0x638*/
               (__int64)"e:\\hs\\CpRcPkg\\Library\\DxeMmPciBaseLib\\DxeMmPciBaseLib.c",
               53,
               (__int64)"mPciUsra != ((void *) 0)");
  }
  return result; /*0x64c*/
}
// Function: 0x654 - __int64 __
__int64 __fastcall SmbiosDataUpdateEntry(EFI_HANDLE ImageHandle, __int64 a2, double a3)
{
  __int64 result; // rax
  __int64 v4; // rbx
  __int64 v5; // rax
  _DWORD Buffer[4]; // [rsp+20h] [rbp-28h] BYREF
  __int64 (*SmbiosDataUpdateCallback_1)(); // [rsp+30h] [rbp-18h]
  EFI_HANDLE ImageHandle_1; // [rsp+50h] [rbp+8h] BYREF
  __int64 v9; // [rsp+58h] [rbp+10h] BYREF

  v9 = a2; /*0x654*/
  ImageHandle_1 = ImageHandle; /*0x671*/
  result = (*(__int64 (__fastcall **)(EFI_HANDLE, void *, __int64 *))(BootServices + 152))(ImageHandle, &unk_31A0, &v9); /*0x676*/
  if ( result >= 0 ) /*0x67f*/
  {
    v4 = *(_QWORD *)(v9 + 32); /*0x696*/
    DebugPrintAssertLog(0x80000000LL, "UBA:SmbiosDataUpdateEntry Image GUID=%g\n", a3); /*0x69e*/
    CopyGuid(&DestinationGuid_, (const GUID *)(v4 + 4)); /*0x6ae*/
    qword_38F0 = (__int64)HiiAddPackages(&DestinationGuid_, &ImageHandle_1, &unk_31F0, 0); /*0x6ce*/
    if ( !qword_38F0 ) /*0x6d8*/
      AssertReport( /*0x6ed*/
        (__int64)"e:\\hs\\PurleyRpPkg\\Uba\\UbaMain\\Dxe\\TypeNeonCityEPRP\\SmbiosDataUpdateDxe\\SmbiosDataUpdateDxe.c",
        625,
        (__int64)"gSmbiosStringPackHandle != ((void *) 0)");
    ZeroMem(Buffer, 0x18u); /*0x6fe*/
    Buffer[3] = 0; /*0x703*/
    Buffer[2] = 0; /*0x70f*/
    SmbiosDataUpdateCallback_1 = SmbiosDataUpdateCallback; /*0x714*/
    v5 = qword_3960; /*0x719*/
    if ( !qword_3960 ) /*0x723*/
    {
      result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31E0, 0, &qword_3960); /*0x73c*/
      if ( result < 0 ) /*0x745*/
        return result; /*0x745*/
      v5 = qword_3960; /*0x747*/
    }
    Buffer[0] = 1112363856; /*0x751*/
    Buffer[1] = 1; /*0x75e*/
    return (*(__int64 (__fastcall **)(__int64, void *, _DWORD *, __int64))(v5 + 16))(v5, &unk_38E0, Buffer, 24); /*0x770*/
  }
  return result; /*0x773*/
}
// Function: 0xF54 - __int64 Sm
__int64 SmbiosDataUpdateCallback()
{
  void *ZeroPool; // rbx
  unsigned __int64 i; // rdi
  __int64 v2; // rdx
  unsigned __int64 j; // rdi
  __int64 v4; // rdx
  unsigned __int64 k; // rdi
  __int64 v6; // rdx
  __int64 updated; // rsi

  ZeroPool = AllocateZeroPool(0x300u); /*0xf74*/
  for ( i = 0; i < 0x1E; ++i ) /*0xf77*/
  {
    ZeroMem(ZeroPool, 0x300u); /*0xf84*/
    if ( UpdateSmbiosType9SystemSlots((__int64)ZeroPool, v2, i) >= 0 ) /*0xf97*/
      UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0xf9c*/
  }
  UbaSmbiosDeleteAllKeysOfType(9); /*0xfac*/
  for ( j = 0; j < 8; ++j ) /*0xfb1*/
  {
    ZeroMem(ZeroPool, 0x300u); /*0xfbe*/
    if ( UpdateSmbiosType41OnboardDevices((__int64)ZeroPool, v4, j) >= 0 ) /*0xfd1*/
      UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0xfd6*/
  }
  UbaSmbiosDeleteAllKeysOfType(41); /*0xfe6*/
  for ( k = 0; k < 4; ++k ) /*0xfeb*/
  {
    ZeroMem(ZeroPool, 0x300u); /*0xff8*/
    updated = UpdateSmbiosTypeUnknownExtended((__int64)ZeroPool, v6, k); /*0x1008*/
    if ( updated >= 0 ) /*0x100e*/
      updated = UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0x1018*/
  }
  AllocateZeroPool_1(ZeroPool); /*0x1027*/
  return updated; /*0x103e*/
}
// Function: 0x77C - __int64 __
__int64 __fastcall UpdateSmbiosType9SystemSlots(_WORD *ZeroPool, __int64 a2, const CHAR8 *i)
{
  unsigned __int64 v4; // rbx
  char v5; // cl
  unsigned __int8 v6; // si
  unsigned __int8 v7; // r14
  EFI_STRING_ID StringId; // dx
  char v9; // cl
  EFI_STRING Buffer_2; // rax
  __int64 v11; // rdx
  EFI_STRING Buffer; // rdi
  unsigned __int64 v13; // r8
  EFI_STRING_ID StringId_1; // dx
  EFI_STRING Buffer_3; // rax
  __int64 v16; // rdx
  EFI_STRING Buffer_1; // rbx
  int n2; // [rsp+20h] [rbp-99h]
  int n134283264; // [rsp+24h] [rbp-95h]
  _BYTE v20[2]; // [rsp+28h] [rbp-91h]
  int n3; // [rsp+2Ah] [rbp-8Fh]
  int n134283264_1; // [rsp+2Eh] [rbp-8Bh]
  char n8; // [rsp+32h] [rbp-87h]
  int n4; // [rsp+34h] [rbp-85h]
  int n302055424; // [rsp+38h] [rbp-81h]
  char n16; // [rsp+3Ch] [rbp-7Dh]
  int n5; // [rsp+3Eh] [rbp-7Bh]
  int n302055424_1; // [rsp+42h] [rbp-77h]
  char n16_1; // [rsp+46h] [rbp-73h]
  int n6; // [rsp+48h] [rbp-71h]
  int n302055424_2; // [rsp+4Ch] [rbp-6Dh]
  char n16_2; // [rsp+50h] [rbp-69h]
  int n7; // [rsp+52h] [rbp-67h]
  int n117506048; // [rsp+56h] [rbp-63h]
  char n28; // [rsp+5Ah] [rbp-5Fh]
  int n8_1; // [rsp+5Ch] [rbp-5Dh]
  int n117506048_1; // [rsp+60h] [rbp-59h]
  char n28_1; // [rsp+64h] [rbp-55h]
  int n9; // [rsp+66h] [rbp-53h]
  int n184614912; // [rsp+6Ah] [rbp-4Fh]
  char n31; // [rsp+6Eh] [rbp-4Bh]
  int n10; // [rsp+70h] [rbp-49h]
  int n184614912_1; // [rsp+74h] [rbp-45h]
  char n31_1; // [rsp+78h] [rbp-41h]
  int n11; // [rsp+7Ah] [rbp-3Fh]
  int n184614912_2; // [rsp+7Eh] [rbp-3Bh]
  char n31_2; // [rsp+82h] [rbp-37h]
  int n12; // [rsp+84h] [rbp-35h]
  int n4609; // [rsp+88h] [rbp-31h]
  char n16_3; // [rsp+8Ch] [rbp-2Dh]
  int n13; // [rsp+8Eh] [rbp-2Bh]
  int n4609_1; // [rsp+92h] [rbp-27h]
  char n16_4; // [rsp+96h] [rbp-23h]
  int n14; // [rsp+98h] [rbp-21h]
  int n65281; // [rsp+9Ch] [rbp-1Dh]
  char v56; // [rsp+A0h] [rbp-19h]
  int n15; // [rsp+A2h] [rbp-17h]
  int n8705; // [rsp+A6h] [rbp-13h]
  char n32; // [rsp+AAh] [rbp-Fh]
  int n16_5; // [rsp+ACh] [rbp-Dh]
  int n8705_1; // [rsp+B0h] [rbp-9h]
  char n32_1; // [rsp+B4h] [rbp-5h]
  int n17; // [rsp+B6h] [rbp-3h]
  int n8705_2; // [rsp+BAh] [rbp+1h]
  char n32_2; // [rsp+BEh] [rbp+5h]
  int n18; // [rsp+C0h] [rbp+7h]
  int n8705_3; // [rsp+C4h] [rbp+Bh]
  char n32_3; // [rsp+C8h] [rbp+Fh]
  int n19; // [rsp+CAh] [rbp+11h]
  int n8705_4; // [rsp+CEh] [rbp+15h]
  char n32_4; // [rsp+D2h] [rbp+19h]
  int n20; // [rsp+D4h] [rbp+1Bh]
  int n8705_5; // [rsp+D8h] [rbp+1Fh]
  char n32_5; // [rsp+DCh] [rbp+23h]
  int n21; // [rsp+DEh] [rbp+25h]
  int n8705_6; // [rsp+E2h] [rbp+29h]
  char n32_6; // [rsp+E6h] [rbp+2Dh]
  int n22; // [rsp+E8h] [rbp+2Fh]
  int n8705_7; // [rsp+ECh] [rbp+33h]
  char n33; // [rsp+F0h] [rbp+37h]
  _BYTE *ZeroPool_1; // [rsp+120h] [rbp+67h]

  ZeroPool_1 = ZeroPool; /*0x78b*/
  n2 = 2; /*0x7a5*/
  n134283264 = 134283264; /*0x7ad*/
  v20[0] = 8; /*0x7b5*/
  n3 = 3; /*0x7ba*/
  n134283264_1 = 134283264; /*0x7c6*/
  n8 = 8; /*0x7d2*/
  n4 = 4; /*0x7da*/
  n302055424 = 302055424; /*0x7e2*/
  n16 = 16; /*0x7ea*/
  n5 = 5; /*0x7ee*/
  n302055424_1 = 302055424; /*0x7f5*/
  n16_1 = 16; /*0x7fc*/
  n6 = 6; /*0x800*/
  n302055424_2 = 302055424; /*0x807*/
  n16_2 = 16; /*0x80e*/
  n7 = 7; /*0x812*/
  n117506048 = 117506048; /*0x819*/
  n28 = 28; /*0x820*/
  n8_1 = 8; /*0x824*/
  n117506048_1 = 117506048; /*0x828*/
  n28_1 = 28; /*0x82f*/
  n9 = 9; /*0x833*/
  n184614912 = 184614912; /*0x836*/
  n31 = 31; /*0x83d*/
  n10 = 10; /*0x841*/
  n184614912_1 = 184614912; /*0x848*/
  n31_1 = 31; /*0x84f*/
  n11 = 11; /*0x853*/
  n184614912_2 = 184614912; /*0x85a*/
  n31_2 = 31; /*0x861*/
  n12 = 12; /*0x865*/
  n4609 = 4609; /*0x86c*/
  n16_3 = 16; /*0x873*/
  n13 = 13; /*0x877*/
  n4609_1 = 4609; /*0x87e*/
  n16_4 = 16; /*0x885*/
  n14 = 14; /*0x889*/
  n65281 = 65281; /*0x890*/
  v56 = -1; /*0x897*/
  n15 = 15; /*0x89b*/
  n8705 = 8705; /*0x8a2*/
  n32 = 32; /*0x8a9*/
  n16_5 = 16; /*0x8ad*/
  n8705_1 = 8705; /*0x8b1*/
  n32_1 = 32; /*0x8b8*/
  n17 = 17; /*0x8bc*/
  n8705_2 = 8705; /*0x8c3*/
  n32_2 = 32; /*0x8ca*/
  n18 = 18; /*0x8ce*/
  n8705_3 = 8705; /*0x8d5*/
  n32_3 = 32; /*0x8dc*/
  n19 = 19; /*0x8e0*/
  n8705_4 = 8705; /*0x8e7*/
  n32_4 = 32; /*0x8ee*/
  n20 = 20; /*0x8f2*/
  n8705_5 = 8705; /*0x8f9*/
  n32_5 = 32; /*0x900*/
  n21 = 21; /*0x904*/
  n8705_6 = 8705; /*0x907*/
  n32_6 = 32; /*0x90e*/
  n22 = 22; /*0x912*/
  n8705_7 = 8705; /*0x919*/
  n33 = 33; /*0x920*/
  if ( (unsigned __int64)i >= 0x15 ) /*0x927*/
    return 0x8000000000000002uLL; /*0x933*/
  ZeroPool[1] = -2; /*0x93d*/
  *(_BYTE *)ZeroPool = 8; /*0x945*/
  *((_BYTE *)ZeroPool + 1) = 9; /*0x94c*/
  v4 = 5LL * (_QWORD)i; /*0x94f*/
  v5 = v20[10 * (_QWORD)i - 3]; /*0x957*/
  v6 = v20[10 * (_QWORD)i - 4]; /*0x95b*/
  v7 = v20[10 * (_QWORD)i - 2]; /*0x960*/
  StringId = *((_WORD *)&n2 + 5 * (_QWORD)i); /*0x965*/
  ZeroPool_1[4] = v6; /*0x96a*/
  ZeroPool_1[5] = v5; /*0x972*/
  v9 = v20[10 * (_QWORD)i - 1]; /*0x979*/
  ZeroPool_1[6] = v7; /*0x97d*/
  ZeroPool_1[7] = v9; /*0x985*/
  LOBYTE(ZeroPool) = v20[10 * (_QWORD)i]; /*0x98c*/
  ZeroPool_1[8] = (_BYTE)ZeroPool; /*0x990*/
  if ( StringId ) /*0x996*/
  {
    Buffer_2 = HiiGetString(ZeroPool, StringId, i); /*0x998*/
    Buffer = Buffer_2; /*0x99d*/
    if ( !Buffer_2 ) /*0x9a3*/
      return 0x8000000000000009uLL; /*0x9af*/
    v13 = v6; /*0x9b8*/
    if ( !v6 ) /*0x9bf*/
      v13 = v7; /*0x9c1*/
    UbaSmbiosUpdateStringReplace((__int64)ZeroPool_1, v11, v13, (__int64)Buffer_2); /*0x9c5*/
    AllocateZeroPool_1(Buffer); /*0x9cd*/
  }
  StringId_1 = *((_WORD *)&n2 + v4 + 1); /*0x9d2*/
  if ( StringId_1 ) /*0x9da*/
  {
    Buffer_3 = HiiGetString(ZeroPool, StringId_1, i); /*0x9dc*/
    Buffer_1 = Buffer_3; /*0x9e1*/
    if ( !Buffer_3 ) /*0x9e7*/
      return 0x8000000000000009uLL; /*0x9e7*/
    UbaSmbiosUpdateStringReplace((__int64)ZeroPool_1, v16, v7, (__int64)Buffer_3); /*0x9f4*/
    AllocateZeroPool_1(Buffer_1); /*0x9fc*/
  }
  return 0; /*0xa17*/
}
// Function: 0xA20 - __int64 __
__int64 __fastcall UpdateSmbiosType41OnboardDevices(_WORD *ZeroPool, __int64 a2, unsigned __int64 j)
{
  __int64 v3; // r8
  __int64 v4; // r8
  __int64 v5; // r8
  __int64 v6; // r8
  __int64 v8; // rax
  unsigned int *v9; // rax
  const CHAR8 *Language; // r8
  EFI_STRING_ID n23; // dx
  __int64 v12; // rax
  unsigned int *v13; // rax
  void *HiiHandle; // rcx
  char n3; // r14
  __int64 v16; // rax
  __int64 v17; // rax
  unsigned int *v18; // rax
  char n2; // r8
  __int64 v20; // rax
  CHAR16 *Buffer; // rax
  __int64 v22; // rdx
  CHAR16 *Buffer_1; // rbx

  ZeroPool[1] = -2; /*0xa43*/
  *(_BYTE *)ZeroPool = 9; /*0xa52*/
  *((_BYTE *)ZeroPool + 1) = 17; /*0xa59*/
  *((_BYTE *)ZeroPool + 15) = 0; /*0xa61*/
  *((_BYTE *)ZeroPool + 4) = 1; /*0xa69*/
  *((_BYTE *)ZeroPool + 8) = 4; /*0xa70*/
  *((_BYTE *)ZeroPool + 11) |= 4u; /*0xa77*/
  *((_BYTE *)ZeroPool + 12) |= 1u; /*0xa7e*/
  *((_BYTE *)ZeroPool + 12) |= 4u; /*0xa85*/
  *(_WORD *)((char *)ZeroPool + 13) = 0; /*0xa8c*/
  if ( !j ) /*0xa94*/
  {
    n2 = 0; /*0xd01*/
    *(_WORD *)((char *)ZeroPool + 9) = 1; /*0xd04*/
    *((_BYTE *)ZeroPool + 5) = -74; /*0xd10*/
    *((_BYTE *)ZeroPool + 6) = 13; /*0xd18*/
    *((_BYTE *)ZeroPool + 15) = 0; /*0xd20*/
    *((_BYTE *)ZeroPool + 16) = 24; /*0xd28*/
    goto LABEL_21; /*0xd28*/
  }
  v3 = j - 1; /*0xa9a*/
  if ( !v3 ) /*0xa9d*/
  {
    *(_WORD *)((char *)ZeroPool + 9) = 3; /*0xcb2*/
    *((_BYTE *)ZeroPool + 5) = -75; /*0xcbe*/
    *((_BYTE *)ZeroPool + 6) = 11; /*0xcc6*/
    *((_BYTE *)ZeroPool + 15) = 0; /*0xcce*/
    *((_BYTE *)ZeroPool + 16) = 26; /*0xcd6*/
    if ( *(_DWORD *)PciWriteMmPciUsra(0, 3, 2) == -1 ) /*0xce4*/
      return 0x8000000000000007uLL; /*0xce4*/
    n2 = 2; /*0xcf5*/
LABEL_21:
    v20 = PciWriteMmPciUsra(0, 3, n2); /*0xd2c*/
    v9 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v20 + 25), 0, 0); /*0xd3e*/
    n23 = 23; /*0xd43*/
LABEL_22:
    HiiHandle = (void *)*v9; /*0xd48*/
    LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xd50*/
    goto LABEL_23; /*0xd50*/
  }
  v4 = v3 - 1; /*0xaa3*/
  if ( !v4 ) /*0xaa6*/
  {
    *(_WORD *)((char *)ZeroPool + 9) = 4; /*0xc50*/
    *((_BYTE *)ZeroPool + 5) = -74; /*0xc5d*/
    *((_BYTE *)ZeroPool + 6) = 13; /*0xc65*/
    *((_BYTE *)ZeroPool + 15) = 0x80; /*0xc6d*/
    *((_BYTE *)ZeroPool + 16) = 8; /*0xc75*/
    v17 = PciWriteMmPciUsra(0x80u, 1, 0); /*0xc7d*/
    v18 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v17 + 25), 0, 0); /*0xc8b*/
    n23 = 24; /*0xc90*/
    HiiHandle = (void *)*v18; /*0xc95*/
    LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xc9d*/
    goto LABEL_23; /*0xca0*/
  }
  v5 = v4 - 1; /*0xaac*/
  if ( !v5 ) /*0xaaf*/
  {
    *(_WORD *)((char *)ZeroPool + 9) = 6; /*0xba7*/
    *((_BYTE *)ZeroPool + 5) = -75; /*0xbb5*/
    *((_BYTE *)ZeroPool + 6) = 11; /*0xbbd*/
    *((_BYTE *)ZeroPool + 15) = 0x80; /*0xbc5*/
    *((_BYTE *)ZeroPool + 16) = 16; /*0xbcd*/
    n3 = *(_BYTE *)(PciWriteMmPciUsra(0x80u, 2, 0) + 400); /*0xbdb*/
    if ( n3 == 3 ) /*0xbe5*/
    {
      *(_WORD *)((char *)ZeroPool + 9) = 5; /*0xbee*/
      *((_BYTE *)ZeroPool + 5) = -74; /*0xbf6*/
      *((_BYTE *)ZeroPool + 6) = 11; /*0xbfe*/
    }
    v16 = PciWriteMmPciUsra(0x80u, 2, 0); /*0xc0c*/
    HiiHandle = (void *)*(unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v16 + 25), 0, 0); /*0xc1f*/
    LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xc2b*/
    *((_BYTE *)ZeroPool + 7) = (_BYTE)HiiHandle; /*0xc2d*/
    if ( n3 == 3 ) /*0xc33*/
      n23 = 26; /*0xc35*/
    else
      n23 = 25; /*0xc3f*/
    goto LABEL_24; /*0xc3a*/
  }
  v6 = v5 - 1; /*0xab5*/
  if ( v6 ) /*0xab8*/
  {
    if ( v6 != 1 ) /*0xabd*/
      return 0x8000000000000002uLL; /*0xac9*/
    *(_WORD *)((char *)ZeroPool + 9) = 8; /*0xad7*/
    *((_BYTE *)ZeroPool + 5) = -75; /*0xaeb*/
    *((_BYTE *)ZeroPool + 6) = 11; /*0xaf3*/
    *((_BYTE *)ZeroPool + 15) = 0x80; /*0xafb*/
    *((_BYTE *)ZeroPool + 16) = 26; /*0xb03*/
    v8 = PciWriteMmPciUsra(0x80u, 3, 2); /*0xb07*/
    v9 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v8 + 25), 0, 0); /*0xb15*/
    n23 = 27; /*0xb1a*/
    goto LABEL_22; /*0xb1d*/
  }
  *(_WORD *)((char *)ZeroPool + 9) = 7; /*0xb2b*/
  *((_BYTE *)ZeroPool + 5) = -76; /*0xb3c*/
  *((_BYTE *)ZeroPool + 6) = 10; /*0xb44*/
  *((_BYTE *)ZeroPool + 15) = 0x80; /*0xb4c*/
  *((_BYTE *)ZeroPool + 16) = 18; /*0xb54*/
  if ( *(_DWORD *)PciWriteMmPciUsra(0x80u, 2, 2) == -1 ) /*0xb62*/
    return 0x8000000000000007uLL; /*0xcf0*/
  v12 = PciWriteMmPciUsra(0x80u, 2, 2); /*0xb73*/
  v13 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v12 + 25), 0, 0); /*0xb81*/
  n23 = 25; /*0xb86*/
  HiiHandle = (void *)*v13; /*0xb8b*/
  LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xb93*/
LABEL_23:
  *((_BYTE *)ZeroPool + 7) = (_BYTE)HiiHandle; /*0xd52*/
LABEL_24:
  Buffer = HiiGetString(HiiHandle, n23, Language); /*0xd59*/
  Buffer_1 = Buffer; /*0xd5e*/
  if ( Buffer ) /*0xd64*/
  {
    UbaSmbiosUpdateStringReplace(ZeroPool, v22, *((unsigned __int8 *)ZeroPool + 4), Buffer); /*0xd72*/
    AllocateZeroPool_1(Buffer_1); /*0xd7a*/
  }
  return 0; /*0xd90*/
}
// Function: 0xD98 - __int64 __
__int64 __fastcall UpdateSmbiosTypeUnknownExtended(char *ZeroPool, __int64 a2, unsigned __int64 k)
{
  __int64 v3; // r8
  __int64 v4; // r8
  unsigned int *v6; // rax
  const CHAR8 *Language; // r8
  EFI_STRING_ID n28; // dx
  void *HiiHandle; // rcx
  unsigned __int8 v10; // bl
  unsigned int *v11; // rax
  char n10; // dl
  unsigned int *v13; // rax
  char n5; // dl
  char n3; // di
  unsigned int *v16; // rax
  CHAR16 *Buffer; // rax
  __int64 v18; // rdx
  CHAR16 *Buffer_1; // rbx

  *((_WORD *)ZeroPool + 1) = -2; /*0xdbb*/
  *ZeroPool = 41; /*0xdc3*/
  ZeroPool[1] = 11; /*0xdca*/
  ZeroPool[4] = 1; /*0xdd2*/
  *(_WORD *)(ZeroPool + 7) = 0; /*0xdda*/
  if ( !k ) /*0xde2*/
  {
    n3 = 3; /*0xecb*/
    v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 28, 3) + 25); /*0xee2*/
    v16 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xee8*/
    n28 = 28; /*0xeed*/
    HiiHandle = (void *)*v16; /*0xef2*/
    if ( (_DWORD)HiiHandle != -1 ) /*0xefc*/
      n3 = -125; /*0xefc*/
    ZeroPool[5] = n3; /*0xf03*/
    goto LABEL_18; /*0xf03*/
  }
  v3 = k - 1; /*0xde8*/
  if ( !v3 ) /*0xdec*/
  {
    v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 2, 2) + 25); /*0xea0*/
    v13 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xea6*/
    n5 = 5; /*0xeab*/
    HiiHandle = (void *)*v13; /*0xeb0*/
    if ( (_DWORD)HiiHandle != -1 ) /*0xeba*/
      n5 = -123; /*0xeba*/
    ZeroPool[5] = n5; /*0xec1*/
    n28 = 29; /*0xec4*/
    goto LABEL_18; /*0xec9*/
  }
  v4 = v3 - 1; /*0xdf2*/
  if ( !v4 ) /*0xdf6*/
  {
    v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 1, 0) + 25); /*0xe61*/
    v11 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xe67*/
    n10 = 10; /*0xe6c*/
    HiiHandle = (void *)*v11; /*0xe71*/
    if ( (_DWORD)HiiHandle != -1 ) /*0xe7b*/
      n10 = -118; /*0xe7b*/
    ZeroPool[5] = n10; /*0xe82*/
    n28 = 30; /*0xe85*/
LABEL_18:
    ZeroPool[9] = v10; /*0xf07*/
    ZeroPool[10] = 0; /*0xf12*/
    goto LABEL_19; /*0xf12*/
  }
  if ( v4 != 1 ) /*0xdfc*/
    return 0x8000000000000002uLL; /*0xe08*/
  v6 = (unsigned int *)PciWriteMmPciUsra(0, 31, 2); /*0xe1a*/
  Language = (_BYTE *)(&word_8 + 1); /*0xe1f*/
  n28 = 31; /*0xe23*/
  HiiHandle = (void *)*v6; /*0xe25*/
  if ( (_DWORD)HiiHandle != -1 ) /*0xe2d*/
    Language = byte_40 + 73; /*0xe2d*/
  ZeroPool[5] = (char)Language; /*0xe35*/
  ZeroPool[9] = 0; /*0xe3d*/
  ZeroPool[10] = -6; /*0xe45*/
LABEL_19:
  Buffer = HiiGetString(HiiHandle, n28, Language); /*0xf16*/
  Buffer_1 = Buffer; /*0xf1b*/
  if ( Buffer ) /*0xf21*/
  {
    UbaSmbiosUpdateStringReplace(ZeroPool, v18, 1u, Buffer); /*0xf30*/
    AllocateZeroPool_1(Buffer_1); /*0xf38*/
  }
  return 0; /*0xf4e*/
}
// Function: 0x1AE8 - unsigned _
unsigned __int64 __fastcall UbaSmbiosUpdateStringReplace(
        char *ZeroPool,
        __int64 a2,
        unsigned __int64 a3,
        EFI_STRING Buffer)
{
  UINTN AllocationSize; // r14
  CHAR8 *SourceBuffer_3; // rax
  CHAR8 *SourceBuffer; // rdi
  UINTN v10; // r15
  __int64 v11; // rcx
  __int64 v12; // r14
  CHAR8 *SourceBuffer_2; // rbx
  unsigned __int64 v14; // rax
  UINTN v15; // rax
  UINTN v16; // rsi
  UINTN n0xF4240; // rsi
  const char *(Destination____((void__)_0)); // r8
  __int64 n1820; // rdx
  unsigned __int64 v20; // rbx
  UINTN n0xF4240_1; // rax
  UINTN n0xF4240_2; // r14
  CHAR8 v23; // al
  signed __int64 v24; // rdi
  char *DestinationBuffer; // rax
  char *SourceBuffer_1; // rbx
  UINTN Length; // [rsp+20h] [rbp-10h] BYREF
  void *ZeroPool_2; // [rsp+28h] [rbp-8h] BYREF
  char *ZeroPool_1; // [rsp+60h] [rbp+30h] BYREF
  __int64 Length_1; // [rsp+68h] [rbp+38h] BYREF

  ZeroPool_1 = ZeroPool; /*0x1af2*/
  Length_1 = 0; /*0x1b05*/
  Length = 0; /*0x1b0f*/
  AllocationSize = StrLen(Buffer) + 1; /*0x1b22*/
  SourceBuffer_3 = (CHAR8 *)AllocateZeroPool(AllocationSize); /*0x1b29*/
  SourceBuffer = SourceBuffer_3; /*0x1b2e*/
  if ( !SourceBuffer_3 ) /*0x1b34*/
  {
    AssertReport( /*0x1b47*/
      (__int64)"e:\\hs\\PurleyPlatPkg\\Library\\UbaPlatLib\\UbaSmbiosUpdateLib.c",
      120,
      (__int64)"AsciiString != ((void *) 0)");
    return 0x8000000000000009uLL; /*0x1b56*/
  }
  StrToAsciiStr(Buffer, SourceBuffer_3, AllocationSize); /*0x1b64*/
  v10 = AsciiStrLen(SourceBuffer); /*0x1b75*/
  UbaSmbiosFindStringBlockEnd((__int64 *)&ZeroPool_1, &Length_1); /*0x1b7c*/
  v11 = 1; /*0x1b85*/
  v12 = 0; /*0x1b8a*/
  SourceBuffer_2 = &ZeroPool_1[(unsigned __int8)ZeroPool_1[1]]; /*0x1b91*/
  if ( a3 > 1 ) /*0x1b97*/
  {
    do /*0x1bb0*/
    {
      v14 = v11 + 1; /*0x1b9c*/
      if ( *SourceBuffer_2 ) /*0x1b99*/
        v14 = v11; /*0x1ba0*/
      ++SourceBuffer_2; /*0x1ba4*/
      ++v12; /*0x1ba7*/
      v11 = v14; /*0x1baa*/
    }
    while ( v14 < a3 ); /*0x1bb0*/
  }
  v15 = AsciiStrLen(SourceBuffer_2); /*0x1bb5*/
  v16 = v15; /*0x1bba*/
  if ( v10 != v15 ) /*0x1bc0*/
  {
    DestinationBuffer = (char *)AllocateZeroPool(0x300u); /*0x1d0c*/
    ZeroPool_2 = DestinationBuffer; /*0x1d11*/
    SourceBuffer_1 = DestinationBuffer; /*0x1d15*/
    if ( !DestinationBuffer ) /*0x1d1b*/
      return 0x8000000000000009uLL; /*0x1d1b*/
    CopyMem(DestinationBuffer, ZeroPool_1, v12 + (unsigned __int8)ZeroPool_1[1]); /*0x1d30*/
    CopyMem(&SourceBuffer_1[(unsigned __int8)ZeroPool_1[1] + v12], SourceBuffer, v10 + 1); /*0x1d4a*/
    CopyMem( /*0x1d83*/
      &SourceBuffer_1[(unsigned __int8)ZeroPool_1[1] + 1 + v12 + v10],
      &ZeroPool_1[v12 + 1 + (unsigned __int8)ZeroPool_1[1] + v16],
      Length_1 - (unsigned __int8)ZeroPool_1[1] - v16 - v12 - 1);
    UbaSmbiosFindStringBlockEnd((__int64 *)&ZeroPool_2, &Length); /*0x1d90*/
    CopyMem(ZeroPool_1, SourceBuffer_1, Length); /*0x1da0*/
    AllocateZeroPool_1(SourceBuffer_1); /*0x1da8*/
    AllocateZeroPool_1(SourceBuffer); /*0x1db0*/
    return 0; /*0x1db0*/
  }
  n0xF4240 = v15 + 1; /*0x1bc6*/
  if ( !SourceBuffer_2 ) /*0x1bcc*/
  {
    (Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x1bce*/
    n1820 = 1820; /*0x1bd5*/
LABEL_11:
    AssertReport( /*0x1bda*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      n1820,
      (__int64)(Destination____((void__)_0)));
    v20 = 0x8000000000000002uLL; /*0x1be6*/
LABEL_28:
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v20); /*0x1cb6*/
    AssertReport( /*0x1cdd*/
      (__int64)"e:\\hs\\PurleyPlatPkg\\Library\\UbaPlatLib\\UbaSmbiosUpdateLib.c",
      148,
      (__int64)"!EFI_ERROR (Status)");
    return v20; /*0x1ce5*/
  }
  if ( n0xF4240 > 0xF4240 ) /*0x1bfc*/
  {
    (Destination____((void__)_0)) = "(DestMax <= (_gPcd_FixedAtBuild_PcdMaximumAsciiStringLength))"; /*0x1bfe*/
    n1820 = 1827; /*0x1c05*/
    goto LABEL_11; /*0x1c0a*/
  }
  if ( v15 == -1 ) /*0x1c0f*/
  {
    (Destination____((void__)_0)) = "(DestMax != 0)"; /*0x1c11*/
    n1820 = 1833; /*0x1c18*/
    goto LABEL_11; /*0x1c1d*/
  }
  n0xF4240_1 = AsciiStrnLenS(SourceBuffer, n0xF4240); /*0x1c25*/
  n0xF4240_2 = n0xF4240_1; /*0x1c2a*/
  if ( n0xF4240 <= n0xF4240_1 ) /*0x1c30*/
  {
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 1839, (__int64)"(DestMax > SourceLen)"); /*0x1c45*/
    v20 = 0x8000000000000005uLL; /*0x1c4a*/
    goto LABEL_28; /*0x1c54*/
  }
  if ( SourceBuffer > SourceBuffer_2 ) /*0x1c59*/
    goto LABEL_21; /*0x1c59*/
  if ( SourceBuffer_2 >= &SourceBuffer[n0xF4240_1 + 1] ) /*0x1c65*/
  {
    if ( SourceBuffer_2 > SourceBuffer ) /*0x1c6a*/
      goto LABEL_24; /*0x1c6a*/
LABEL_21:
    if ( SourceBuffer >= &SourceBuffer_2[n0xF4240] ) /*0x1c73*/
      goto LABEL_23; /*0x1c73*/
  }
  AssertReport( /*0x1c75*/
    (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
    1844,
    (__int64)"InternalSafeStringNoAsciiStrOverlap (Destination, DestMax, (CHAR8 *)Source, SourceLen + 1)");
LABEL_23:
  if ( SourceBuffer <= SourceBuffer_2 ) /*0x1c90*/
  {
LABEL_24:
    if ( SourceBuffer_2 < &SourceBuffer[n0xF4240_2 + 1] ) /*0x1c9c*/
    {
LABEL_27:
      v20 = 0x800000000000000FuLL; /*0x1cac*/
      goto LABEL_28; /*0x1cac*/
    }
    if ( SourceBuffer < SourceBuffer_2 ) /*0x1ca1*/
      goto LABEL_29; /*0x1ca1*/
  }
  if ( SourceBuffer < &SourceBuffer_2[n0xF4240] ) /*0x1caa*/
    goto LABEL_27; /*0x1caa*/
LABEL_29:
  v23 = *SourceBuffer; /*0x1cea*/
  if ( *SourceBuffer ) /*0x1cea*/
  {
    v24 = SourceBuffer - SourceBuffer_2; /*0x1cf0*/
    do /*0x1cfd*/
    {
      *SourceBuffer_2++ = v23; /*0x1cf3*/
      v23 = SourceBuffer_2[v24]; /*0x1cf8*/
    }
    while ( v23 ); /*0x1cfd*/
  }
  *SourceBuffer_2 = 0; /*0x1cff*/
  return 0; /*0x1dbc*/
}
// Function: 0x176C - EFI_STRING
EFI_STRING __cdecl HiiGetString(EFI_HII_HANDLE HiiHandle, EFI_STRING_ID StringId, const CHAR8 *Language)
{
  void *HiiHandle_2; // rsi
  void *ZeroPool; // rbx
  __int64 v6; // rcx
  CHAR8 *SupportedLanguages; // rbp
  unsigned __int64 n24; // r8
  void *HiiHandle_3; // r9
  CHAR8 *BestLanguage; // rdi
  EFI_HII_HANDLE HiiHandle_1; // [rsp+70h] [rbp+8h] BYREF
  const CHAR8 *Language_1; // [rsp+80h] [rbp+18h] BYREF
  UINTN AllocationSize; // [rsp+88h] [rbp+20h] BYREF

  Language_1 = Language; /*0x1771*/
  HiiHandle_1 = HiiHandle; /*0x1776*/
  HiiHandle_2 = (void *)::HiiHandle; /*0x1786*/
  if ( !::HiiHandle ) /*0x1797*/
    AssertReport( /*0x17ac*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
      238,
      (__int64)"HiiHandle != ((void *) 0)");
  if ( !StringId ) /*0x17b5*/
    AssertReport((__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 239, (__int64)"StringId != 0"); /*0x17ca*/
  HiiHandle_1 = 0; /*0x17d2*/
  ZeroPool = 0; /*0x17d7*/
  SupportedLanguages = HiiGetSupportedLanguages(HiiHandle_2); /*0x17df*/
  if ( SupportedLanguages ) /*0x17e5*/
  {
    GetPlatformLangVariable(v6, (__int64 *)&HiiHandle_1, n24); /*0x17f0*/
    HiiHandle_3 = &unk_2AFA; /*0x1801*/
    if ( HiiHandle_1 ) /*0x1809*/
      HiiHandle_3 = HiiHandle_1; /*0x1809*/
    BestLanguage = GetBestLanguage(SupportedLanguages, 0, &unk_2AFA, HiiHandle_3, SupportedLanguages, 0); /*0x181e*/
    if ( BestLanguage ) /*0x1824*/
    {
      AllocationSize = 0; /*0x1848*/
      if ( (*(__int64 (__fastcall **)(__int64, CHAR8 *, void *, _QWORD, const CHAR8 **, UINTN *, _QWORD))(qword_3928 + 8))( /*0x1875*/
             qword_3928,
             BestLanguage,
             HiiHandle_2,
             StringId,
             &Language_1,
             &AllocationSize,
             0) == 0x8000000000000005uLL )
      {
        ZeroPool = AllocateZeroPool(AllocationSize); /*0x1884*/
        if ( ZeroPool ) /*0x188a*/
        {
          if ( (*(__int64 (__fastcall **)(__int64, CHAR8 *, void *, _QWORD, void *, UINTN *, _QWORD))(qword_3928 + 8))( /*0x18be*/
                 qword_3928,
                 BestLanguage,
                 HiiHandle_2,
                 StringId,
                 ZeroPool,
                 &AllocationSize,
                 0) < 0 )
          {
            AllocateZeroPool_1(ZeroPool); /*0x18c3*/
            ZeroPool = 0; /*0x18c8*/
          }
        }
      }
    }
    AllocateZeroPool_1(SupportedLanguages); /*0x18ce*/
    if ( HiiHandle_1 ) /*0x18d8*/
      AllocateZeroPool_1(HiiHandle_1); /*0x18df*/
    if ( BestLanguage ) /*0x18e7*/
      AllocateZeroPool_1(BestLanguage); /*0x18ec*/
  }
  return (EFI_STRING)ZeroPool; /*0x18f9*/
}
// Function: 0x1908 - EFI_HII_HA
EFI_HII_HANDLE HiiAddPackages(const EFI_GUID *PackageListGuid, EFI_HANDLE DeviceHandle, ...)
{
  const UINT32 *Buffer_1; // rsi
  int v5; // ebx
  const UINT32 *Buffer; // rax
  const UINT32 **v7; // rdi
  unsigned int AllocationSize; // ebx
  GUID *ZeroPool; // rax
  GUID *ZeroPool_1; // rdi
  unsigned __int16 *p_Data2; // rbp
  const UINT32 **v12; // r15
  UINTN Length; // rbx
  __int64 v14; // rax
  __int64 v15; // rcx
  __int64 v17[9]; // [rsp+20h] [rbp-48h] BYREF
  const UINT32 *Buffer_2; // [rsp+80h] [rbp+18h] BYREF
  va_list va1; // [rsp+88h] [rbp+20h] BYREF
  va_list va; // [rsp+80h] [rbp+18h]

  va_start(va1, DeviceHandle);
  va_start(va, DeviceHandle);
  Buffer_2 = va_arg(va1, const UINT32 *); /*0x1908*/
  if ( !PackageListGuid ) /*0x1931*/
    AssertReport( /*0x1946*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      160,
      (__int64)"PackageListGuid != ((void *) 0)");
  Buffer_1 = Buffer_2; /*0x194b*/
  v5 = 0; /*0x1953*/
  Buffer = Buffer_2; /*0x1956*/
  if ( !Buffer_2 ) /*0x195c*/
    return 0; /*0x195c*/
  va_copy((va_list)v7, va); /*0x1962*/
  do /*0x197b*/
  {
    ++v7; /*0x1975*/
    v5 += ReadUnaligned32(Buffer) - 4; /*0x1979*/
    Buffer = *v7; /*0x197b*/
  }
  while ( *v7 ); /*0x197b*/
  if ( !v5 ) /*0x1985*/
    return 0; /*0x1985*/
  AllocationSize = v5 + 24; /*0x198b*/
  ZeroPool = (GUID *)AllocateZeroPool(AllocationSize); /*0x1990*/
  ZeroPool_1 = ZeroPool; /*0x1995*/
  if ( !ZeroPool ) /*0x199b*/
    return 0; /*0x1a30*/
  CopyGuid(ZeroPool, PackageListGuid); /*0x19a7*/
  ZeroPool_1[1].Data1 = AllocationSize; /*0x19ac*/
  p_Data2 = &ZeroPool_1[1].Data2; /*0x19af*/
  va_copy((va_list)v12, va); /*0x19b3*/
  do /*0x19de*/
  {
    Length = ReadUnaligned32(Buffer_1) - 4; /*0x19d0*/
    CopyMem(p_Data2, Buffer_1 + 1, Length); /*0x19d2*/
    ++v12; /*0x19d7*/
    p_Data2 = (unsigned __int16 *)((char *)p_Data2 + Length); /*0x19db*/
    Buffer_1 = *v12; /*0x19de*/
  }
  while ( *v12 ); /*0x19de*/
  CopyMem(p_Data2, &SourceBuffer_, 4u); /*0x19f4*/
  v14 = (*(__int64 (__fastcall **)(__int64, GUID *, EFI_HANDLE, __int64 *))qword_3948)( /*0x1a0e*/
          qword_3948,
          ZeroPool_1,
          DeviceHandle,
          v17);
  v15 = v17[0]; /*0x1a10*/
  if ( v14 < 0 ) /*0x1a18*/
    v15 = 0; /*0x1a18*/
  v17[0] = v15; /*0x1a1c*/
  AllocateZeroPool_1(ZeroPool_1); /*0x1a24*/
  return (EFI_HII_HANDLE)v17[0]; /*0x1a32*/
}
// Function: 0x1E1C - __int64 __
__int64 __fastcall UbaSmbiosFlushStringPack(void *ZeroPool)
{
  void (__fastcall **v1)(_QWORD, _QWORD, __int16 *, void *); // rax
  __int64 result; // rax
  void *ZeroPool_1; // [rsp+30h] [rbp+8h]
  __int16 v4; // [rsp+38h] [rbp+10h] BYREF

  ZeroPool_1 = ZeroPool; /*0x1e1c*/
  v1 = (void (__fastcall **)(_QWORD, _QWORD, __int16 *, void *))qword_3970; /*0x1e25*/
  if ( !qword_3970 ) /*0x1e2f*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3970); /*0x1e48*/
    if ( result < 0 ) /*0x1e51*/
      return result; /*0x1e51*/
    ZeroPool = ZeroPool_1; /*0x1e53*/
    v1 = (void (__fastcall **)(_QWORD, _QWORD, __int16 *, void *))qword_3970; /*0x1e58*/
  }
  v4 = -2; /*0x1e69*/
  (*v1)(v1, 0, &v4, ZeroPool); /*0x1e76*/
  return 0; /*0x1e7a*/
}
// Function: 0x1FB4 - __int64 __
__int64 __fastcall UbaSmbiosDeleteAllKeysOfType(char n9)
{
  __int64 v1; // rax
  __int64 v2; // rdi
  __int64 v4; // rdx
  __int64 v5; // rcx
  __int64 v6; // rbx
  __int64 v7; // r8
  __int64 v8; // rdi
  __int64 result; // rax
  char n9_1; // [rsp+58h] [rbp+10h] BYREF
  __int16 v11; // [rsp+60h] [rbp+18h] BYREF
  char v12; // [rsp+68h] [rbp+20h] BYREF

  v1 = qword_3968; /*0x1fbc*/
  v2 = 0; /*0x1fc3*/
  if ( !qword_3968 ) /*0x1fcb*/
  {
    v6 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3968); /*0x1fea*/
    if ( v6 < 0 ) /*0x1ff0*/
      goto LABEL_9; /*0x1ff0*/
    v1 = qword_3968; /*0x1ff2*/
  }
  n9_1 = n9; /*0x1ffe*/
  v11 = -2; /*0x2003*/
  while ( (*(__int64 (__fastcall **)(__int64, __int16 *, char *, char *, _QWORD))(v1 + 24))(v1, &v11, &n9_1, &v12, 0) >= 0 /*0x202d*/
       && v11 != -2 )
  {
    v1 = qword_3968; /*0x202f*/
    ++v2; /*0x2036*/
  }
  v6 = v2; /*0x203b*/
LABEL_9:
  v8 = 0; /*0x203e*/
  if ( !v6 ) /*0x2043*/
    return 0; /*0x205a*/
  while ( 1 ) /*0x2045*/
  {
    LOBYTE(v5) = n9; /*0x2045*/
    result = UbaSmbiosSetVariableIfNotExist(v5, v4, v7); /*0x2048*/
    if ( result < 0 ) /*0x2050*/
      break; /*0x2050*/
    if ( ++v8 >= (unsigned __int64)v6 ) /*0x2058*/
      return 0; /*0x2058*/
  }
  return result; /*0x205c*/
}
// Function: 0x2064 - __int64 __
__int64 __fastcall PciWriteMmPciUsra(unsigned __int8 a1, char a2, char a3)
{
  _DWORD v4[6]; // [rsp+20h] [rbp-18h] BYREF

  v4[3] = 0; /*0x2068*/
  v4[1] = 0; /*0x2070*/
  v4[2] = 512; /*0x2086*/
  v4[0] = (a3 & 7 | (8 * (a2 & 0x1F | (32 * a1)))) << 12; /*0x2097*/
  return (*(__int64 (__fastcall **)(_DWORD *))(qword_3980 + 24))(v4); /*0x20a5*/
}
// Function: 0x1044 - __int64 Ge
__int64 GetHiiDatabaseProtocol()
{
  __int64 result; // rax
  unsigned __int64 n0x10; // rbx
  __int64 v2; // rax
  __int64 v3; // rcx

  result = qword_3918; /*0x104e*/
  if ( !qword_3918 ) /*0x105a*/
  {
    n0x10 = (*(__int64 (__fastcall **)(__int64))(BootServices + 24))(31); /*0x1073*/
    (*(void (__fastcall **)(unsigned __int64))(BootServices + 32))(n0x10); /*0x1076*/
    if ( n0x10 <= 0x10 ) /*0x107d*/
    {
      v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31C0, 0, &qword_3918); /*0x109a*/
      v3 = qword_3918; /*0x10a0*/
      if ( v2 < 0 ) /*0x10aa*/
        v3 = 0; /*0x10aa*/
      qword_3918 = v3; /*0x10ae*/
      return v3; /*0x10b5*/
    }
    else
    {
      return 0; /*0x107f*/
    }
  }
  return result; /*0x10bd*/
}
// Function: 0x1F50 - __int64 __
__int64 __fastcall UbaSmbiosSetVariableIfNotExist(__int64 a1, __int64 a2, __int64 a3)
{
  char v3; // bl
  __int64 result; // rax
  __int64 v5; // [rsp+38h] [rbp+10h] BYREF

  v5 = a2; /*0x1f50*/
  v3 = a1; /*0x1f62*/
  if ( qword_3978 /*0x1f86*/
    || (result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3978),
        result >= 0) )
  {
    result = UbaSmbiosGetVariable(v3, a2, a3, &v5); /*0x1f8f*/
    if ( result >= 0 ) /*0x1f97*/
      return (*(__int64 (__fastcall **)(__int64, _QWORD))(qword_3978 + 16))(qword_3978, (unsigned __int16)v5); /*0x1fa8*/
  }
  return result; /*0x1fab*/
}
// Function: 0x1A44 - CHAR8 *__c
CHAR8 *__cdecl HiiGetSupportedLanguages(EFI_HII_HANDLE HiiHandle)
{
  void *ZeroPool; // rax
  void *ZeroPool_1; // rbx
  char v5; // [rsp+38h] [rbp+10h] BYREF
  UINTN AllocationSize; // [rsp+40h] [rbp+18h] BYREF

  if ( !HiiHandle ) /*0x1a54*/
    AssertReport( /*0x1a67*/
      (__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLanguage.c",
      47,
      (__int64)"HiiHandle != ((void *) 0)");
  AllocationSize = 0; /*0x1a78*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, char *, UINTN *))(qword_3928 + 24))( /*0x1a99*/
         qword_3928,
         HiiHandle,
         &v5,
         &AllocationSize) != 0x8000000000000005uLL )
    return 0; /*0x1a99*/
  ZeroPool = AllocateZeroPool(AllocationSize); /*0x1aa4*/
  ZeroPool_1 = ZeroPool; /*0x1aa9*/
  if ( !ZeroPool ) /*0x1aaf*/
    return 0; /*0x1aaf*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, void *, UINTN *))(qword_3928 + 24))( /*0x1acc*/
         qword_3928,
         HiiHandle,
         ZeroPool,
         &AllocationSize) < 0 )
  {
    AllocateZeroPool_1(ZeroPool_1); /*0x1ad1*/
    return 0; /*0x1a9d*/
  }
  return (CHAR8 *)ZeroPool_1; /*0x1ae0*/
}
// Function: 0x14AC - __int64 __
__int64 __fastcall GetPlatformLangVariable(__int64 a1, __int64 *p_HiiHandle, unsigned __int64 n24)
{
  __int64 RuntimeServices; // rax
  UINTN AllocationSize; // rcx
  __int64 v6; // rdi
  void *Pool; // rax
  unsigned __int64 n24_1; // [rsp+50h] [rbp+18h] BYREF

  n24_1 = n24; /*0x14b1*/
  if ( !p_HiiHandle ) /*0x14c1*/
    AssertReport( /*0x14d6*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c",
      1401,
      (__int64)"Name != ((void *) 0) && Guid != ((void *) 0) && Value != ((void *) 0)");
  RuntimeServices = RuntimeServices; /*0x14db*/
  n24_1 = 0; /*0x14e7*/
  *p_HiiHandle = 0; /*0x14f4*/
  v6 = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x150b*/
         L"PlatformLang",
         &unk_31B0,
         0,
         &n24_1,
         0);
  if ( v6 == 0x8000000000000005uLL ) /*0x151b*/
  {
    Pool = AllocatePool(AllocationSize); /*0x1522*/
    *p_HiiHandle = (__int64)Pool; /*0x1527*/
    if ( !Pool ) /*0x152d*/
      AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 1421, (__int64)"*Value != ((void *) 0)"); /*0x1542*/
    if ( *p_HiiHandle ) /*0x1547*/
    {
      v6 = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x1580*/
             L"PlatformLang",
             &unk_31B0,
             0,
             &n24_1,
             *p_HiiHandle);
      if ( v6 < 0 ) /*0x1586*/
      {
        AllocateZeroPool_1((void *)*p_HiiHandle); /*0x158b*/
        *p_HiiHandle = 0; /*0x1590*/
      }
    }
    else
    {
      return 0x8000000000000009uLL; /*0x154f*/
    }
  }
  return v6; /*0x159c*/
}
// Function: 0x15A4 - CHAR8 *Get
CHAR8 *GetBestLanguage(const CHAR8 *SupportedLanguages, BOOLEAN Iso639Language, ...)
{
  const CHAR8 *v4; // rsi
  const CHAR8 **v5; // r15
  UINTN n3; // rbp
  UINTN n3_1; // rbx
  CHAR8 n59_1; // al
  const CHAR8 *SupportedLanguages_1; // rdi
  CHAR8 n59; // al
  void *ZeroPool; // rax
  const CHAR8 *v13; // [rsp+70h] [rbp+18h] BYREF
  va_list va1; // [rsp+78h] [rbp+20h] BYREF
  va_list va; // [rsp+70h] [rbp+18h]

  va_start(va1, Iso639Language);
  va_start(va, Iso639Language);
  v13 = va_arg(va1, const CHAR8 *); /*0x15a4*/
  if ( !SupportedLanguages ) /*0x15c9*/
    AssertReport( /*0x15de*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c",
      1528,
      (__int64)"SupportedLanguages != ((void *) 0)");
  v4 = v13; /*0x15e3*/
  if ( v13 ) /*0x15eb*/
  {
    va_copy((va_list)v5, va); /*0x15f1*/
    do /*0x16aa*/
    {
      n3 = 3; /*0x15f9*/
      if ( AsciiStrLen(v4) <= 3 ) /*0x1606*/
        n3_1 = AsciiStrLen(v4); /*0x1614*/
      else
        n3_1 = 3; /*0x1608*/
      if ( Iso639Language ) /*0x161a*/
      {
LABEL_29:
        while ( n3_1 ) /*0x16a4*/
        {
          SupportedLanguages_1 = SupportedLanguages; /*0x163d*/
          if ( *SupportedLanguages ) /*0x1638*/
          {
            while ( 1 ) /*0x1645*/
            {
              if ( Iso639Language ) /*0x1645*/
                goto LABEL_36; /*0x1645*/
              while ( *SupportedLanguages_1 == 59 ) /*0x1654*/
                ++SupportedLanguages_1; /*0x164d*/
              n59 = *SupportedLanguages_1; /*0x1656*/
              n3 = 0; /*0x1658*/
              while ( n59 && n59 != 59 ) /*0x165e*/
                n59 = SupportedLanguages_1[++n3]; /*0x1663*/
              if ( n3_1 <= n3 ) /*0x166d*/
              {
LABEL_36:
                if ( !sub_21B4(SupportedLanguages_1, v4, n3_1) ) /*0x1678*/
                  break; /*0x1678*/
              }
              SupportedLanguages_1 += n3; /*0x1682*/
              if ( !*SupportedLanguages_1 ) /*0x1685*/
                goto LABEL_25; /*0x1688*/
            }
            ZeroPool = AllocateZeroPool(n3 + 1); /*0x16cb*/
            if ( ZeroPool ) /*0x16d3*/
              return (CHAR8 *)CopyMem(ZeroPool, SupportedLanguages_1, n3); /*0x16de*/
            return 0; /*0x16d3*/
          }
LABEL_25:
          if ( Iso639Language ) /*0x168d*/
            break; /*0x168d*/
          if ( !--n3_1 ) /*0x1693*/
            break; /*0x1693*/
          do /*0x169f*/
          {
            if ( v4[n3_1] == 45 ) /*0x1699*/
              break; /*0x1699*/
            --n3_1; /*0x169b*/
          }
          while ( n3_1 ); /*0x169f*/
        }
      }
      else
      {
        n59_1 = *v4; /*0x1620*/
        n3_1 = 0; /*0x1622*/
        if ( *v4 ) /*0x1620*/
        {
          do /*0x1634*/
          {
            if ( n59_1 == 59 ) /*0x162a*/
              break; /*0x162a*/
            n59_1 = v4[++n3_1]; /*0x162f*/
          }
          while ( n59_1 ); /*0x1634*/
          goto LABEL_29; /*0x1634*/
        }
      }
      v4 = *++v5; /*0x16aa*/
    }
    while ( *v5 ); /*0x16aa*/
  }
  return 0; /*0x16b8*/
}
// Function: 0x16E8 - void *__cd
void *__cdecl GetHobList()
{
  void *Table_; // rax
  signed __int64 SystemConfigurationTable; // rax

  Table_ = (void *)Table_; /*0x16ec*/
  if ( !Table_ ) /*0x16f6*/
  {
    SystemConfigurationTable = EfiGetSystemConfigurationTable(&TableGuid_, (void **)&Table_); /*0x1706*/
    if ( SystemConfigurationTable < 0 ) /*0x170e*/
    {
      DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", SystemConfigurationTable); /*0x171f*/
      AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 54, (__int64)"!EFI_ERROR (Status)"); /*0x1737*/
    }
    Table_ = (void *)Table_; /*0x173c*/
    if ( !Table_ ) /*0x1746*/
    {
      AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 55, (__int64)"mHobList != ((void *) 0)"); /*0x1759*/
      return (void *)Table_; /*0x175e*/
    }
  }
  return Table_; /*0x1765*/
}
// Function: 0x13E8 - EFI_STATUS
EFI_STATUS __cdecl EfiGetSystemConfigurationTable(EFI_GUID *TableGuid, void **Table)
{
  __int64 SystemTable; // rdi
  __int64 v5; // rbx
  __int64 i; // r14

  if ( !TableGuid ) /*0x140a*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 97, (__int64)"TableGuid != ((void *) 0)"); /*0x141d*/
  if ( !Table ) /*0x1425*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 98, (__int64)"Table != ((void *) 0)"); /*0x1438*/
  SystemTable = SystemTable; /*0x143d*/
  v5 = 0; /*0x1444*/
  *Table = 0; /*0x1446*/
  if ( !*(_QWORD *)(SystemTable + 104) ) /*0x144a*/
    return 0x800000000000000EuLL; /*0x1473*/
  for ( i = 0; !CompareGuid(TableGuid, (const GUID *)(i + *(_QWORD *)(SystemTable + 112))); i += 24 ) /*0x1450*/
  {
    if ( (unsigned __int64)++v5 >= *(_QWORD *)(SystemTable + 104) ) /*0x1471*/
      return 0x800000000000000EuLL; /*0x1471*/
  }
  *Table = *(void **)(*(_QWORD *)(SystemTable + 112) + 24 * v5 + 16); /*0x14a7*/
  return 0; /*0x1491*/
}
// Function: 0x1DC8 - unsigned _
unsigned __int64 __fastcall UbaSmbiosFindStringBlockEnd(__int64 *p_ZeroPool, _QWORD *p_Length)
{
  __int64 ZeroPool; // rax
  __int64 v3; // rcx
  _BYTE *v4; // r8
  unsigned __int64 i; // rax

  ZeroPool = *p_ZeroPool; /*0x1dc8*/
  v3 = *(unsigned __int8 *)(*p_ZeroPool + 1); /*0x1dcb*/
  *p_Length = v3; /*0x1dcf*/
  v4 = (_BYTE *)(v3 + ZeroPool); /*0x1dd2*/
  while ( 1 ) /*0x1dd8*/
  {
    if ( !*v4 ) /*0x1dd8*/
    {
      if ( !*++v4 ) /*0x1de3*/
      {
        *p_Length += 2LL; /*0x1e08*/
        return 0; /*0x1e0e*/
      }
      ++*p_Length; /*0x1de5*/
    }
    for ( i = 0; i < 0x40; ++i ) /*0x1de8*/
    {
      if ( !v4[i] ) /*0x1deb*/
        break; /*0x1def*/
    }
    if ( i == 64 ) /*0x1dfe*/
      break; /*0x1dfe*/
    v4 += i; /*0x1e00*/
    *p_Length += i; /*0x1e03*/
  }
  return 0x8000000000000002uLL; /*0x1e0e*/
}
// Function: 0x1E80 - __int64 __
__int64 __fastcall UbaSmbiosGetVariable(char a1, __int64 a2, __int64 a3, _WORD *a4)
{
  __int64 v4; // rbx
  __int64 result; // rax
  __int64 v8; // rax
  _BYTE v9[40]; // [rsp+30h] [rbp-28h] BYREF
  __int64 v10; // [rsp+68h] [rbp+10h] BYREF
  __int64 v11; // [rsp+70h] [rbp+18h] BYREF

  v11 = a3; /*0x1e85*/
  v10 = a2; /*0x1e8a*/
  v4 = 0; /*0x1e96*/
  if ( !a4 ) /*0x1ea1*/
    return 0x8000000000000002uLL; /*0x1ead*/
  v8 = qword_3958; /*0x1eb2*/
  if ( !qword_3958 ) /*0x1ebc*/
  {
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3958); /*0x1ed5*/
    if ( result < 0 ) /*0x1ede*/
      return result; /*0x1ede*/
    v8 = qword_3958; /*0x1ee0*/
  }
  LOBYTE(v11) = a1; /*0x1eec*/
  LOWORD(v10) = -2; /*0x1ef1*/
  while ( (*(__int64 (__fastcall **)(__int64, __int64 *, __int64 *, _BYTE *, _QWORD))(v8 + 24))(v8, &v10, &v11, v9, 0) >= 0 /*0x1f1e*/
       && (_WORD)v10 != 0xFFFE )
  {
    if ( ++v4 == 1 ) /*0x1f27*/
    {
      *a4 = v10; /*0x1f32*/
      return 0; /*0x1f37*/
    }
    v8 = qword_3958; /*0x1f29*/
  }
  return 0x800000000000000EuLL; /*0x1f48*/
}
// Function: 0x280 - InternalZeroMem
char *__fastcall InternalZeroMem(char *buf, unsigned __int64 n24)
{
  memset(buf, 0, 8 * (n24 >> 3)); /*0x296*/
  memset(&buf[8 * (n24 >> 3)], 0, n24 & 7); /*0x29b*/
  return buf; /*0x29e*/
}
// Function: 0x300 - InternalCopyMem
char *__fastcall InternalCopyMem(char *dst, char *src, unsigned __int64 count)
{
  char *dst_1; // rax
  unsigned __int64 count_1; // rcx
  char *dst_2; // rdi
  char *src_1; // rsi

  dst_1 = dst; /*0x310*/
  if ( src < dst && &src[count - 1] >= dst ) /*0x318*/
  {
    src_1 = &src[count - 1]; /*0x330*/
    dst_2 = &dst[count - 1]; /*0x333*/
  }
  else
  {
    count_1 = count; /*0x31a*/
    count &= 7u; /*0x31d*/
    count_1 >>= 3; /*0x324*/
    qmemcpy(dst, src, 8 * count_1); /*0x328*/
    src_1 = &src[8 * count_1]; /*0x328*/
    dst_2 = &dst[8 * count_1]; /*0x328*/
  }
  qmemcpy(dst_2, src_1, count); /*0x33c*/
  return dst_1; /*0x33f*/
}
// Function: 0x123C - ZeroMem
void *__cdecl ZeroMem(void *Buffer, UINTN Length)
{
  if ( !Length ) /*0x124f*/
    return Buffer; /*0x1251*/
  if ( !Buffer ) /*0x1259*/
    AssertReport( /*0x126c*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c",
      53,
      (__int64)"Buffer != ((void *) 0)");
  if ( Length > -(__int64)Buffer ) /*0x127a*/
    AssertReport( /*0x128f*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c",
      54,
      (__int64)"Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)");
  return InternalZeroMem((char *)Buffer, Length); /*0x12a4*/
}
// Function: 0x12AC - ReadUnaligned32
UINT32 __cdecl ReadUnaligned32(const UINT32 *Buffer)
{
  if ( !Buffer ) /*0x12b8*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 141, (__int64)"Buffer != ((void *) 0)"); /*0x12cd*/
  return *Buffer; /*0x12d4*/
}
// Function: 0x12DC - ReadUnaligned64
UINT64 __cdecl ReadUnaligned64(const UINT64 *Buffer)
{
  if ( !Buffer ) /*0x12e8*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 192, (__int64)"Buffer != ((void *) 0)"); /*0x12fd*/
  return *Buffer; /*0x1305*/
}
// Function: 0x130C - WriteUnaligned64
UINT64 __cdecl WriteUnaligned64(UINT64 *Buffer, UINT64 Value)
{
  if ( !Buffer ) /*0x131f*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 219, (__int64)"Buffer != ((void *) 0)"); /*0x1334*/
  *Buffer = Value; /*0x1339*/
  return Value; /*0x1344*/
}
// Function: 0x134C - AllocatePool
void *__cdecl AllocatePool(UINTN AllocationSize)
{
  __int64 v1; // rdx
  __int64 v2; // rax
  void *v3; // rcx
  void *v5; // [rsp+40h] [rbp+18h] BYREF

  v2 = (*(__int64 (__fastcall **)(__int64, __int64, void **))(BootServices + 64))(4, v1, &v5); /*0x1361*/
  v3 = v5; /*0x1364*/
  if ( v2 < 0 ) /*0x136e*/
    return 0; /*0x136e*/
  return v3; /*0x1375*/
}
// Function: 0x137C - AllocateZeroPool
void *__cdecl AllocateZeroPool(UINTN AllocationSize)
{
  void *Buffer; // rax

  Buffer = AllocatePool(AllocationSize); /*0x1388*/
  if ( Buffer ) /*0x1390*/
    return ZeroMem(Buffer, AllocationSize); /*0x1398*/
  return Buffer; /*0x139d*/
}
// Function: 0x13A4 - AllocateZeroPool_1
void __cdecl AllocateZeroPool_1(void *Buffer)
{
  __int64 v1; // rax

  v1 = (*(__int64 (__fastcall **)(void *))(BootServices + 72))(Buffer); /*0x13af*/
  if ( v1 < 0 ) /*0x13b5*/
  {
    DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0x13c6*/
    AssertReport( /*0x13de*/
      (__int64)"e:\\hs\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
      819,
      (__int64)"!EFI_ERROR (Status)");
  }
}
// Function: 0x118C - CopyGuid
GUID *__cdecl CopyGuid(GUID *DestinationGuid, const GUID *SourceGuid)
{
  UINT64 Unaligned64; // rax
  UINT64 Value; // rax

  Unaligned64 = ReadUnaligned64((const UINT64 *)&SourceGuid->Data1); /*0x119f*/
  WriteUnaligned64((UINT64 *)&DestinationGuid->Data1, Unaligned64); /*0x11aa*/
  Value = ReadUnaligned64((const UINT64 *)SourceGuid->Data4); /*0x11b3*/
  WriteUnaligned64((UINT64 *)DestinationGuid->Data4, Value); /*0x11bf*/
  return DestinationGuid; /*0x11cc*/
}
// Function: 0x11D4 - CompareGuid
BOOLEAN __cdecl CompareGuid(const GUID *Guid1, const GUID *Guid2)
{
  __int128 v4; // rdi
  UINT64 Unaligned64; // rbx

  *((_QWORD *)&v4 + 1) = ReadUnaligned64((const UINT64 *)&Guid1->Data1); /*0x11f6*/
  Unaligned64 = ReadUnaligned64((const UINT64 *)&Guid2->Data1); /*0x1202*/
  *(_QWORD *)&v4 = ReadUnaligned64((const UINT64 *)Guid1->Data4); /*0x120e*/
  return v4 == __PAIR128__(Unaligned64, ReadUnaligned64((const UINT64 *)Guid2->Data4)); /*0x1235*/
}
// Function: 0x2134 - CopyMem
void *__cdecl CopyMem(void *DestinationBuffer, const void *SourceBuffer, UINTN Length)
{
  void *DestinationBuffer_1; // rax
  unsigned __int64 v7; // rbp

  DestinationBuffer_1 = DestinationBuffer; /*0x20c9*/
  if ( Length ) /*0x20cf*/
  {
    v7 = Length - 1; /*0x20d1*/
    if ( Length - 1 > ~(unsigned __int64)DestinationBuffer ) /*0x20db*/
      AssertReport( /*0x20f0*/
        (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
        56,
        (__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
    if ( v7 > ~(unsigned __int64)SourceBuffer ) /*0x20fe*/
      AssertReport( /*0x2113*/
        (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
        57,
        (__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
    if ( DestinationBuffer == SourceBuffer ) /*0x211b*/
      return DestinationBuffer; /*0x211d*/
    else
      return InternalCopyMem((char *)DestinationBuffer, (char *)SourceBuffer, Length); /*0x212b*/
  }
  return DestinationBuffer_1; /*0x213f*/
}
// Function: 0x2148 - AsciiStrLen
UINTN __cdecl AsciiStrLen(const CHAR8 *String)
{
  const CHAR8 *v1; // rbx
  UINTN i; // rdi

  v1 = String; /*0x2152*/
  if ( !String ) /*0x2158*/
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\String.c", 1082, (__int64)"String != ((void *) 0)"); /*0x216d*/
  for ( i = 0; *v1; ++i ) /*0x2174*/
  {
    if ( i >= 0xF4240 ) /*0x2180*/
      AssertReport( /*0x2195*/
        (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\String.c",
        1090,
        (__int64)"Length < _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
    ++v1; /*0x219a*/
  }
  return i; /*0x21ad*/
}
// Function: 0x20AC - CopyMem
void *__cdecl CopyMem(void *DestinationBuffer, const void *SourceBuffer, UINTN Length)
{
  void *DestinationBuffer_1; // rax
  unsigned __int64 v7; // rbp

  DestinationBuffer_1 = DestinationBuffer; /*0x20c9*/
  if ( Length ) /*0x20cf*/
  {
    v7 = Length - 1; /*0x20d1*/
    if ( Length - 1 > ~(unsigned __int64)DestinationBuffer ) /*0x20db*/
      AssertReport( /*0x20f0*/
        (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
        56,
        (__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
    if ( v7 > ~(unsigned __int64)SourceBuffer ) /*0x20fe*/
      AssertReport( /*0x2113*/
        (__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
        57,
        (__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
    if ( DestinationBuffer == SourceBuffer ) /*0x211b*/
      return DestinationBuffer; /*0x211d*/
    else
      return InternalCopyMem((char *)DestinationBuffer, (char *)SourceBuffer, Length); /*0x212b*/
  }
  return DestinationBuffer_1; /*0x213f*/
}
// Function: 0x2280 - StrLen
UINTN __cdecl StrLen(const CHAR16 *Buffer)
{
  UINTN v1; // rdx
  UINTN v2; // rdi
  UINTN result; // rax

  v2 = v1; /*0x228a*/
  if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x2293*/
    AssertReport( /*0x22a8*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      128,
      (__int64)"((UINTN) String & 0x00000001) == 0");
  if ( !Buffer || !v2 ) /*0x22b7*/
    return 0; /*0x22d9*/
  result = 0; /*0x22b9*/
  if ( *Buffer ) /*0x22bb*/
  {
    while ( result < v2 - 1 ) /*0x22c7*/
    {
      if ( !Buffer[++result] ) /*0x22cc*/
        return result; /*0x22d0*/
    }
    return v2; /*0x22d4*/
  }
  return result; /*0x22e0*/
}
// Function: 0x22E8 - AsciiStrnLenS
UINTN __cdecl AsciiStrnLenS(const CHAR8 *SourceBuffer, UINTN MaxSize)
{
  UINTN result; // rax

  if ( !SourceBuffer || !MaxSize ) /*0x22f0*/
    return 0; /*0x230f*/
  result = 0; /*0x22f2*/
  if ( *SourceBuffer ) /*0x22f4*/
  {
    while ( result < MaxSize - 1 ) /*0x22ff*/
    {
      if ( !SourceBuffer[++result] ) /*0x2304*/
        return result; /*0x2308*/
    }
    return MaxSize; /*0x230b*/
  }
  return result; /*0x230a*/
}
// Function: 0x2314 - StrToAsciiStr
unsigned __int64 __fastcall StrToAsciiStr(const CHAR16 *Buffer, CHAR16 *SourceBuffer, UINTN n0xF4240)
{
  const CHAR16 *Buffer_1; // rbx
  const char *(Destination____((void__)_0)); // r8
  __int64 n2682; // rdx
  UINTN n0xF4240_1; // rax
  UINTN n0xF4240_2; // rbp

  Buffer_1 = Buffer; /*0x2339*/
  if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x233f*/
    AssertReport( /*0x2350*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      2677,
      (__int64)"((UINTN) Source & 0x00000001) == 0");
  if ( !SourceBuffer ) /*0x235b*/
  {
    (Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x235d*/
    n2682 = 2682; /*0x2364*/
LABEL_5:
    AssertReport( /*0x2369*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      n2682,
      (__int64)(Destination____((void__)_0)));
    return 0x8000000000000002uLL; /*0x237b*/
  }
  if ( !Buffer_1 ) /*0x2383*/
  {
    (Destination____((void__)_0)) = "(Source != ((void *) 0))"; /*0x2385*/
    n2682 = 2683; /*0x238c*/
    goto LABEL_5; /*0x2391*/
  }
  if ( n0xF4240 > 0xF4240 ) /*0x239a*/
  {
    (Destination____((void__)_0)) = "(DestMax <= (_gPcd_FixedAtBuild_PcdMaximumAsciiStringLength))"; /*0x239c*/
    n2682 = 2689; /*0x23a3*/
    goto LABEL_5; /*0x23a8*/
  }
  if ( !n0xF4240 ) /*0x23ad*/
  {
    (Destination____((void__)_0)) = "(DestMax != 0)"; /*0x23af*/
    n2682 = 2698; /*0x23b6*/
    goto LABEL_5; /*0x23bb*/
  }
  n0xF4240_1 = StrLen(Buffer_1); /*0x23c3*/
  n0xF4240_2 = n0xF4240_1; /*0x23c8*/
  if ( n0xF4240 <= n0xF4240_1 ) /*0x23ce*/
  {
    AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 2704, (__int64)"(DestMax > SourceLen)"); /*0x23df*/
    return 0x8000000000000005uLL; /*0x23ee*/
  }
  if ( Buffer_1 > SourceBuffer ) /*0x23f6*/
    goto LABEL_17; /*0x23f6*/
  if ( SourceBuffer >= &Buffer_1[n0xF4240_1 + 1] ) /*0x2403*/
  {
    if ( SourceBuffer > Buffer_1 ) /*0x2408*/
      goto LABEL_20; /*0x2408*/
LABEL_17:
    if ( Buffer_1 >= (CHAR16 *)((char *)SourceBuffer + n0xF4240) ) /*0x2411*/
      goto LABEL_19; /*0x2411*/
  }
  AssertReport( /*0x2413*/
    (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
    2709,
    (__int64)"!InternalSafeStringIsOverlap (Destination, DestMax, (void *)Source, (SourceLen + 1) * sizeof(CHAR16))");
LABEL_19:
  if ( Buffer_1 > SourceBuffer ) /*0x242a*/
  {
LABEL_22:
    if ( Buffer_1 < (CHAR16 *)((char *)SourceBuffer + n0xF4240) ) /*0x2445*/
      return 0x800000000000000FuLL; /*0x2445*/
    goto LABEL_27; /*0x2445*/
  }
LABEL_20:
  if ( SourceBuffer < &Buffer_1[n0xF4240_2 + 1] ) /*0x2437*/
    return 0x800000000000000FuLL; /*0x2451*/
  if ( Buffer_1 >= SourceBuffer ) /*0x243c*/
    goto LABEL_22; /*0x243c*/
LABEL_27:
  while ( *Buffer_1 ) /*0x2482*/
  {
    if ( *Buffer_1 >= 0x100u ) /*0x245b*/
      AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 2719, (__int64)"*Source < 0x100"); /*0x246c*/
    *(_BYTE *)SourceBuffer = *(_BYTE *)Buffer_1; /*0x2473*/
    SourceBuffer = (CHAR16 *)((char *)SourceBuffer + 1); /*0x2475*/
    ++Buffer_1; /*0x2478*/
  }
  *(_BYTE *)SourceBuffer = 0; /*0x2484*/
  return 0; /*0x2498*/
}