Newer
Older
AMI-Aptio-BIOS-Reversed / 117828F1-DA7D-4BC1-8B58-9A954FED5121 / HiiStandalone.c
@Ajax Dong Ajax Dong 2 days ago 117 KB Init
#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"

// HiiStandalone.c - Extracted from 117828F1-DA7D-4BC1-8B58-9A954FED5121.c
// Total functions: 93

// Function: HiiGetString @ 0x2e0 (0x15a bytes)
// Index: 1/906

EFI_STRING __cdecl HiiGetString(EFI_HII_HANDLE HiiHandle, EFI_STRING_ID StringId, const CHAR8 *Language)
{
  const CHAR8 *FirstString_1; // r9
  const CHAR8 *FirstString; // rbx
  EFI_STRING result; // rax
  UINTN v8; // rax
  __int64 v9; // rsi
  EFI_STRING v10; // rbx
  EFI_STRING v11; // r9
  __int64 v12; // rax
  EFI_STRING_ID StringId_1; // [rsp+68h] [rbp+10h] BYREF

  StringId_1 = StringId; /*0x2ef*/
  FirstString = FirstString_1; /*0x305*/
  if ( !HiiHandle ) /*0x315*/
    DebugAssert( /*0x329*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
      0x46u,
      "HiiHandle != ((void *) 0)");
  if ( !Language ) /*0x33b*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0x47u, "String != ((void *) 0)"); /*0x350*/
  if ( FirstString ) /*0x358*/
  {
    v8 = AsciiStrLen(FirstString); /*0x367*/
    result = (EFI_STRING)MemAllocCopyPool(4, v8 + 1, (__int64)FirstString); /*0x378*/
  }
  else
  {
    result = (EFI_STRING)HiiGetHiiHandle(HiiHandle); /*0x35d*/
  }
  if ( result ) /*0x383*/
  {
    v9 = 0x8000000000000002uLL; /*0x38e*/
    v10 = result; /*0x398*/
    if ( *(_BYTE *)result ) /*0x39b*/
    {
      do /*0x406*/
      {
        v11 = v10; /*0x3a0*/
        if ( *(_BYTE *)v10 ) /*0x3a3*/
        {
          do /*0x3b0*/
          {
            if ( *(_BYTE *)v10 == 59 ) /*0x3ab*/
              break; /*0x3ab*/
            v10 = (EFI_STRING)((char *)v10 + 1); /*0x3ad*/
          }
          while ( *(_BYTE *)v10 ); /*0x3b0*/
          if ( *(_BYTE *)v10 ) /*0x3b5*/
          {
            *(_BYTE *)v10 = 0; /*0x3ba*/
            v10 = (EFI_STRING)((char *)v10 + 1); /*0x3bd*/
          }
        }
        if ( StringId_1 ) /*0x3d7*/
          v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, _QWORD, EFI_STRING, const CHAR8 *, _QWORD))(qword_58080 + 16))( /*0x3fb*/
                  qword_58080,
                  HiiHandle,
                  StringId_1,
                  v11,
                  Language,
                  0);
        else
          v12 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, EFI_STRING_ID *, EFI_STRING, _QWORD, const CHAR8 *, _QWORD))qword_58080)( /*0x3ed*/
                  qword_58080,
                  HiiHandle,
                  &StringId_1,
                  v11,
                  0,
                  Language,
                  0);
        v9 = v12; /*0x401*/
      }
      while ( v12 >= 0 && *(_BYTE *)v10 ); /*0x406*/
    }
    MemFreePool(); /*0x40e*/
    LOWORD(result) = 0; /*0x416*/
    if ( v9 >= 0 ) /*0x41a*/
      LOWORD(result) = StringId_1; /*0x41c*/
  }
  else
  {
    LOWORD(result) = 0; /*0x385*/
  }
  return result; /*0x430*/
}


// Function: HiiGetStringToLanguage @ 0x43c (0x21a bytes)
// Index: 2/906

__int64 __fastcall HiiGetStringToLanguage(void *HiiHandle, unsigned __int16 a2, void *a3)
{
  __int64 v6; // rdi
  char *HiiHandle_1; // r12
  __int64 v8; // rax
  __int64 v9; // rbx
  void *v10; // r8
  _BYTE *StringByGuid; // rsi
  unsigned __int64 n8; // [rsp+40h] [rbp-38h] BYREF
  unsigned __int64 n8_1; // [rsp+48h] [rbp-30h] BYREF
  char v15; // [rsp+98h] [rbp+20h] BYREF

  if ( !HiiHandle ) /*0x472*/
    DebugAssert( /*0x487*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
      0xE7u,
      "HiiHandle != ((void *) 0)");
  if ( !a2 ) /*0x49a*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 0xE8u, "StringId != 0"); /*0x4af*/
  v6 = 0; /*0x4b7*/
  HiiHandle_1 = (char *)HiiGetHiiHandle(HiiHandle); /*0x4bf*/
  if ( HiiHandle_1 ) /*0x4c5*/
  {
    n8 = 0; /*0x4e8*/
    if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x502*/
           L"PlatformLang",
           &unk_27830,
           0,
           &n8,
           0) == 0x8000000000000005uLL )
    {
      v8 = MemAllocPool(4, n8); /*0x50e*/
      v9 = v8; /*0x513*/
      if ( v8 ) /*0x519*/
      {
        if ( (*(__int64 (__fastcall **)(const wchar_t *, void *, _QWORD, unsigned __int64 *, __int64))(RuntimeServices + 72))( /*0x543*/
               L"PlatformLang",
               &unk_27830,
               0,
               &n8,
               v8) >= 0 )
        {
LABEL_11:
          v10 = &unk_2515A; /*0x550*/
          if ( a3 ) /*0x56a*/
            v10 = a3; /*0x56a*/
          StringByGuid = HiiGetStringByGuid(HiiHandle_1, 0, v10); /*0x57c*/
          if ( StringByGuid ) /*0x582*/
          {
            n8_1 = 0; /*0x5b8*/
            if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, char *, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x5c3*/
                   qword_58080,
                   StringByGuid,
                   HiiHandle,
                   a2,
                   &v15,
                   &n8_1,
                   0) == 0x8000000000000005uLL )
            {
              v6 = MemAllocZeroPool(n8_1); /*0x5cf*/
              if ( v6 ) /*0x5d5*/
              {
                if ( (*(__int64 (__fastcall **)(__int64, _BYTE *, void *, _QWORD, __int64, unsigned __int64 *, _QWORD))(qword_58080 + 8))( /*0x606*/
                       qword_58080,
                       StringByGuid,
                       HiiHandle,
                       a2,
                       v6,
                       &n8_1,
                       0) < 0 )
                {
                  MemFreePool(); /*0x60b*/
                  v6 = 0; /*0x610*/
                }
              }
            }
          }
          MemFreePool(); /*0x616*/
          if ( v9 ) /*0x61e*/
            MemFreePool(); /*0x623*/
          if ( StringByGuid ) /*0x62b*/
            MemFreePool(); /*0x630*/
          return v6; /*0x630*/
        }
        MemFreePool(); /*0x548*/
      }
    }
    v9 = 0; /*0x54d*/
    goto LABEL_11; /*0x54d*/
  }
  return v6; /*0x649*/
}


// Function: HiiPackageListBuild @ 0x658 (0x148 bytes)
// Index: 3/906

__int64 HiiPackageListBuild(__int64 a1, __int64 a2, ...)
{
  unsigned int *v4; // rdi
  int v5; // ebx
  unsigned int *v6; // rax
  unsigned int **v7; // rsi
  unsigned int n8; // ebx
  __int64 *v9; // rax
  __int64 *v10; // rsi
  va_list v11; // rbx
  _BYTE *v12; // rbp
  int n4; // eax
  __int64 v14; // r12
  __int64 v15; // rax
  __int64 v16; // rcx
  __int64 v18[9]; // [rsp+20h] [rbp-48h] BYREF
  unsigned int *v19; // [rsp+80h] [rbp+18h] BYREF
  va_list va; // [rsp+80h] [rbp+18h]
  va_list va1; // [rsp+88h] [rbp+20h] BYREF

  va_start(va1, a2);
  va_start(va, a2);
  v19 = va_arg(va1, unsigned int *); /*0x658*/
  if ( !a1 ) /*0x68a*/
    DebugAssert( /*0x69f*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x9Bu,
      "PackageListGuid != ((void *) 0)");
  v4 = v19; /*0x6a4*/
  v5 = 0; /*0x6ac*/
  v6 = v19; /*0x6af*/
  if ( !v19 ) /*0x6b5*/
    return 0; /*0x6b5*/
  va_copy((va_list)v7, va); /*0x6bb*/
  do /*0x6d3*/
  {
    ++v7; /*0x6cb*/
    v5 = v5 + StrLenAscii(v6) - 4; /*0x6cf*/
    v6 = *v7; /*0x6d3*/
  }
  while ( *v7 ); /*0x6d3*/
  if ( !v5 ) /*0x6de*/
    return 0; /*0x6de*/
  n8 = v5 + 24; /*0x6e4*/
  v9 = (__int64 *)MemAllocZeroPool(n8); /*0x6e9*/
  v10 = v9; /*0x6ee*/
  if ( !v9 ) /*0x6f4*/
    return 0; /*0x78f*/
  Assert_59(v9, a1); /*0x700*/
  *((_DWORD *)v10 + 4) = n8; /*0x705*/
  va_copy(v11, va); /*0x708*/
  v12 = (char *)v10 + 20; /*0x710*/
  do /*0x73b*/
  {
    n4 = StrLenAscii(v4); /*0x717*/
    v14 = (unsigned int)(n4 - 4); /*0x71c*/
    if ( n4 != 4 ) /*0x723*/
      sub_272C(v12, (_BYTE *)v4 + 4, (unsigned int)(n4 - 4)); /*0x72f*/
    ++v11; /*0x734*/
    v12 += v14; /*0x738*/
    v4 = (unsigned int *)*v11; /*0x73b*/
  }
  while ( *v11 ); /*0x73b*/
  sub_272C(v12, byte_251D0, 4); /*0x753*/
  v15 = (*(__int64 (__fastcall **)(__int64, __int64 *, __int64, __int64 *))qword_58090)(qword_58090, v10, a2, v18); /*0x76d*/
  v16 = v18[0]; /*0x76f*/
  if ( v15 < 0 ) /*0x777*/
    v16 = 0; /*0x777*/
  v18[0] = v16; /*0x77b*/
  MemFreePool(); /*0x783*/
  return v18[0]; /*0x791*/
}


// Function: HiiNewString @ 0x7a0 (0x86 bytes)
// Index: 4/906

void __fastcall HiiNewString(EFI_HII_HANDLE HiiHandle)
{
  __int64 v2; // rax

  if ( !HiiHandle ) /*0x7b5*/
    DebugAssert( /*0x7ca*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x101u,
      "HiiHandle != ((void *) 0)");
  v2 = (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE))(qword_58090 + 8))(qword_58090, HiiHandle); /*0x7dc*/
  if ( v2 < 0 ) /*0x7ed*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0x803*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x103u, "!EFI_ERROR (Status)"); /*0x81b*/
  }
}


// Function: HiiConfigRoutingExtractConfig @ 0x828 (0xbb bytes)
// Index: 5/906

__int64 __fastcall HiiConfigRoutingExtractConfig(__int64 StartOfBuffer, __int64 a2, __int64 n310)
{
  __int64 v6; // rax
  __int64 v7; // rcx
  _BYTE v9[24]; // [rsp+30h] [rbp-18h] BYREF
  __int64 v10; // [rsp+68h] [rbp+20h] BYREF

  if ( !StartOfBuffer ) /*0x854*/
    DebugAssert( /*0x869*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x1B8u,
      "ConfigRequest != ((void *) 0)");
  if ( !a2 ) /*0x87b*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x1B9u, "Block != ((void *) 0)"); /*0x890*/
  v6 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, __int64 *, _BYTE *))(qword_58098 + 24))( /*0x8bc*/
         qword_58098,
         StartOfBuffer,
         a2,
         n310,
         &v10,
         v9);
  v7 = v10; /*0x8bf*/
  if ( v6 < 0 ) /*0x8d1*/
    return 0; /*0x8d1*/
  return v7; /*0x8dd*/
}


// Function: HiiGetStringByLanguage @ 0x8e4 (0x100 bytes)
// Index: 6/906

__int64 __fastcall HiiGetStringByLanguage(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  __int64 v9; // rbx
  __int64 v10; // rax
  unsigned __int64 n8[5]; // [rsp+30h] [rbp-28h] BYREF
  char v12; // [rsp+78h] [rbp+20h] BYREF

  v4 = qword_58050; /*0x8f6*/
  if ( !qword_58050 ) /*0x90c*/
  {
    if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &qword_58050) < 0 ) /*0x92e*/
      return 0; /*0x92e*/
    v4 = qword_58050; /*0x930*/
    if ( !qword_58050 ) /*0x93a*/
      return 0; /*0x93a*/
  }
  n8[0] = 0; /*0x943*/
  if ( a3 ) /*0x94b*/
  {
    v9 = a3; /*0x94d*/
  }
  else
  {
    LOBYTE(a4) = 1; /*0x95c*/
    v10 = (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, char *, __int64, __int64, wchar_t *))(v4 + 8))( /*0x96c*/
            v4,
            n8,
            &v12,
            a4,
            a1,
            RstHiiConfig);
    if ( v10 >= 0 ) /*0x972*/
      return MemAllocZeroPool(2u); /*0x97e*/
    if ( v10 != 0x8000000000000005uLL ) /*0x98d*/
      return 0; /*0x98d*/
    v9 = MemAllocZeroPool(n8[0]); /*0x999*/
    if ( !v9 ) /*0x99f*/
      return 0; /*0x93e*/
    v4 = qword_58050; /*0x9a1*/
  }
  LOBYTE(a4) = a3 == 0; /*0x9b6*/
  if ( (*(__int64 (__fastcall **)(__int64, unsigned __int64 *, __int64, __int64, __int64, wchar_t *))(v4 + 8))( /*0x9ca*/
         v4,
         n8,
         v9,
         a4,
         a1,
         RstHiiConfig) < 0 )
    return 0; /*0x9ca*/
  return v9; /*0x9db*/
}


// Function: HiiConfigRoutingExtract @ 0x9e4 (0x1ee bytes)
// Index: 7/906

__int64 __fastcall HiiConfigRoutingExtract(__int64 a1, unsigned __int16 *RstHiiConfig, __int64 ImageHandle)
{
  unsigned __int16 *RstHiiConfig_1; // rbx
  UINTN v6; // rsi
  const CHAR16 *FirstString_1; // rbp
  unsigned __int64 j_1; // r12
  const CHAR16 *FirstString; // rax
  CHAR16 *StartOfBuffer; // rax
  const CHAR16 *StartOfBuffer_4; // rsi
  __int64 v13; // rdi
  CHAR16 *StartOfBuffer_1; // rsi
  unsigned __int64 i; // r13
  unsigned __int64 v16; // rax
  CHAR16 *StartOfBuffer_2; // rsi
  unsigned __int16 v18; // ax
  CHAR16 *StartOfBuffer_3; // rbx
  unsigned __int64 j; // rsi
  unsigned __int64 v21; // rax
  unsigned __int16 *v22; // rcx
  char k; // dl
  unsigned __int16 n0x41; // ax

  RstHiiConfig_1 = RstHiiConfig; /*0xa06*/
  v6 = 0; /*0xa0c*/
  if ( RstHiiConfig ) /*0xa12*/
    v6 = StrLen(RstHiiConfig); /*0xa1c*/
  FirstString_1 = 0; /*0xa1f*/
  j_1 = 0; /*0xa22*/
  if ( ImageHandle ) /*0xa28*/
  {
    FirstString = (const CHAR16 *)sub_2DB8(ImageHandle); /*0xa2d*/
    FirstString_1 = FirstString; /*0xa32*/
    if ( !FirstString ) /*0xa38*/
      return 0; /*0xa3c*/
    j_1 = Assert_105(FirstString); /*0xa49*/
  }
  StartOfBuffer = (CHAR16 *)MemAllocZeroPool(4 * (j_1 + 2 * v6) + 100); /*0xa58*/
  StartOfBuffer_4 = StartOfBuffer; /*0xa5d*/
  if ( !StartOfBuffer ) /*0xa63*/
    return 0; /*0xa63*/
  v13 = Assert_36(StartOfBuffer, (const CHAR16 *)&GUID__); /*0xa77*/
  StartOfBuffer_1 = (CHAR16 *)&StartOfBuffer_4[StrLen(StartOfBuffer_4)]; /*0xa7f*/
  if ( a1 ) /*0xa86*/
  {
    for ( i = 0; i < 0x10; ++i ) /*0xa88*/
    {
      v16 = HiiCfgArrayNext(StartOfBuffer_1, 160, *(unsigned __int8 *)(i + a1), 2u); /*0xa9f*/
      StartOfBuffer_1 += v16; /*0xaa7*/
    }
  }
  Assert_36(StartOfBuffer_1, (const CHAR16 *)&GUID___0); /*0xabb*/
  StartOfBuffer_2 = &StartOfBuffer_1[StrLen(StartOfBuffer_1)]; /*0xac8*/
  if ( RstHiiConfig_1 ) /*0xacf*/
  {
    while ( 1 ) /*0xaf2*/
    {
      v18 = *RstHiiConfig_1; /*0xaf2*/
      if ( !*RstHiiConfig_1 ) /*0xaf2*/
        break; /*0xaf2*/
      ++RstHiiConfig_1; /*0xaea*/
      StartOfBuffer_2 += HiiCfgArrayNext(StartOfBuffer_2, 160, v18, 4u); /*0xaee*/
    }
  }
  Assert_36(StartOfBuffer_2, (const CHAR16 *)&GUID___1); /*0xb05*/
  StartOfBuffer_3 = &StartOfBuffer_2[StrLen(StartOfBuffer_2)]; /*0xb12*/
  for ( j = 0; j < j_1; StartOfBuffer_3 += v21 ) /*0xb1c*/
    v21 = HiiCfgArrayNext(StartOfBuffer_3, 160, *((unsigned __int8 *)FirstString_1 + j++), 2u); /*0xb31*/
  *StartOfBuffer_3 = 0; /*0xb49*/
  if ( !v13 ) /*0xb52*/
    DebugAssert( /*0xb67*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
      0x18Bu,
      "ConfigString != ((void *) 0)");
  v22 = (unsigned __int16 *)v13; /*0xb6c*/
  for ( k = 0; *v22; ++v22 ) /*0xb72*/
  {
    n0x41 = *v22; /*0xb78*/
    if ( *v22 == 61 ) /*0xb7f*/
    {
      k = 1; /*0xb81*/
    }
    else if ( n0x41 == 38 ) /*0xb89*/
    {
      k = 0; /*0xb8b*/
    }
    else if ( k && n0x41 >= 0x41u && n0x41 <= 0x46u ) /*0xb9f*/
    {
      *v22 = n0x41 + 32; /*0xba5*/
    }
  }
  return v13; /*0xbc4*/
}


// Function: HiiGetConfigString @ 0xbd4 (0xce bytes)
// Index: 8/906

bool __fastcall HiiGetConfigString(__int64 a1, wchar_t *RstHiiConfig, __int64 a3, __int64 a4)
{
  const CHAR16 *StringByLanguage; // rdi
  UINTN v7; // rbx
  unsigned __int64 n8; // rbx
  CHAR8 *StartOfBuffer; // rsi
  __int64 v10; // rbx
  _BYTE v11[24]; // [rsp+30h] [rbp-18h] BYREF
  __int64 v12; // [rsp+60h] [rbp+18h] BYREF

  v12 = a3; /*0xbe3*/
  StringByLanguage = (const CHAR16 *)HiiGetStringByLanguage(a1, RstHiiConfig, 0, a4); /*0xbf7*/
  if ( !StringByLanguage ) /*0xbfd*/
    return 0; /*0xbfd*/
  v7 = 2 * StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00") + 2; /*0xc15*/
  n8 = v7 + 2 * StrLen(StringByLanguage) + 2; /*0xc1f*/
  StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xc45*/
  HiiCfgArrayGet( /*0xc48*/
    StartOfBuffer,
    n8,
    (unsigned __int8 *)L"%s&%s",
    L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00",
    StringByLanguage);
  MemFreePool(); /*0xc50*/
  if ( !StartOfBuffer ) /*0xc58*/
    return 0; /*0xbff*/
  v10 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64, __int64 *, _BYTE *))(qword_58098 + 32))( /*0xc7f*/
          qword_58098,
          StartOfBuffer,
          a4,
          &v12,
          v11);
  MemFreePool(); /*0xc82*/
  return v10 >= 0; /*0xc9c*/
}


// Function: HiiBlockToConfig @ 0xca4 (0x12f bytes)
// Index: 9/906

bool __fastcall HiiBlockToConfig(__int64 a1, wchar_t *RstHiiConfig, CHAR16 *n310, __int64 a4, CHAR16 *n310_2)
{
  UINTN v9; // rax
  unsigned __int64 n8; // rbx
  CHAR8 *StartOfBuffer; // rax
  unsigned __int8 *%s%s; // r8
  __int64 StartOfBuffer_1; // rdi
  __int64 Config; // rsi
  UINTN v16; // rax
  __int64 v17; // r9
  __int64 StringByLanguage; // rbx
  CHAR16 *n310_1; // [rsp+20h] [rbp-28h]

  if ( !a4 ) /*0xcd9*/
    DebugAssert("c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c", 0x8D1u, "Buffer != ((void *) 0)"); /*0xcee*/
  v9 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xcff*/
  if ( n310_2 ) /*0xd07*/
  {
    n8 = 2 * v9 + 2 * StrLen(n310_2) + 2; /*0xd32*/
    StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd3a*/
    n310_1 = n310_2; /*0xd3f*/
    %s%s = (unsigned __int8 *)L"%s%s"; /*0xd44*/
  }
  else
  {
    n8 = 2 * v9 + 66; /*0xd09*/
    StartOfBuffer = (CHAR8 *)MemAllocZeroPool(n8); /*0xd11*/
    n310_1 = n310; /*0xd16*/
    %s%s = (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX"; /*0xd1b*/
  }
  StartOfBuffer_1 = (__int64)StartOfBuffer; /*0xd58*/
  HiiCfgArrayGet(StartOfBuffer, n8, %s%s, L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00", n310_1); /*0xd5b*/
  if ( !StartOfBuffer_1 ) /*0xd63*/
    return 0; /*0xd63*/
  Config = HiiConfigRoutingExtractConfig(StartOfBuffer_1, a4, (__int64)n310); /*0xd7a*/
  MemFreePool(); /*0xd7d*/
  if ( !Config ) /*0xd85*/
    return 0; /*0xd65*/
  v16 = StrLen(L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00"); /*0xd8e*/
  StringByLanguage = HiiGetStringByLanguage(a1, RstHiiConfig, Config + 2 * v16 + 2, v17); /*0xda6*/
  MemFreePool(); /*0xda9*/
  return StringByLanguage != 0; /*0xdc8*/
}


// Function: HiiGetHiiHandle @ 0xdd4 (0xab bytes)
// Index: 10/906

__int64 __fastcall HiiGetHiiHandle(EFI_HII_HANDLE HiiHandle)
{
  __int64 v3; // rax
  __int64 v4; // rbx
  char v5; // [rsp+38h] [rbp+10h] BYREF
  __int64 v6; // [rsp+40h] [rbp+18h] BYREF

  if ( !HiiHandle ) /*0xded*/
    DebugAssert( /*0xe00*/
      "c:\\udk\\myworkspace\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLanguage.c",
      0x2Fu,
      "HiiHandle != ((void *) 0)");
  v6 = 0; /*0xe0c*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, char *, __int64 *))(qword_58080 + 24))( /*0xe32*/
         qword_58080,
         HiiHandle,
         &v5,
         &v6) != 0x8000000000000005uLL )
    return 0; /*0xe32*/
  v3 = MemAllocZeroPool(v6); /*0xe3d*/
  v4 = v3; /*0xe42*/
  if ( !v3 ) /*0xe48*/
    return 0; /*0xe48*/
  if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, __int64, __int64 *))(qword_58080 + 24))( /*0xe65*/
         qword_58080,
         HiiHandle,
         v3,
         &v6) < 0 )
  {
    MemFreePool(); /*0xe6a*/
    return 0; /*0xe36*/
  }
  return v4; /*0xe79*/
}


// Function: HiiCreateEventEx @ 0xe80 (0x181 bytes)
// Index: 11/906

__int64 __fastcall HiiCreateEventEx(__int64 a1, __int64 n8, __int64 sub_599C, __int64 a4, __int64 a5)
{
  __int64 v9; // rax
  __int64 v10; // rax
  __int64 v11; // rdx
  __int64 v12; // r8
  __int64 v13; // r9
  _QWORD v15[3]; // [rsp+30h] [rbp-18h] BYREF

  if ( !a1 ) /*0xeb9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x98u, "ProtocolGuid != ((void *) 0)"); /*0xeca*/
  if ( !sub_599C ) /*0xedc*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x99u, "NotifyFunction != ((void *) 0)"); /*0xeed*/
  if ( !a5 ) /*0xf02*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0x9Au, "Registration != ((void *) 0)"); /*0xf13*/
  v9 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64, _QWORD *))(qword_58070 + 80))( /*0xf37*/
         512,
         n8,
         sub_599C,
         a4,
         v15);
  if ( v9 < 0 ) /*0xf4d*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0xf61*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xA7u, "!EFI_ERROR (Status)"); /*0xf75*/
  }
  v10 = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64))(qword_58070 + 168))(a1, v15[0], a5); /*0xf8e*/
  LOBYTE(v13) = 15; /*0xf94*/
  if ( v10 < 0 ) /*0xfa4*/
  {
    DebugPrintSerial(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10, v13); /*0xfb9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c", 0xB3u, "!EFI_ERROR (Status)"); /*0xfcd*/
  }
  (*(void (__fastcall **)(_QWORD, __int64, __int64, __int64))(qword_58070 + 104))(v15[0], v11, v12, v13); /*0xfde*/
  return v15[0]; /*0xffa*/
}


// Function: HiiGetStringByGuid @ 0x1004 (0x151 bytes)
// Index: 12/906

_BYTE *HiiGetStringByGuid(char *HiiHandle, char a2, ...)
{
  CHAR8 *v4; // rbp
  CHAR8 **v5; // r13
  unsigned __int64 n3; // rsi
  UINTN n3_1; // rbx
  CHAR8 n59_1; // al
  char *HiiHandle_1; // rdi
  char n59; // al
  _BYTE *result; // rax
  CHAR8 *String; // [rsp+70h] [rbp+18h] BYREF
  va_list Stringa; // [rsp+70h] [rbp+18h]
  va_list va1; // [rsp+78h] [rbp+20h] BYREF

  va_start(va1, a2);
  va_start(Stringa, a2);
  String = va_arg(va1, CHAR8 *); /*0x1004*/
  if ( !HiiHandle ) /*0x1032*/
    DebugAssert( /*0x1047*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\UefiLib\\UefiLib.c",
      0x54Fu,
      "SupportedLanguages != ((void *) 0)");
  v4 = String; /*0x104c*/
  if ( String ) /*0x1054*/
  {
    va_copy((va_list)v5, Stringa); /*0x105a*/
    do /*0x1114*/
    {
      n3 = 3; /*0x1062*/
      if ( AsciiStrLen(v4) <= 3 ) /*0x106f*/
        n3_1 = AsciiStrLen(v4); /*0x107e*/
      else
        n3_1 = 3; /*0x1071*/
      if ( a2 ) /*0x1084*/
      {
LABEL_29:
        while ( n3_1 ) /*0x110e*/
        {
          HiiHandle_1 = HiiHandle; /*0x10a7*/
          if ( *HiiHandle ) /*0x10a3*/
          {
            while ( 1 ) /*0x10af*/
            {
              if ( a2 ) /*0x10af*/
                goto LABEL_37; /*0x10af*/
              while ( *HiiHandle_1 == 59 ) /*0x10be*/
                ++HiiHandle_1; /*0x10b7*/
              n59 = *HiiHandle_1; /*0x10c0*/
              n3 = 0; /*0x10c2*/
              while ( n59 && n59 != 59 ) /*0x10c8*/
                n59 = HiiHandle_1[++n3]; /*0x10cd*/
              if ( n3_1 <= n3 ) /*0x10d7*/
              {
LABEL_37:
                if ( !StrToDecimal(HiiHandle_1, v4, n3_1) ) /*0x10e2*/
                  break; /*0x10e2*/
              }
              HiiHandle_1 += n3; /*0x10ec*/
              if ( !*HiiHandle_1 ) /*0x10ef*/
                goto LABEL_25; /*0x10f2*/
            }
            result = (_BYTE *)MemAllocZeroPool(n3 + 1); /*0x1136*/
            if ( result ) /*0x113e*/
            {
              if ( n3 ) /*0x1143*/
                return sub_272C(result, HiiHandle_1, n3); /*0x114e*/
              return result; /*0x114e*/
            }
            return 0; /*0x113e*/
          }
LABEL_25:
          if ( a2 ) /*0x10f7*/
            break; /*0x10f7*/
          if ( !--n3_1 ) /*0x10fd*/
            break; /*0x10fd*/
          do /*0x1109*/
          {
            if ( v4[n3_1] == 45 ) /*0x1103*/
              break; /*0x1103*/
            --n3_1; /*0x1105*/
          }
          while ( n3_1 ); /*0x1109*/
        }
      }
      else
      {
        n59_1 = *v4; /*0x108a*/
        n3_1 = 0; /*0x108d*/
        if ( *v4 ) /*0x108a*/
        {
          do /*0x109f*/
          {
            if ( n59_1 == 59 ) /*0x1095*/
              break; /*0x1095*/
            n59_1 = v4[++n3_1]; /*0x109a*/
          }
          while ( n59_1 ); /*0x109f*/
          goto LABEL_29; /*0x109f*/
        }
      }
      v4 = *++v5; /*0x1114*/
    }
    while ( *v5 ); /*0x1114*/
  }
  return 0; /*0x1123*/
}


// Function: HiiCfgArrayGet @ 0x12b8 (0x97 bytes)
// Index: 17/906

UINTN HiiCfgArrayGet(CHAR8 *StartOfBuffer, unsigned __int64 a2, unsigned __int8 *a3, ...)
{
  va_list va; // [rsp+68h] [rbp+20h] BYREF

  va_start(va, a3);
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x12df*/
    DebugAssert( /*0x12f4*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x47u,
      "(((UINTN) (StartOfBuffer)) & 0x01) == 0");
  if ( ((unsigned __int8)a3 & 1) != 0 ) /*0x1306*/
    DebugAssert( /*0x131b*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x48u,
      "(((UINTN) (FormatString)) & 0x01) == 0");
  return AsciiSPrint(StartOfBuffer, a2 >> 1, FormatString, a3, va, 0); /*0x1347*/
}


// Function: HiiCfgArraySet @ 0x1350 (0x6f bytes)
// Index: 18/906

UINTN HiiCfgArraySet(CHAR8 *StartOfBuffer, unsigned __int64 n256, char *%a_SN:%a__%a, ...)
{
  va_list va; // [rsp+68h] [rbp+20h] BYREF

  va_start(va, %a_SN:%a__%a);
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x1376*/
    DebugAssert( /*0x138b*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0xD7u,
      "(((UINTN) (StartOfBuffer)) & 0x01) == 0");
  return AsciiSPrint(StartOfBuffer, n256 >> 1, FormatString_0, %a_SN:%a__%a, va, 0); /*0x13b7*/
}


// Function: HiiCfgArrayNext @ 0x13c0 (0x6a bytes)
// Index: 19/906

unsigned __int64 __fastcall HiiCfgArrayNext(_BYTE *StartOfBuffer, int n160, unsigned __int64 a3, unsigned __int64 n2)
{
  if ( ((unsigned __int8)StartOfBuffer & 1) != 0 ) /*0x13e4*/
    DebugAssert( /*0x13f9*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLib.c",
      0x16Cu,
      "(((UINTN) (Buffer)) & 0x01) == 0");
  return HiiBuildDevicePath(StartOfBuffer, 160, a3, n2); /*0x1424*/
}


// Function: HiiMemAlloc @ 0x142c (0x2c bytes)
// Index: 20/906

UINTN HiiMemAlloc(CHAR8 *StartOfBuffer, UINTN n256, char *ASSERT_%a(%d):_%a_n, ...)
{
  va_list va; // [rsp+58h] [rbp+20h] BYREF

  va_start(va, ASSERT_%a(%d):_%a_n);
  return AsciiSPrint(StartOfBuffer, n256, 0, ASSERT_%a(%d):_%a_n, va, 0); /*0x1453*/
}


// Function: HiiMemFree @ 0x1458 (0x33 bytes)
// Index: 21/906

_BYTE *__fastcall HiiMemFree(
        _BYTE *StartOfBuffer,
        unsigned __int64 StartOfBuffer_1,
        __int64 i,
        __int16 n32,
        __int64 n2)
{
  __int64 j; // r10

  for ( j = 0; j < i; ++j ) /*0x145e*/
  {
    if ( (unsigned __int64)StartOfBuffer >= StartOfBuffer_1 ) /*0x1463*/
      break; /*0x1463*/
    *StartOfBuffer = n32; /*0x146b*/
    if ( n2 != 1 ) /*0x146e*/
      StartOfBuffer[1] = HIBYTE(n32); /*0x1477*/
    StartOfBuffer += n2; /*0x147a*/
  }
  return StartOfBuffer; /*0x148a*/
}


// Function: HiiDevicePathExtract @ 0x148c (0x7f bytes)
// Index: 22/906

_BYTE *__fastcall HiiDevicePathExtract(_BYTE *_r_n, unsigned __int64 a2, __int64 n16)
{
  int n16_1; // edi
  _BYTE *_r_n_1; // rbx
  unsigned __int64 n16_2; // rsi
  unsigned __int64 v7; // rtt

  n16_1 = n16; /*0x14a0*/
  _r_n_1 = _r_n; /*0x14a6*/
  *_r_n = 0; /*0x14a9*/
  n16_2 = (unsigned int)n16; /*0x14ac*/
  do /*0x14f1*/
  {
    if ( !n16_1 ) /*0x14ba*/
      DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c", 0x2Fu, "Divisor != 0"); /*0x14cd*/
    ++_r_n_1; /*0x14d7*/
    v7 = a2; /*0x14da*/
    a2 /= n16_2; /*0x14e4*/
    *_r_n_1 = a0123456789abcd[(unsigned int)(v7 % n16_2)]; /*0x14ec*/
  }
  while ( a2 ); /*0x14f1*/
  return _r_n_1; /*0x1505*/
}


// Function: HiiBuildDevicePath @ 0x150c (0x1ec bytes)
// Index: 23/906

unsigned __int64 __fastcall HiiBuildDevicePath(
        _BYTE *StartOfBuffer,
        int n160,
        unsigned __int64 a3,
        unsigned __int64 n0x26)
{
  _BYTE *StartOfBuffer_1; // rbx
  char v7; // bp
  _BYTE *StartOfBuffer_2; // r13
  unsigned __int64 StartOfBuffer_3; // r12
  _BYTE *v10; // rsi
  unsigned __int64 v11; // r11
  unsigned __int64 v12; // rcx
  unsigned __int64 v13; // rdx
  int v14; // ebp
  __int16 v15; // r9
  __int64 v16; // r8
  __int64 v17; // rax
  _BYTE *StartOfBuffer_4; // rax
  __int64 v19; // rcx
  _BYTE _r_n[48]; // [rsp+30h] [rbp-48h] BYREF

  StartOfBuffer_1 = StartOfBuffer; /*0x1530*/
  v7 = -96; /*0x1533*/
  if ( !StartOfBuffer ) /*0x153f*/
    DebugAssert( /*0x1552*/
      "c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c",
      0xBCu,
      "Buffer != ((void *) 0)");
  if ( n0x26 >= 0x26 ) /*0x1565*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BasePrintLib\\PrintLibInternal.c", 0xBDu, "Width < 38"); /*0x157a*/
  StartOfBuffer_2 = StartOfBuffer_1; /*0x1587*/
  if ( !n0x26 ) /*0x158a*/
  {
    v7 = 0x80; /*0x158a*/
    n0x26 = 37; /*0x1594*/
  }
  StartOfBuffer_3 = (unsigned __int64)&StartOfBuffer_1[2 * n0x26]; /*0x1598*/
  v10 = HiiDevicePathExtract(_r_n, a3, v7 < 0 ? 16LL : 10LL);
  v11 = v10 - _r_n; /*0x15f1*/
  if ( (v7 & 0x20) != 0 ) /*0x15f8*/
    StartOfBuffer_1 = HiiMemFree(StartOfBuffer_1, StartOfBuffer_3, n0x26 - v11, 48, 2); /*0x161a*/
  v12 = v11 % 3; /*0x1634*/
  if ( v11 % 3 ) /*0x1634*/
    v12 = 3 - v12; /*0x1641*/
  v13 = 0; /*0x1644*/
  if ( v11 ) /*0x1649*/
  {
    v14 = v7 & 8; /*0x164b*/
    do /*0x16b0*/
    {
      v15 = (char)*v10; /*0x164e*/
      v16 = 0; /*0x1652*/
      do /*0x1672*/
      {
        if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1658*/
          break; /*0x1658*/
        ++v16; /*0x165d*/
        *StartOfBuffer_1 = v15; /*0x1660*/
        StartOfBuffer_1 += 2; /*0x1667*/
        *(StartOfBuffer_1 - 1) = HIBYTE(v15); /*0x166f*/
      }
      while ( v16 < 1 ); /*0x1672*/
      --v10; /*0x1674*/
      if ( v14 ) /*0x167a*/
      {
        if ( ++v12 == 3 ) /*0x1683*/
        {
          v12 = 0; /*0x1689*/
          if ( v13 + 1 < v11 ) /*0x168e*/
          {
            v17 = 0; /*0x1690*/
            do /*0x16a8*/
            {
              if ( (unsigned __int64)StartOfBuffer_1 >= StartOfBuffer_3 ) /*0x1695*/
                break; /*0x1695*/
              ++v17; /*0x1697*/
              *StartOfBuffer_1 = 44; /*0x169a*/
              StartOfBuffer_1[1] = 0; /*0x169d*/
              StartOfBuffer_1 += 2; /*0x16a0*/
            }
            while ( v17 < 1 ); /*0x16a8*/
          }
        }
      }
      ++v13; /*0x16aa*/
    }
    while ( v13 < v11 ); /*0x16b0*/
  }
  StartOfBuffer_4 = StartOfBuffer_1; /*0x16b2*/
  v19 = 0; /*0x16b5*/
  do /*0x16d3*/
  {
    if ( (unsigned __int64)StartOfBuffer_4 >= StartOfBuffer_3 + 2 ) /*0x16bf*/
      break; /*0x16bf*/
    ++v19; /*0x16c1*/
    *StartOfBuffer_4 = 0; /*0x16c4*/
    StartOfBuffer_4[1] = 0; /*0x16c7*/
    StartOfBuffer_4 += 2; /*0x16cb*/
  }
  while ( v19 < 1 ); /*0x16d3*/
  return (unsigned __int64)(StartOfBuffer_1 - StartOfBuffer_2) >> 1; /*0x16ef*/
}


// Function: HiiLibError @ 0x3cf8 (0x1c bytes)
// Index: 61/906

unsigned __int64 __fastcall HiiLibError(__int64 a1, _QWORD *a2)
{
  if ( !a2 ) /*0x3cfb*/
    return 0x8000000000000002uLL; /*0x3cfd*/
  *a2 = (unsigned int)dword_580A4; /*0x3d0e*/
  return 0; /*0x3d07*/
}


// Function: HiiLibFalse @ 0x3d14 (0x9 bytes)
// Index: 62/906

__int64 __fastcall HiiLibFalse(__int64 a1, int a2)
{
  dword_580A4 = a2; /*0x3d14*/
  return 0; /*0x3d1c*/
}


// Function: HiiConfigStringToBlock @ 0x3d20 (0x39 bytes)
// Index: 63/906

unsigned __int32 __fastcall HiiConfigStringToBlock(unsigned __int16 n0xCFC)
{
  if ( (n0xCFC & 3) != 0 ) /*0x3d35*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xC1u, "(Port & 3) == 0"); /*0x3d4a*/
  return __indword(n0xCFC); /*0x3d53*/
}


// Function: HiiConfigStringToBlock2 @ 0x3d5c (0x46 bytes)
// Index: 64/906

__int64 __fastcall HiiConfigStringToBlock2(unsigned __int16 n0xCF8, unsigned int a2)
{
  if ( (n0xCF8 & 3) != 0 ) /*0x3d77*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c", 0xDFu, "(Port & 3) == 0"); /*0x3d8c*/
  __outdword(n0xCF8, a2); /*0x3d96*/
  return a2; /*0x3d9c*/
}


// Function: HiiGetBlockSize @ 0x3da4 (0x38 bytes)
// Index: 65/906

__int64 __fastcall HiiGetBlockSize(unsigned __int16 *a1)
{
  if ( ((unsigned __int8)a1 & 1) != 0 ) /*0x3db9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0x97u, "(Address & 1) == 0"); /*0x3dce*/
  return *a1; /*0x3dd6*/
}


// Function: HiiWriteBlock @ 0x3ddc (0x37 bytes)
// Index: 66/906

__int64 __fastcall HiiWriteBlock(unsigned int *a1)
{
  if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3df1*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xD7u, "(Address & 3) == 0"); /*0x3e06*/
  return *a1; /*0x3e0d*/
}


// Function: HiiReadBlock @ 0x3e14 (0x44 bytes)
// Index: 67/906

__int64 __fastcall HiiReadBlock(unsigned int *a1, unsigned int a2)
{
  if ( ((unsigned __int8)a1 & 3) != 0 ) /*0x3e2f*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 0xF7u, "(Address & 3) == 0"); /*0x3e44*/
  *a1 = a2; /*0x3e49*/
  return a2; /*0x3e52*/
}


// Function: HiiSetBlockToVal @ 0x3e58 (0x39 bytes)
// Index: 68/906

__int64 __fastcall HiiSetBlockToVal(unsigned int *a1, int a2, int n257)
{
  unsigned int v6; // eax

  v6 = HiiWriteBlock(a1); /*0x3e6f*/
  return HiiReadBlock(a1, n257 | a2 & v6); /*0x3e87*/
}


// Function: HiiLibSuccess @ 0x3f84 (0x20 bytes)
// Index: 70/906

bool HiiLibSuccess()
{
  __int16 v0; // bx

  v0 = _getcallerseflags_w(); /*0x3f8f*/
  disable_w(); /*0x3f92*/
  return (v0 & 0x200) != 0; /*0x3f9e*/
}


// Function: HiiLibFailure @ 0x3fa4 (0x20 bytes)
// Index: 71/906

char __fastcall HiiLibFailure(char a1)
{
  if ( a1 ) /*0x3fae*/
    enable_w(); /*0x3fb0*/
  else
    disable_w(); /*0x3fb7*/
  return a1; /*0x3fbe*/
}


// Function: HiiGetNextBlock @ 0x3fc4 (0x3b bytes)
// Index: 72/906

__int64 HiiGetNextBlock()
{
  if ( !qword_580B0 ) /*0x3fd9*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x4Du, "mHobList != ((void *) 0)"); /*0x3fee*/
  return qword_580B0; /*0x3ffa*/
}


// Function: HiiBlockExtract @ 0x4000 (0x56 bytes)
// Index: 73/906

_WORD *__fastcall HiiBlockExtract(int n4, _WORD *NextBlock)
{
  _WORD *NextBlock_1; // rbx

  NextBlock_1 = NextBlock; /*0x400d*/
  if ( !NextBlock ) /*0x4015*/
    DebugAssert("c:\\udk\\myworkspace\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 0x6Bu, "HobStart != ((void *) 0)"); /*0x4028*/
  while ( 1 ) /*0x4041*/
  {
    if ( *NextBlock_1 == 0xFFFF ) /*0x4047*/
      return 0; /*0x4050*/
    if ( *NextBlock_1 == 4 ) /*0x4038*/
      break; /*0x4038*/
    NextBlock_1 = (_WORD *)((char *)NextBlock_1 + (unsigned __int16)NextBlock_1[1]); /*0x403e*/
  }
  return NextBlock_1; /*0x404b*/
}


// Function: HiiBlockCompare @ 0x40d8 (0x1e bytes)
// Index: 75/906

__int64 HiiBlockCompare()
{
  if ( qword_35410 ) /*0x40e6*/
    return RstHelper_59fc(qword_35410); /*0x40e8*/
  else
    return 0; /*0x40ef*/
}


// Function: HiiBlockCompareConst @ 0x40f8 (0x1e bytes)
// Index: 76/906

__int64 HiiBlockCompareConst()
{
  if ( qword_35410 ) /*0x4106*/
    return sub_5A20(qword_35410); /*0x4108*/
  else
    return 0; /*0x410f*/
}


// Function: HiiLibGuidIsZero @ 0x4138 (0x1e bytes)
// Index: 78/906

__int64 __fastcall HiiLibGuidIsZero(unsigned int a1)
{
  __int64 result; // rax

  result = 0; /*0x4145*/
  if ( qword_35410 ) /*0x414a*/
    return RstHelper_5a68(qword_35410, a1); /*0x414c*/
  return result; /*0x4151*/
}


// Function: HiiLibGuidToStr @ 0x4158 (0x25 bytes)
// Index: 79/906

__int64 __fastcall HiiLibGuidToStr(unsigned int a1, const char *en)
{
  if ( qword_35410 ) /*0x4168*/
    return RstHelper_5a8c(qword_35410, a1, (__int64)en); /*0x416f*/
  else
    return 0; /*0x4176*/
}


// Function: HiiLibStrToGuid @ 0x4180 (0x17 bytes)
// Index: 80/906

char __fastcall HiiLibStrToGuid(__int64 a1, int n5)
{
  if ( a1 ) /*0x4187*/
    return RstCheckSecureBoot(a1, n5); /*0x4189*/
  else
    return 0; /*0x4190*/
}


// Function: HiiLibGuidCmp @ 0x4198 (0x18 bytes)
// Index: 81/906

__int64 __fastcall HiiLibGuidCmp(__int64 a1)
{
  if ( a1 ) /*0x419f*/
    return RstReturnSuccess(a1); /*0x41a1*/
  else
    return 0xFFFFFFFFLL; /*0x41a8*/
}


// Function: HiiLibGuidIsEqual @ 0x41b0 (0x17 bytes)
// Index: 82/906

__int64 __fastcall HiiLibGuidIsEqual(__int64 a1)
{
  if ( a1 ) /*0x41b7*/
    return RstReturnFail(a1); /*0x41b9*/
  else
    return 0; /*0x41c0*/
}


// Function: HiiLibNewString @ 0x4220 (0x73 bytes)
// Index: 83/906

unsigned __int64 __fastcall HiiLibNewString(__int64 a1)
{
  __int64 v2; // rbx

  v2 = 0; /*0x4231*/
  if ( !RstUefiProtocolGuid(*(_QWORD **)(a1 + 48)) ) /*0x4233*/
    return 0x8000000000000007uLL; /*0x423c*/
  VarInstall((_QWORD *)qword_35418, &xmmword_27100, (CHAR16 *)"RstUefiV", L"RstUefiV", "VROC", (wchar_t *)L"RstUefiF"); /*0x427c*/
  *(_BYTE *)(a1 + 16) = 1; /*0x4281*/
  return v2; /*0x428d*/
}


// Function: HiiLibGetString @ 0x4294 (0x41 bytes)
// Index: 84/906

unsigned __int64 __fastcall HiiLibGetString(__int64 a1, unsigned __int64 a2, __int64 a3)
{
  __int64 v4; // rdi

  if ( a2 ) /*0x42a4*/
    return RstConfigAccessExtract(a1, a2, a3); /*0x42c4*/
  v4 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 40LL))(a1); /*0x42ac*/
  sub_A750(); /*0x42af*/
  *(_QWORD *)(a1 + 8) = 0; /*0x42b4*/
  *(_BYTE *)(a1 + 16) = 0; /*0x42b9*/
  return v4; /*0x42cf*/
}


// Function: HiiLibGetStringId @ 0x42d8 (0x4a bytes)
// Index: 85/906

__int64 __fastcall HiiLibGetStringId(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3, void **p_NameString)
{
  return (*(__int64 (__fastcall **)(__int64, __int64, void **, _QWORD, _QWORD, int))(qword_58070 + 280))( /*0x431c*/
           a2,
           a3,
           p_NameString,
           *((_QWORD *)Private->HiiLibFunctions[4] + 70),
           *((_QWORD *)Private->HiiLibFunctions[4] + 78),
           16);
}


// Function: HiiLibFindString @ 0x4324 (0x2c bytes)
// Index: 86/906

__int64 __fastcall HiiLibFindString(RST_PRIVATE_DATA *Private, __int64 a2, __int64 a3)
{
  return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, _QWORD))(qword_58070 + 288))(
           a2,
           a3,
           *((_QWORD *)Private->HiiLibFunctions[4] + 70),
           *((_QWORD *)Private->HiiLibFunctions[4] + 78));
}


// Function: HiiLibStub @ 0x4350 (0x5 bytes)
// Index: 87/906

// attributes: thunk
__int64 __fastcall HiiLibStub(__int64 a1)
{
  return RstConfigAccessRoute(a1);
}


// Function: HiiLibGetStringById @ 0x4358 (0x2d bytes)
// Index: 88/906

__int64 __fastcall HiiLibGetStringById(__int64 a1)
{
  __int64 result; // rax

  result = RstConfigAccessRoute(a1); /*0x4361*/
  if ( result >= 0 ) /*0x4369*/
  {
    result = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)qword_35418 + 40LL))(qword_35418); /*0x4375*/
    *(_BYTE *)(a1 + 136) = 0; /*0x4378*/
  }
  return result; /*0x437f*/
}


// Function: HiiLibGetDefaultString @ 0x4388 (0x5a bytes)
// Index: 89/906

__int64 __fastcall HiiLibGetDefaultString(RST_PRIVATE_DATA *Private)
{
  _BYTE *v2; // rcx
  __int64 result; // rax
  _BYTE *v4; // rcx
  _BYTE *v5; // rcx

  LODWORD(Private->HiiLibFunctions[11]) = 0; /*0x438e*/
  v2 = Private->HiiLibFunctions[12]; /*0x4395*/
  if ( v2 ) /*0x439c*/
  {
    result = MemZeroThenFree(v2, 0); /*0x43a0*/
    Private->HiiLibFunctions[12] = 0; /*0x43a5*/
  }
  v4 = Private->HiiLibFunctions[13]; /*0x43aa*/
  if ( v4 ) /*0x43b1*/
  {
    result = MemZeroThenFree(v4, LODWORD(Private->HiiLibFunctions[11])); /*0x43b6*/
    Private->HiiLibFunctions[13] = 0; /*0x43bb*/
  }
  v5 = Private->HiiLibFunctions[14]; /*0x43c0*/
  if ( v5 ) /*0x43ca*/
  {
    result = MemZeroThenFree(v5, LODWORD(Private->HiiLibFunctions[11])); /*0x43cf*/
    Private->HiiLibFunctions[14] = 0; /*0x43d4*/
  }
  return result; /*0x43dc*/
}


// Function: HiiLibGetDefaultStringId @ 0x43e4 (0x6b bytes)
// Index: 90/906

char __fastcall HiiLibGetDefaultStringId(_DWORD *Context, unsigned int a2, unsigned int a3)
{
  __int64 v3; // r9
  __int64 v4; // rdx
  unsigned __int8 v5; // al
  int v6; // ecx
  char result; // al
  int n2; // ecx

  v3 = *((_QWORD *)Context + 15) + 56LL * a2; /*0x43f2*/
  v4 = *((_QWORD *)Context + 15) + 56LL * a3; /*0x43f6*/
  v5 = *(_BYTE *)(v3 + 1); /*0x43fa*/
  if ( v5 != *(_BYTE *)(v4 + 1) ) /*0x4401*/
    return 0; /*0x4401*/
  v6 = v5; /*0x4403*/
  result = 1; /*0x4406*/
  n2 = v6 - 1; /*0x440b*/
  if ( n2 ) /*0x440d*/
  {
    if ( n2 != 2 /*0x444a*/
      || *(_WORD *)(v3 + 40) != 0x8086
      || *(_WORD *)(v3 + 42) != 10278 && *(_WORD *)(v3 + 42) != 10279
      || *(_WORD *)(v4 + 40) != 0x8086
      || *(_WORD *)(v4 + 42) != 10278 && *(_WORD *)(v4 + 42) != 10279 )
    {
      return 0; /*0x444c*/
    }
  }
  return result; /*0x444e*/
}


// Function: HiiLibReturnZero @ 0x4450 (0x4 bytes)
// Index: 91/906

__int64 __fastcall HiiLibReturnZero(__int64 a1)
{
  return *(unsigned int *)(a1 + 104); /*0x4453*/
}


// Function: HiiLibReturnOne @ 0x4454 (0x12 bytes)
// Index: 92/906

__int64 __fastcall HiiLibReturnOne(__int64 a1, unsigned int a2)
{
  return *(unsigned __int8 *)(56LL * a2 + *(_QWORD *)(a1 + 120) + 1); /*0x4465*/
}


// Function: HiiLibReturnFalse @ 0x4468 (0x15 bytes)
// Index: 93/906

__int64 __fastcall HiiLibReturnFalse(__int64 a1, unsigned int a2)
{
  if ( a2 >= *(_DWORD *)(a1 + 104) ) /*0x446b*/
    return 0; /*0x447a*/
  else
    return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * a2); /*0x4476*/
}


// Function: HiiLibGetStringFromPackage @ 0x4480 (0x164 bytes)
// Index: 94/906

__int64 __fastcall HiiLibGetStringFromPackage(__int64 a1, unsigned int a2, __int64 a3)
{
  __int64 v3; // rbx
  __int64 v6; // rbp
  __int64 v8; // rdi
  __int64 v9; // rax
  unsigned __int64 v10; // [rsp+30h] [rbp-38h] BYREF
  __int64 v11; // [rsp+38h] [rbp-30h] BYREF
  _QWORD v12[5]; // [rsp+40h] [rbp-28h] BYREF
  __int64 v13; // [rsp+88h] [rbp+20h] BYREF

  v3 = 0; /*0x4493*/
  v11 = 0; /*0x449b*/
  if ( a2 < *(_DWORD *)(a1 + 104) ) /*0x44a2*/
  {
    v6 = a2; /*0x44ac*/
    if ( *(_QWORD *)(*(_QWORD *)(a1 + 112) + 8LL * a2) ) /*0x44ae*/
    {
      v10 = 0; /*0x44d8*/
      v13 = 0; /*0x44dc*/
      if ( (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_58070 + 312))( /*0x44e9*/
             2,
             &unk_27110,
             0,
             &v10,
             &v13) < 0 )
        return v11; /*0x44f0*/
      v8 = 0; /*0x44f5*/
      if ( v10 ) /*0x44fd*/
      {
        while ( 1 ) /*0x4503*/
        {
          v9 = *(_QWORD *)(a1 + 8); /*0x4503*/
          v12[0] = 0; /*0x4516*/
          if ( !(*(__int64 (__fastcall **)(_QWORD, void *, _QWORD *, _QWORD, __int64, int))(qword_58070 + 280))( /*0x4546*/
                  *(_QWORD *)(v13 + 8 * v8),
                  &unk_27770,
                  v12,
                  *(_QWORD *)(qword_35418 + 560),
                  v9,
                  2) )
          {
            if ( v12[0] ) /*0x4559*/
              break; /*0x4559*/
          }
          if ( ++v8 >= v10 ) /*0x4563*/
            goto LABEL_11; /*0x4563*/
        }
        (*(void (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64, __int64 *))(v12[0] + 8LL))( /*0x4582*/
          v12[0],
          *(_QWORD *)(*(_QWORD *)(a1 + 112) + 8 * v6),
          0,
          a3,
          &v11);
        (*(void (__fastcall **)(_QWORD, void *, _QWORD, _QWORD))(qword_58070 + 288))( /*0x45b1*/
          *(_QWORD *)(v13 + 8 * v8),
          &unk_27770,
          *(_QWORD *)(qword_35418 + 560),
          *(_QWORD *)(a1 + 8));
      }
LABEL_11:
      (*(void (__fastcall **)(__int64))(qword_58070 + 72))(v13); /*0x45b7*/
      return v11; /*0x45c9*/
    }
  }
  return v3; /*0x45db*/
}


// Function: HiiLibGetAllStrings @ 0x45e4 (0x11b bytes)
// Index: 95/906

__int64 __fastcall HiiLibGetAllStrings(__int64 a1, __int64 a2)
{
  __int64 FirstString_2; // r15
  unsigned int v4; // ebx
  __int64 i; // r12
  const CHAR16 *FirstString_1; // rsi
  bool v7; // di
  const CHAR16 *FirstString; // r13
  UINTN Length; // r14

  FirstString_2 = sub_2DB8(a2); /*0x460e*/
  if ( !FirstString_2 ) /*0x4614*/
    return 0xFFFFFFFFLL; /*0x4614*/
  v4 = 0; /*0x461a*/
  if ( !*(_DWORD *)(a1 + 104) ) /*0x461d*/
    return 0xFFFFFFFFLL; /*0x46db*/
  for ( i = 0; ; i += 8 ) /*0x4627*/
  {
    FirstString_1 = (const CHAR16 *)sub_2DB8(*(_QWORD *)(i + *(_QWORD *)(a1 + 112))); /*0x4637*/
    if ( FirstString_1 ) /*0x463d*/
    {
      v7 = 1; /*0x4643*/
      FirstString = (const CHAR16 *)FirstString_2; /*0x4646*/
      do /*0x46c5*/
      {
        if ( !FirstString || !FirstString_1 || Assert_66(FirstString) || Assert_66(FirstString_1) ) /*0x4663*/
          break; /*0x466b*/
        Length = Assert_72((__int64)FirstString); /*0x4678*/
        v7 = Length == Assert_72((__int64)FirstString_1) /*0x4678*/
          && !(unsigned __int16)StrnCmp(FirstString, FirstString_1, Length);
        FirstString = (const CHAR16 *)Assert_71((__int64)FirstString); /*0x46b7*/
        FirstString_1 = (const CHAR16 *)Assert_71((__int64)FirstString_1); /*0x46bf*/
      }
      while ( v7 ); /*0x46c5*/
      if ( v7 ) /*0x46ca*/
        break; /*0x46ca*/
    }
    if ( ++v4 >= *(_DWORD *)(a1 + 104) ) /*0x46d5*/
      return 0xFFFFFFFFLL; /*0x46d5*/
  }
  return v4; /*0x46ed*/
}


// Function: HiiLibFreeStringArray @ 0x4700 (0x2e bytes)
// Index: 96/906

__int64 __fastcall HiiLibFreeStringArray(__int64 a1, __int64 a2)
{
  unsigned int v2; // eax
  _QWORD *i; // r8

  v2 = 0; /*0x4700*/
  if ( !*(_DWORD *)(a1 + 104) ) /*0x4705*/
    return 0; /*0x471e*/
  for ( i = *(_QWORD **)(a1 + 112); a2 != *i; ++i ) /*0x470a*/
  {
    if ( ++v2 >= *(_DWORD *)(a1 + 104) ) /*0x471c*/
      return 0; /*0x471c*/
  }
  return *(unsigned int *)(*(_QWORD *)(a1 + 128) + 4LL * v2); /*0x4720*/
}


// Function: RstHiiPackageInstall @ 0x5bac (0x84 bytes)
// Index: 150/906

__int64 __fastcall RstHiiPackageInstall(__int64 a1)
{
  __int64 result; // rax

  result = (*(__int64 (__fastcall **)(__int64, void *, __int64, void *, __int64, void *, __int64, void *, __int64, _QWORD))(qword_58070 + 328))( /*0x5c16*/
             a1 + 624,
             &unk_27740,
             a1 + 520,
             &unk_27770,
             a1 + 568,
             &unk_27760,
             a1 + 592,
             &unk_27820,
             a1 + 616,
             0);
  if ( result >= 0 ) /*0x5c1f*/
    return (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 56LL))(a1); /*0x5c27*/
  return result; /*0x5c2a*/
}


// Function: RstInstallHiiConfigAccess @ 0x5f10 (0x35 bytes)
// Index: 154/906

__int64 __fastcall RstInstallHiiConfigAccess(RST_PRIVATE_DATA *Private, char *VROC)
{
  Private->HiiLibFunctions[0] = VROC; /*0x5f1a*/
  return (*(__int64 (__fastcall **)(void **, void *, uint32_t *, _QWORD, _QWORD))(qword_58070 + 328))( /*0x5f40*/
           &Private->ImageHandle,
           &unk_27900,
           &Private->Version,
           0,
           0);
}


// Function: HiiGetStringOrNull @ 0x8aa0 (0x306 bytes)
// Index: 235/906

__int64 __fastcall HiiGetStringOrNull(__int64 a1, unsigned __int16 n0x100, char *a3, va_list va)
{
  int n0x100_1; // ebx
  char *v5; // rsi
  unsigned __int64 *v8; // rdi
  __int64 n0x100_2; // rax
  char v10; // al
  __int16 v11; // dx
  unsigned __int16 v12; // r9
  unsigned int n0x39; // r8d
  __int16 v14; // ax
  unsigned int n114; // ecx
  unsigned __int64 v16; // rax
  unsigned __int16 v17; // ax
  __int64 v18; // rax
  const char *_null_string_; // r8
  unsigned __int16 v20; // dx
  __int64 n0x100_3; // rax
  __int64 n0x100_4; // rcx
  __int64 v23; // rcx
  __int64 n0x100_5; // rax

  v5 = a3; /*0x8abf*/
  LOWORD(n0x100_1) = 0; /*0x8acd*/
  if ( !*a3 ) /*0x8ad4*/
    goto LABEL_79; /*0x8ad4*/
  v8 = (unsigned __int64 *)(va - 1); /*0x8ada*/
  do /*0x8d74*/
  {
    if ( (unsigned __int16)n0x100_1 >= n0x100 ) /*0x8af3*/
      break; /*0x8af3*/
    if ( *v5 != 37 ) /*0x8afc*/
    {
      if ( *v5 == 10 ) /*0x8b01*/
      {
        n0x100_2 = (unsigned __int16)n0x100_1; /*0x8b03*/
        LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8b06*/
        *(_BYTE *)(n0x100_2 + a1) = 13; /*0x8b0a*/
      }
      v10 = *v5; /*0x8b0e*/
LABEL_46:
      *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = v10; /*0x8c33*/
      goto LABEL_56; /*0x8c39*/
    }
    v11 = 0; /*0x8b15*/
    v12 = 0; /*0x8b19*/
    while ( 1 ) /*0x8bd8*/
    {
      while ( 1 ) /*0x8bd2*/
      {
        while ( 1 ) /*0x8b28*/
        {
          while ( 1 ) /*0x8b1d*/
          {
            n0x39 = (unsigned __int8)*++v5; /*0x8b20*/
            if ( n0x39 > 0x39 ) /*0x8b28*/
              break; /*0x8b28*/
            if ( (unsigned __int8)*v5 >= 0x31u ) /*0x8b32*/
              goto LABEL_18; /*0x8b32*/
            switch ( n0x39 ) /*0x8b3a*/
            {
              case ' ': /*0x8b3a*/
                v11 |= 4u; /*0x8bb6*/
                break;
              case '+': /*0x8b3a*/
                v11 |= 2u; /*0x8bb0*/
                break;
              case ',': /*0x8b3a*/
                v11 |= 8u; /*0x8baa*/
                break;
              case '-': /*0x8b3a*/
                v11 |= 1u; /*0x8b9c*/
                break;
              default:
                if ( n0x39 != 46 ) /*0x8b4e*/
                {
                  if ( n0x39 != 48 ) /*0x8b53*/
                    goto LABEL_38; /*0x8b53*/
                  v11 |= 0x20u; /*0x8b59*/
                }
LABEL_18:
                v12 = 0; /*0x8b5d*/
                do /*0x8b95*/
                {
                  if ( (_BYTE)n0x39 == 46 ) /*0x8b64*/
                    ++v5; /*0x8b66*/
                  v14 = (unsigned __int8)*v5++; /*0x8b75*/
                  LOBYTE(n0x39) = *v5; /*0x8b7b*/
                  v12 = v14 + 10 * v12 - 48; /*0x8b86*/
                }
                while ( (unsigned __int8)*v5 >= 0x30u && (unsigned __int8)n0x39 <= 0x39u ); /*0x8b95*/
                --v5; /*0x8b97*/
                break;
            }
          }
          if ( n0x39 != 70 ) /*0x8bc0*/
          {
            if ( n0x39 == 76 ) /*0x8bc6*/
              goto LABEL_35; /*0x8bc6*/
            if ( n0x39 == 78 ) /*0x8bcc*/
              goto LABEL_34; /*0x8bcc*/
            if ( n0x39 != 102 ) /*0x8bd2*/
              break; /*0x8bd2*/
          }
LABEL_37:
          v11 |= 0x10u; /*0x8bf6*/
        }
        if ( n0x39 != 108 ) /*0x8bd8*/
          break; /*0x8bd8*/
LABEL_35:
        if ( (v11 & 0x10) == 0 ) /*0x8bec*/
          goto LABEL_37; /*0x8bec*/
        v11 |= 0x100u; /*0x8bee*/
      }
      if ( n0x39 != 110 ) /*0x8bde*/
        break; /*0x8bde*/
LABEL_34:
      v11 |= 0x40u; /*0x8be0*/
    }
LABEL_38:
    n114 = (unsigned __int8)*v5; /*0x8bff*/
    if ( n114 > 0x64 ) /*0x8c05*/
    {
      if ( n114 == 114 ) /*0x8c58*/
      {
        v17 = EfiStatusToStringWide(*++v8, a1 + (unsigned __int16)n0x100_1, n0x100); /*0x8d5a*/
        goto LABEL_77; /*0x8d5a*/
      }
      if ( n114 != 115 ) /*0x8c61*/
      {
        if ( n114 == 117 ) /*0x8c66*/
        {
          v11 |= 0x80u; /*0x8c9f*/
LABEL_60:
          ++v8; /*0x8ca2*/
          if ( (v11 & 0x100) != 0 ) /*0x8cad*/
            v18 = *v8; /*0x8caf*/
          else
            v18 = *(unsigned int *)v8; /*0x8cb4*/
          v17 = RstInt64ToDecimalString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v18, v11, v12); /*0x8cc3*/
          goto LABEL_77; /*0x8cc8*/
        }
        if ( n114 != 119 ) /*0x8c6b*/
        {
          if ( n114 != 120 ) /*0x8c70*/
            goto LABEL_55; /*0x8c70*/
LABEL_48:
          ++v8; /*0x8c3f*/
          if ( (v11 & 0x100) != 0 ) /*0x8c4a*/
            v16 = *v8; /*0x8c4c*/
          else
            v16 = *(unsigned int *)v8; /*0x8c81*/
          v17 = RstUint64ToHexString((_BYTE *)(a1 + (unsigned __int16)n0x100_1), v16, v11, v12); /*0x8c90*/
LABEL_77:
          LOWORD(n0x100_1) = v17 + n0x100_1; /*0x8d5f*/
          goto LABEL_78; /*0x8d65*/
        }
      }
LABEL_64:
      ++v8; /*0x8ccd*/
      _null_string_ = "<null string>"; /*0x8cd0*/
      v20 = 0; /*0x8cd7*/
      if ( *v8 ) /*0x8cdb*/
        _null_string_ = (const char *)*v8; /*0x8ce1*/
      while ( *_null_string_ && (v20 < v12 || !v12) ) /*0x8cf1*/
      {
        if ( *_null_string_ == 10 ) /*0x8cf5*/
        {
          n0x100_3 = (unsigned __int16)n0x100_1; /*0x8cf7*/
          LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8cfa*/
          *(_BYTE *)(n0x100_3 + a1) = 13; /*0x8cfe*/
        }
        n0x100_4 = (unsigned __int16)n0x100_1; /*0x8d05*/
        LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d08*/
        *(_BYTE *)(n0x100_4 + a1) = *_null_string_; /*0x8d0c*/
        _null_string_ += (*v5 == 119) + 1; /*0x8d1b*/
        ++v20; /*0x8d1e*/
      }
      if ( v20 < v12 ) /*0x8d2e*/
      {
        v23 = (unsigned __int16)(v12 - v20); /*0x8d34*/
        do /*0x8d46*/
        {
          n0x100_5 = (unsigned __int16)n0x100_1; /*0x8d38*/
          LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8d3b*/
          --v23; /*0x8d3f*/
          *(_BYTE *)(n0x100_5 + a1) = 32; /*0x8d42*/
        }
        while ( v23 ); /*0x8d46*/
      }
      goto LABEL_78; /*0x8d46*/
    }
    switch ( n114 ) /*0x8c07*/
    {
      case 'd': /*0x8c07*/
        goto LABEL_60; /*0x8c07*/
      case '%': /*0x8c07*/
        break; /*0x8c10*/
      case 'S': /*0x8c07*/
        goto LABEL_64; /*0x8c15*/
      case 'X': /*0x8c07*/
        v11 |= 0x20u; /*0x8c3b*/
        goto LABEL_48; /*0x8c3b*/
      case 'a': /*0x8c07*/
        goto LABEL_64; /*0x8c23*/
      case 'c': /*0x8c07*/
        v10 = *(_BYTE *)++v8; /*0x8c31*/
        goto LABEL_46; /*0x8c31*/
    }
LABEL_55:
    *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = n114; /*0x8c72*/
LABEL_56:
    LOWORD(n0x100_1) = n0x100_1 + 1; /*0x8c78*/
LABEL_78:
    ++v5; /*0x8d6c*/
  }
  while ( *v5 ); /*0x8d74*/
LABEL_79:
  *(_BYTE *)((unsigned __int16)n0x100_1 + a1) = 0; /*0x8d7d*/
  return (unsigned int)(n0x100_1 + 1); /*0x8d98*/
}


// Function: j_HiiLibReturnZero @ 0xa294 (0x5 bytes)
// Index: 270/906

// attributes: thunk
__int64 __fastcall j_HiiLibReturnZero(__int64 a1)
{
  return HiiLibReturnZero(a1);
}


// Function: j_j_HiiBlockCompare @ 0xbcfc (0x5 bytes)
// Index: 327/906

// attributes: thunk
__int64 __fastcall j_j_HiiBlockCompare()
{
  return j_HiiBlockCompare();
}


// Function: j_j_HiiBlockCompareConst @ 0xbd04 (0x5 bytes)
// Index: 328/906

// attributes: thunk
__int64 j_j_HiiBlockCompareConst()
{
  return j_HiiBlockCompareConst();
}


// Function: j_j_HiiLibGuidIsZero @ 0xbd0c (0x5 bytes)
// Index: 329/906

// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidIsZero(unsigned int a1)
{
  return j_HiiLibGuidIsZero(a1);
}


// Function: j_j_HiiLibGuidToStr @ 0xbd14 (0x5 bytes)
// Index: 330/906

// attributes: thunk
__int64 __fastcall j_j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
  return j_HiiLibGuidToStr(a1, en);
}


// Function: j_HiiBlockCompare @ 0x15694 (0x5 bytes)
// Index: 597/906

// attributes: thunk
__int64 __fastcall j_HiiBlockCompare()
{
  return HiiBlockCompare();
}


// Function: j_HiiBlockCompareConst @ 0x1569c (0x5 bytes)
// Index: 598/906

// attributes: thunk
__int64 j_HiiBlockCompareConst()
{
  return HiiBlockCompareConst();
}


// Function: j_HiiLibGuidIsZero @ 0x156a4 (0x5 bytes)
// Index: 599/906

// attributes: thunk
__int64 __fastcall j_HiiLibGuidIsZero(unsigned int a1)
{
  return HiiLibGuidIsZero(a1);
}


// Function: j_HiiLibGuidToStr @ 0x156ac (0x5 bytes)
// Index: 600/906

// attributes: thunk
__int64 __fastcall j_HiiLibGuidToStr(unsigned int a1, const char *en)
{
  return HiiLibGuidToStr(a1, (__int64)en);
}


// Function: HiiRstMapRaidLevelToStrId @ 0x1e2f4 (0x269 bytes)
// Index: 819/906

__int16 __fastcall HiiRstMapRaidLevelToStrId(unsigned int n24)
{
  __int16 n24_1; // ax
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx

  n24_1 = 24; /*0x1e2f6*/
  if ( n24 <= 0x18 ) /*0x1e2fb*/
  {
    if ( n24 == 24 ) /*0x1e301*/
      return 41; /*0x1e42f*/
    if ( n24 > 0xC ) /*0x1e30a*/
    {
      if ( n24 > 0x12 ) /*0x1e3aa*/
      {
        v14 = n24 - 19; /*0x1e3f2*/
        if ( !v14 ) /*0x1e3f4*/
          return 36; /*0x1e429*/
        v15 = v14 - 1; /*0x1e3f6*/
        if ( !v15 ) /*0x1e3f9*/
          return 37; /*0x1e423*/
        v16 = v15 - 1; /*0x1e3fb*/
        if ( !v16 ) /*0x1e3fe*/
          return 38; /*0x1e41d*/
        v17 = v16 - 1; /*0x1e400*/
        if ( !v17 ) /*0x1e403*/
          return 39; /*0x1e417*/
        if ( v17 == 1 ) /*0x1e408*/
          return 40; /*0x1e411*/
      }
      else
      {
        if ( n24 == 18 ) /*0x1e3ac*/
          return 35; /*0x1e3ec*/
        v10 = n24 - 13; /*0x1e3ae*/
        if ( !v10 ) /*0x1e3b1*/
          return 30; /*0x1e3e6*/
        v11 = v10 - 1; /*0x1e3b3*/
        if ( !v11 ) /*0x1e3b6*/
          return 31; /*0x1e3e0*/
        v12 = v11 - 1; /*0x1e3b8*/
        if ( !v12 ) /*0x1e3bb*/
          return 32; /*0x1e3da*/
        v13 = v12 - 1; /*0x1e3bd*/
        if ( !v13 ) /*0x1e3c0*/
          return 33; /*0x1e3d4*/
        if ( v13 == 1 ) /*0x1e3c5*/
          return 34; /*0x1e3ce*/
      }
    }
    else
    {
      if ( n24 == 12 ) /*0x1e310*/
        return 29; /*0x1e3a2*/
      if ( n24 > 6 ) /*0x1e319*/
      {
        v6 = n24 - 7; /*0x1e366*/
        if ( !v6 ) /*0x1e369*/
          return n24_1; /*0x1e369*/
        v7 = v6 - 1; /*0x1e36f*/
        if ( !v7 ) /*0x1e372*/
          return 25; /*0x1e39c*/
        v8 = v7 - 1; /*0x1e374*/
        if ( !v8 ) /*0x1e377*/
          return 26; /*0x1e396*/
        v9 = v8 - 1; /*0x1e379*/
        if ( !v9 ) /*0x1e37c*/
          return 27; /*0x1e390*/
        if ( v9 == 1 ) /*0x1e381*/
          return 28; /*0x1e38a*/
      }
      else
      {
        if ( n24 == 6 ) /*0x1e31b*/
          return 23; /*0x1e365*/
        if ( !n24 ) /*0x1e31f*/
          return 17; /*0x1e35f*/
        v2 = n24 - 1; /*0x1e321*/
        if ( !v2 ) /*0x1e324*/
          return 18; /*0x1e359*/
        v3 = v2 - 1; /*0x1e326*/
        if ( !v3 ) /*0x1e329*/
          return 19; /*0x1e353*/
        v4 = v3 - 1; /*0x1e32b*/
        if ( !v4 ) /*0x1e32e*/
          return 20; /*0x1e34d*/
        v5 = v4 - 1; /*0x1e330*/
        if ( !v5 ) /*0x1e333*/
          return 21; /*0x1e347*/
        if ( v5 == 1 ) /*0x1e338*/
          return 22; /*0x1e341*/
      }
    }
    return 0; /*0x1e338*/
  }
  if ( n24 <= 0x24 ) /*0x1e437*/
  {
    if ( n24 == 36 ) /*0x1e43d*/
      return 53; /*0x1e4d3*/
    if ( n24 > 0x1E ) /*0x1e44a*/
    {
      v22 = n24 - 31; /*0x1e496*/
      if ( !v22 ) /*0x1e498*/
        return 48; /*0x1e4cd*/
      v23 = v22 - 1; /*0x1e49a*/
      if ( !v23 ) /*0x1e49d*/
        return 49; /*0x1e4c7*/
      v24 = v23 - 1; /*0x1e49f*/
      if ( !v24 ) /*0x1e4a2*/
        return 50; /*0x1e4c1*/
      v25 = v24 - 1; /*0x1e4a4*/
      if ( !v25 ) /*0x1e4a7*/
        return 51; /*0x1e4bb*/
      if ( v25 == 1 ) /*0x1e4ac*/
        return 52; /*0x1e4b5*/
    }
    else
    {
      if ( n24 == 30 ) /*0x1e44c*/
        return 47; /*0x1e490*/
      v18 = n24 - 25; /*0x1e453*/
      if ( !v18 ) /*0x1e455*/
        return 42; /*0x1e48a*/
      v19 = v18 - 1; /*0x1e457*/
      if ( !v19 ) /*0x1e45a*/
        return 43; /*0x1e484*/
      v20 = v19 - 1; /*0x1e45c*/
      if ( !v20 ) /*0x1e45f*/
        return 44; /*0x1e47e*/
      v21 = v20 - 1; /*0x1e461*/
      if ( !v21 ) /*0x1e464*/
        return 45; /*0x1e478*/
      if ( v21 == 1 ) /*0x1e469*/
        return 46; /*0x1e472*/
    }
    return 0; /*0x1e469*/
  }
  if ( n24 <= 0x2A ) /*0x1e4db*/
  {
    if ( n24 == 42 ) /*0x1e4dd*/
      return 59; /*0x1e51d*/
    v26 = n24 - 37; /*0x1e4e4*/
    if ( !v26 ) /*0x1e4e6*/
      return 54; /*0x1e517*/
    v27 = v26 - 1; /*0x1e4e8*/
    if ( !v27 ) /*0x1e4eb*/
      return 55; /*0x1e511*/
    v28 = v27 - 1; /*0x1e4ed*/
    if ( !v28 ) /*0x1e4f0*/
      return 56; /*0x1e50b*/
    v29 = v28 - 1; /*0x1e4f2*/
    if ( !v29 ) /*0x1e4f5*/
      return 57; /*0x1e505*/
    if ( v29 == 1 ) /*0x1e4fa*/
      return 58; /*0x1e4ff*/
    return 0; /*0x1e4fa*/
  }
  v30 = n24 - 43; /*0x1e523*/
  if ( !v30 ) /*0x1e525*/
    return 60; /*0x1e557*/
  v31 = v30 - 1; /*0x1e527*/
  if ( !v31 ) /*0x1e52a*/
    return 61; /*0x1e551*/
  v32 = v31 - 1; /*0x1e52c*/
  if ( !v32 ) /*0x1e52f*/
    return 62; /*0x1e54b*/
  v33 = v32 - 1; /*0x1e531*/
  if ( !v33 ) /*0x1e534*/
    return 63; /*0x1e545*/
  if ( v33 != 1 ) /*0x1e539*/
    return 0; /*0x1e53e*/
  return 64; /*0x1e341*/
}


// Function: HiiRstMapRaidLevelToStrId2 @ 0x1e560 (0x23b bytes)
// Index: 820/906

__int64 __fastcall HiiRstMapRaidLevelToStrId2(unsigned int n42)
{
  __int64 result; // rax
  int v2; // ecx
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // ecx
  int v11; // ecx
  int v12; // ecx
  int v13; // ecx
  int v14; // ecx
  int v15; // ecx
  int v16; // ecx
  int v17; // ecx
  int v18; // ecx
  int v19; // ecx
  int v20; // ecx
  int v21; // ecx
  int v22; // ecx
  int v23; // ecx
  int v24; // ecx
  int v25; // ecx
  int v26; // ecx
  int v27; // ecx
  int v28; // ecx
  int v29; // ecx
  int v30; // ecx
  int v31; // ecx
  int v32; // ecx
  int v33; // ecx

  result = 0; /*0x1e560*/
  if ( n42 > 0x18 ) /*0x1e565*/
  {
    if ( n42 > 0x24 ) /*0x1e697*/
    {
      if ( n42 > 0x2A ) /*0x1e727*/
      {
        v30 = n42 - 43; /*0x1e766*/
        if ( v30 ) /*0x1e769*/
        {
          v31 = v30 - 1; /*0x1e76b*/
          if ( v31 ) /*0x1e76e*/
          {
            v32 = v31 - 1; /*0x1e770*/
            if ( v32 ) /*0x1e773*/
            {
              v33 = v32 - 1; /*0x1e775*/
              if ( v33 ) /*0x1e778*/
              {
                if ( v33 == 1 ) /*0x1e77d*/
                  return 112; /*0x1e77f*/
              }
              else
              {
                return 111; /*0x1e783*/
              }
            }
            else
            {
              return 110; /*0x1e789*/
            }
          }
          else
          {
            return 109; /*0x1e78f*/
          }
        }
        else
        {
          return 108; /*0x1e795*/
        }
      }
      else if ( n42 == 42 ) /*0x1e729*/
      {
        return 107; /*0x1e760*/
      }
      else
      {
        v26 = n42 - 37; /*0x1e72b*/
        if ( v26 ) /*0x1e72e*/
        {
          v27 = v26 - 1; /*0x1e730*/
          if ( v27 ) /*0x1e733*/
          {
            v28 = v27 - 1; /*0x1e735*/
            if ( v28 ) /*0x1e738*/
            {
              v29 = v28 - 1; /*0x1e73a*/
              if ( v29 ) /*0x1e73d*/
              {
                if ( v29 == 1 ) /*0x1e742*/
                  return 106; /*0x1e744*/
              }
              else
              {
                return 105; /*0x1e748*/
              }
            }
            else
            {
              return 104; /*0x1e74e*/
            }
          }
          else
          {
            return 103; /*0x1e754*/
          }
        }
        else
        {
          return 102; /*0x1e75a*/
        }
      }
    }
    else if ( n42 == 36 ) /*0x1e69d*/
    {
      return 101; /*0x1e71e*/
    }
    else if ( n42 > 0x1E ) /*0x1e6a2*/
    {
      v22 = n42 - 31; /*0x1e6e5*/
      if ( v22 ) /*0x1e6e8*/
      {
        v23 = v22 - 1; /*0x1e6ea*/
        if ( v23 ) /*0x1e6ed*/
        {
          v24 = v23 - 1; /*0x1e6ef*/
          if ( v24 ) /*0x1e6f2*/
          {
            v25 = v24 - 1; /*0x1e6f4*/
            if ( v25 ) /*0x1e6f7*/
            {
              if ( v25 == 1 ) /*0x1e6fc*/
                return 100; /*0x1e702*/
            }
            else
            {
              return 99; /*0x1e706*/
            }
          }
          else
          {
            return 98; /*0x1e70c*/
          }
        }
        else
        {
          return 97; /*0x1e712*/
        }
      }
      else
      {
        return 96; /*0x1e718*/
      }
    }
    else if ( n42 == 30 ) /*0x1e6a4*/
    {
      return 95; /*0x1e6df*/
    }
    else
    {
      v18 = n42 - 25; /*0x1e6a6*/
      if ( v18 ) /*0x1e6a9*/
      {
        v19 = v18 - 1; /*0x1e6ab*/
        if ( v19 ) /*0x1e6ae*/
        {
          v20 = v19 - 1; /*0x1e6b0*/
          if ( v20 ) /*0x1e6b3*/
          {
            v21 = v20 - 1; /*0x1e6b5*/
            if ( v21 ) /*0x1e6b8*/
            {
              if ( v21 == 1 ) /*0x1e6bd*/
                return 94; /*0x1e6c3*/
            }
            else
            {
              return 93; /*0x1e6c7*/
            }
          }
          else
          {
            return 92; /*0x1e6cd*/
          }
        }
        else
        {
          return 91; /*0x1e6d3*/
        }
      }
      else
      {
        return 90; /*0x1e6d9*/
      }
    }
  }
  else if ( n42 == 24 ) /*0x1e56b*/
  {
    return 89; /*0x1e68e*/
  }
  else if ( n42 > 0xC ) /*0x1e574*/
  {
    if ( n42 > 0x12 ) /*0x1e612*/
    {
      v14 = n42 - 19; /*0x1e655*/
      if ( v14 ) /*0x1e658*/
      {
        v15 = v14 - 1; /*0x1e65a*/
        if ( v15 ) /*0x1e65d*/
        {
          v16 = v15 - 1; /*0x1e65f*/
          if ( v16 ) /*0x1e662*/
          {
            v17 = v16 - 1; /*0x1e664*/
            if ( v17 ) /*0x1e667*/
            {
              if ( v17 == 1 ) /*0x1e66c*/
                return 88; /*0x1e672*/
            }
            else
            {
              return 87; /*0x1e676*/
            }
          }
          else
          {
            return 86; /*0x1e67c*/
          }
        }
        else
        {
          return 85; /*0x1e682*/
        }
      }
      else
      {
        return 84; /*0x1e688*/
      }
    }
    else if ( n42 == 18 ) /*0x1e614*/
    {
      return 83; /*0x1e64f*/
    }
    else
    {
      v10 = n42 - 13; /*0x1e616*/
      if ( v10 ) /*0x1e619*/
      {
        v11 = v10 - 1; /*0x1e61b*/
        if ( v11 ) /*0x1e61e*/
        {
          v12 = v11 - 1; /*0x1e620*/
          if ( v12 ) /*0x1e623*/
          {
            v13 = v12 - 1; /*0x1e625*/
            if ( v13 ) /*0x1e628*/
            {
              if ( v13 == 1 ) /*0x1e62d*/
                return 82; /*0x1e633*/
            }
            else
            {
              return 81; /*0x1e637*/
            }
          }
          else
          {
            return 80; /*0x1e63d*/
          }
        }
        else
        {
          return 79; /*0x1e643*/
        }
      }
      else
      {
        return 78; /*0x1e649*/
      }
    }
  }
  else if ( n42 == 12 ) /*0x1e57a*/
  {
    return 77; /*0x1e609*/
  }
  else if ( n42 > 6 ) /*0x1e583*/
  {
    v6 = n42 - 7; /*0x1e5d0*/
    if ( v6 ) /*0x1e5d3*/
    {
      v7 = v6 - 1; /*0x1e5d5*/
      if ( v7 ) /*0x1e5d8*/
      {
        v8 = v7 - 1; /*0x1e5da*/
        if ( v8 ) /*0x1e5dd*/
        {
          v9 = v8 - 1; /*0x1e5df*/
          if ( v9 ) /*0x1e5e2*/
          {
            if ( v9 == 1 ) /*0x1e5e7*/
              return 76; /*0x1e5ed*/
          }
          else
          {
            return 75; /*0x1e5f1*/
          }
        }
        else
        {
          return 74; /*0x1e5f7*/
        }
      }
      else
      {
        return 73; /*0x1e5fd*/
      }
    }
    else
    {
      return 72; /*0x1e603*/
    }
  }
  else if ( n42 == 6 ) /*0x1e585*/
  {
    return 71; /*0x1e5ca*/
  }
  else if ( n42 ) /*0x1e589*/
  {
    v2 = n42 - 1; /*0x1e58b*/
    if ( v2 ) /*0x1e58e*/
    {
      v3 = v2 - 1; /*0x1e590*/
      if ( v3 ) /*0x1e593*/
      {
        v4 = v3 - 1; /*0x1e595*/
        if ( v4 ) /*0x1e598*/
        {
          v5 = v4 - 1; /*0x1e59a*/
          if ( v5 ) /*0x1e59d*/
          {
            if ( v5 == 1 ) /*0x1e5a2*/
              return 70; /*0x1e5a8*/
          }
          else
          {
            return 69; /*0x1e5ac*/
          }
        }
        else
        {
          return 68; /*0x1e5b2*/
        }
      }
      else
      {
        return 67; /*0x1e5b8*/
      }
    }
    else
    {
      return 66; /*0x1e5be*/
    }
  }
  else
  {
    return 65; /*0x1e5c4*/
  }
  return result; /*0x1e5ab*/
}


// Function: HiiRstBlockSizeToIndex @ 0x1e79c (0xaf bytes)
// Index: 821/906

__int16 __fastcall HiiRstBlockSizeToIndex(unsigned __int16 n64)
{
  int n64_1; // edx
  __int16 n256; // ax
  __int16 n1024; // cx

  n64_1 = n64; /*0x1e79c*/
  n256 = 256; /*0x1e79f*/
  if ( n64 > 0x100u ) /*0x1e7a6*/
  {
    if ( n64 == 512 ) /*0x1e803*/
      return n256; /*0x1e803*/
    n1024 = 1024; /*0x1e805*/
    if ( n64_1 == 1024 ) /*0x1e80c*/
      return 512; /*0x1e846*/
    n256 = 2048; /*0x1e80e*/
    if ( n64_1 == 2048 ) /*0x1e815*/
      return n1024; /*0x1e815*/
    n1024 = 4096; /*0x1e817*/
    if ( n64_1 == 4096 ) /*0x1e81e*/
      return n256; /*0x1e81e*/
    n256 = 0x2000; /*0x1e820*/
    switch ( n64_1 ) /*0x1e827*/
    {
      case 0x2000: /*0x1e827*/
        return n1024; /*0x1e845*/
      case 0x3FDC: /*0x1e827*/
        return n256; /*0x1e82f*/
      case 0x8000: /*0x1e827*/
        return 0x4000; /*0x1e841*/
    }
    return 0; /*0x1e83b*/
  }
  if ( n64 == 256 ) /*0x1e7a8*/
    return 128; /*0x1e7f9*/
  n256 = 2; /*0x1e7aa*/
  if ( n64 == 2 ) /*0x1e7b1*/
    return 1; /*0x1e7f3*/
  if ( n64 != 4 ) /*0x1e7b5*/
  {
    n256 = 4; /*0x1e7bb*/
    if ( n64 != 8 ) /*0x1e7c2*/
    {
      n256 = 8; /*0x1e7c8*/
      if ( n64 != 16 ) /*0x1e7cf*/
      {
        n256 = 16; /*0x1e7d1*/
        if ( n64 != 32 ) /*0x1e7d8*/
        {
          n256 = 32; /*0x1e7da*/
          if ( n64 != 64 ) /*0x1e7e1*/
          {
            n256 = 64; /*0x1e7e3*/
            if ( n64 != 128 ) /*0x1e7ea*/
              return 0; /*0x1e7ea*/
          }
        }
      }
    }
  }
  return n256; /*0x1e7ec*/
}


// Function: HiiRstStripeSizeToShift @ 0x1e84c (0x39 bytes)
// Index: 822/906

__int64 __fastcall HiiRstStripeSizeToShift(__int16 n32)
{
  __int64 result; // rax

  result = 1; /*0x1e84f*/
  if ( n32 != 1 ) /*0x1e856*/
  {
    switch ( n32 ) /*0x1e85a*/
    {
      case 2: /*0x1e85a*/
        return result; /*0x1e85a*/
      case 4: /*0x1e85a*/
        return 5; /*0x1e881*/
      case 8: /*0x1e85a*/
        return 10; /*0x1e87b*/
      case 16: /*0x1e85a*/
        return result; /*0x1e869*/
    }
    if ( n32 != 32 ) /*0x1e86e*/
      return 0xFFFF; /*0x1e875*/
  }
  return 0; /*0x1e875*/
}


// Function: RstHelper_e888 @ 0x1e888 (0x45 bytes)
// Index: 823/906

bool sub_1E888()
{
  bool result; // al

  if ( !byte_58030 ) /*0x1e893*/
  {
    byte_58030 = 1; /*0x1e8b6*/
    result = HiiBlockToConfig((__int64)&qword_24318, (__int64)L"RstHiiConfig", 310, (__int64)&i__5, 0); /*0x1e8bd*/
    --byte_58030; /*0x1e8c2*/
  }
  return result; /*0x1e8c8*/
}


// Function: HiiRstCheckCapacityWarn @ 0x1e8d0 (0xcb bytes)
// Index: 824/906

bool HiiRstCheckCapacityWarn()
{
  unsigned __int64 v0; // rdi
  unsigned __int16 n0x90; // bx
  unsigned __int64 v2; // rbp
  unsigned __int64 v3; // rsi
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v6; // [rsp+38h] [rbp-E0h]

  v0 = sub_B120(); /*0x1e8f4*/
  n0x90 = 0; /*0x1e8f7*/
  v2 = 0; /*0x1e8fb*/
  v3 = 0; /*0x1e8fe*/
  while ( v0 ) /*0x1e904*/
  {
    if ( (v0 & 1) != 0 && i__0[n0x90] == 2 ) /*0x1e91a*/
    {
      RstHelper_ce6c(n0x90, (__int64)i); /*0x1e924*/
      if ( v2 ) /*0x1e931*/
      {
        if ( v2 > v6 ) /*0x1e943*/
          v2 = v6; /*0x1e943*/
LABEL_10:
        if ( v3 < v6 ) /*0x1e94a*/
          v3 = v6; /*0x1e94a*/
        goto LABEL_12; /*0x1e94a*/
      }
      if ( v3 ) /*0x1e936*/
        goto LABEL_10; /*0x1e936*/
      v2 = v6; /*0x1e938*/
      v3 = v6; /*0x1e93b*/
    }
LABEL_12:
    ++n0x90; /*0x1e94e*/
    v0 >>= 1; /*0x1e956*/
    if ( n0x90 >= 0x90u ) /*0x1e95c*/
      return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e95c*/
  }
  return v3 && 100 * (v3 - v2) / v3 > 0xA; /*0x1e976*/
}


// Function: HiiRstUpdateStrIds @ 0x1e99c (0x1b2 bytes)
// Index: 825/906

bool __fastcall HiiRstUpdateStrIds(__int64 n18, __int64 n127)
{
  unsigned __int16 n8; // di
  unsigned __int16 n8_1; // si
  unsigned __int16 n8_2; // bp
  unsigned __int16 n8_3; // bx
  unsigned __int16 n8_4; // r12
  unsigned __int64 v7; // rbx
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v10; // [rsp+38h] [rbp-E0h]

  n8 = 8; /*0x1e9b8*/
  n8_1 = 8; /*0x1e9c3*/
  n8_2 = 8; /*0x1e9c6*/
  n8_3 = 8; /*0x1e9c9*/
  n8_4 = 8; /*0x1e9cc*/
  if ( (unsigned __int16)n18 >= 0x11u ) /*0x1e9d0*/
  {
    if ( (unsigned __int16)n18 <= 0x12u ) /*0x1e9d9*/
    {
      if ( (_WORD)n127 ) /*0x1ea7e*/
      {
        if ( (unsigned __int16)n127 <= 2u ) /*0x1ea83*/
        {
          n8 = 290; /*0x1eadc*/
          n8_1 = 292; /*0x1eae1*/
          n8_2 = 293; /*0x1eae4*/
          n8_3 = 294; /*0x1eae7*/
        }
        else if ( (unsigned __int16)n127 == 7 ) /*0x1ea88*/
        {
          n8 = 295; /*0x1ea91*/
          n8_1 = 296; /*0x1ea96*/
          v7 = sub_D764(n0x18); /*0x1eaaa*/
          RstHelper_ce6c(n24, (__int64)i); /*0x1eaad*/
          if ( v10 > v7 && 100 * (v10 - v7) / v10 > 0xA ) /*0x1eacf*/
            n8_4 = 297; /*0x1ead1*/
          n8_3 = 298; /*0x1ead5*/
        }
      }
    }
    else if ( (unsigned __int16)n18 == 21 && (_WORD)n127 ) /*0x1e9ed*/
    {
      if ( (unsigned __int16)n127 <= 3u ) /*0x1e9f6*/
      {
        n8 = 448; /*0x1ea69*/
        n8_1 = 449; /*0x1ea6e*/
        n8_2 = 450; /*0x1ea71*/
        n8_3 = 447; /*0x1ea74*/
      }
      else
      {
        switch ( (unsigned __int16)n127 ) /*0x1e9fb*/
        {
          case 4u: /*0x1e9fb*/
            n8 = 452; /*0x1ea56*/
            n8_1 = 453; /*0x1ea5b*/
            n8_2 = 454; /*0x1ea5e*/
            n8_3 = 451; /*0x1ea61*/
            break;
          case 7u: /*0x1e9fb*/
            n8 = 456; /*0x1ea43*/
            n8_1 = 457; /*0x1ea48*/
            n8_2 = 458; /*0x1ea4b*/
            n8_3 = 455; /*0x1ea4e*/
            break;
          case 0xAu: /*0x1e9fb*/
            n8_2 = 757; /*0x1ea12*/
            n8_3 = 754; /*0x1ea17*/
            n8 = 755; /*0x1ea1a*/
            if ( n2 == 1 && sub_1E028() == 1 ) /*0x1ea26*/
              n8_1 = 756; /*0x1ea28*/
            if ( HiiRstCheckCapacityWarn() ) /*0x1ea2b*/
              n8_4 = 299; /*0x1ea38*/
            break;
        }
      }
    }
  }
  RstHelper_dd38(0x117u, n8); /*0x1eaf2*/
  RstHelper_dd38(0x118u, n8_1); /*0x1eaff*/
  RstHelper_dd38(0x119u, n8_2); /*0x1eb0c*/
  RstHelper_dd38(0x11Cu, n8_3); /*0x1eb19*/
  RstHelper_dd38(0x11Au, n8_4); /*0x1eb27*/
  return RstHelper_e888(); /*0x1eb44*/
}


// Function: HiiRstCalcBlockSize @ 0x1eb50 (0xef bytes)
// Index: 826/906

__int16 __fastcall HiiRstCalcBlockSize(__int64 n24, unsigned __int64 i)
{
  char n24_1; // r12
  unsigned __int16 n5; // di
  _BYTE *i_; // rbp
  __int16 n2; // bx
  unsigned __int16 n0x90; // si
  int n0x4000; // eax
  unsigned __int16 n64; // ax
  __int64 ia[30]; // [rsp+20h] [rbp-108h] BYREF

  n24_1 = n24; /*0x1eb70*/
  n5 = HiiRstStripeSizeToShift(n2_0); /*0x1eb82*/
  i_ = i__0; /*0x1eb8d*/
  n2 = 0; /*0x1eb94*/
  n0x90 = 0; /*0x1eb98*/
  word_57EFF = sub_B8B0(n5); /*0x1eb9c*/
  do /*0x1ebd2*/
  {
    if ( *i_ != 1 && !(unsigned int)RstHelper_ce6c(n0x90, (__int64)ia) ) /*0x1ebb5*/
      ++n2; /*0x1ebbf*/
    ++n0x90; /*0x1ebc3*/
    ++i_; /*0x1ebcc*/
  }
  while ( n0x90 < 0x90u ); /*0x1ebd2*/
  n0x4000 = sub_C300(n2, n5, 0); /*0x1ebdd*/
  if ( !n0x4000 || n24_1 ) /*0x1ebea*/
  {
    if ( n5 ) /*0x1ebf0*/
    {
      if ( n5 == 5 ) /*0x1ebfd*/
        n64 = sub_BDB0(n2); /*0x1ec02*/
      else
        n64 = 64; /*0x1ec09*/
    }
    else
    {
      n64 = 128; /*0x1ebf2*/
    }
    LOWORD(n0x4000) = HiiRstBlockSizeToIndex(n64); /*0x1ec11*/
    n0x4000 = n0x4000; /*0x1ec16*/
  }
  return n0x4000; /*0x1ec35*/
}


// Function: Assert_67 @ 0x1ec40 (0x5e bytes)
// Index: 827/906

__int64 Assert_67()
{
  if ( n2_0 != 4 ) /*0x1ec50*/
    return 5; /*0x1ec92*/
  if ( n4 == 1 ) /*0x1ec5c*/
    return 3; /*0x1ec97*/
  if ( n4 != 2 ) /*0x1ec61*/
  {
    if ( n4 != 4 ) /*0x1ec66*/
    {
      if ( (unsigned __int8)RstDebugEnabled((unsigned int)(unsigned __int8)n4 - 2, 4) ) /*0x1ec68*/
        DebugAssert("HiiStandalone.cpp", 0x5B7u, "((BOOLEAN)(0==1))"); /*0x1ec84*/
    }
    return 5; /*0x1ec84*/
  }
  return 4; /*0x1ec8e*/
}


// Function: RstHelper_eca0 @ 0x1eca0 (0x50b bytes)
// Index: 828/906

__int64 __fastcall RstHelper_eca0(char a1, char a2)
{
  unsigned __int16 v3; // bp
  unsigned __int16 n0x90; // bx
  unsigned __int64 v5; // rdi
  __int16 v6; // dx
  unsigned __int16 n5; // r8
  __int16 n512; // ax
  unsigned __int8 v9; // al
  __int64 v10; // rdx
  __int64 n12; // rdi
  char *v12; // rax
  const CHAR8 *Language; // rbx
  __int16 n49; // ax
  CHAR8 *Language_1; // rcx
  unsigned __int64 v16; // r9
  const CHAR8 *StringToLanguage; // rax
  const CHAR8 *StringToLanguage_1; // rbx
  unsigned __int64 v19; // r10
  char *v21; // [rsp+30h] [rbp-188h] BYREF
  __int64 v22; // [rsp+38h] [rbp-180h]
  __int64 v23; // [rsp+40h] [rbp-178h]
  __int64 n4; // [rsp+48h] [rbp-170h]
  _BYTE v25[16]; // [rsp+50h] [rbp-168h] BYREF
  char v26[16]; // [rsp+60h] [rbp-158h] BYREF
  char v27; // [rsp+70h] [rbp-148h]
  _BYTE v28[24]; // [rsp+78h] [rbp-140h] BYREF
  __int64 i[16]; // [rsp+90h] [rbp-128h] BYREF
  unsigned __int16 v30; // [rsp+110h] [rbp-A8h]
  unsigned __int64 v32; // [rsp+1D0h] [rbp+18h] BYREF
  unsigned __int64 v33; // [rsp+1D8h] [rbp+20h] BYREF

  v21 = 0; /*0x1ecc3*/
  v22 = 0; /*0x1ecc8*/
  v23 = 0; /*0x1eccd*/
  n4 = 0; /*0x1ecd2*/
  v3 = -1; /*0x1ecd7*/
  n0x90 = 0; /*0x1ece1*/
  v5 = sub_B120(); /*0x1ecec*/
  while ( v5 ) /*0x1ecf2*/
  {
    if ( (v5 & 1) != 0 ) /*0x1ecf7*/
    {
      if ( i__0[n0x90] == 1 ) /*0x1ed0a*/
      {
        v6 = 0; /*0x1ed16*/
LABEL_8:
        sub_AA5C(n0x90, v6, 0); /*0x1ed18*/
      }
      else if ( i__0[n0x90] == 2 ) /*0x1ed0f*/
      {
        v6 = 1; /*0x1ed11*/
        goto LABEL_8; /*0x1ed14*/
      }
      if ( v3 == 0xFFFF && i__0[n0x90] != 1 ) /*0x1ed34*/
      {
        RstHelper_ce6c(n0x90, (__int64)i); /*0x1ed41*/
        v3 = v30; /*0x1ed46*/
      }
    }
    ++n0x90; /*0x1ed4e*/
    v5 >>= 1; /*0x1ed57*/
    if ( n0x90 >= 0x90u ) /*0x1ed5d*/
      break; /*0x1ed5d*/
  }
  sub_8754(v26, 0x10u, (char *)&i__5 + 1); /*0x1ed5f*/
  v21 = v26; /*0x1ed83*/
  v27 = 0; /*0x1ed88*/
  n5 = HiiRstStripeSizeToShift(n2_0); /*0x1eda3*/
  WORD1(v23) = n5; /*0x1eda7*/
  if ( (unsigned __int16)n0x4000 > 0x80u ) /*0x1edaf*/
  {
    n512 = 512; /*0x1ee18*/
    if ( n0x4000 != 256 ) /*0x1ee1d*/
    {
      n512 = 1024; /*0x1ee21*/
      if ( n0x4000 != 512 ) /*0x1ee26*/
      {
        n512 = 2048; /*0x1ee2a*/
        if ( n0x4000 != 1024 ) /*0x1ee2f*/
        {
          n512 = 4096; /*0x1ee33*/
          if ( n0x4000 != 2048 ) /*0x1ee38*/
          {
            n512 = 0x2000; /*0x1ee3c*/
            if ( n0x4000 != 4096 ) /*0x1ee41*/
            {
              n512 = 0x4000; /*0x1ee45*/
              if ( n0x4000 != 0x2000 ) /*0x1ee4a*/
              {
                if ( n0x4000 != 0x4000 ) /*0x1ee4e*/
                  goto LABEL_37; /*0x1ee4e*/
                n512 = 0x8000; /*0x1ee58*/
              }
            }
          }
        }
      }
    }
    goto LABEL_39; /*0x1ee58*/
  }
  switch ( n0x4000 ) /*0x1edb1*/
  {
    case 128: /*0x1edb1*/
      n512 = 256; /*0x1ee0a*/
      goto LABEL_39; /*0x1ee0f*/
    case 1: /*0x1edb1*/
      LOWORD(v23) = 2; /*0x1ee03*/
      goto LABEL_40; /*0x1ee08*/
    case 2: /*0x1edb1*/
      LOWORD(v23) = 4; /*0x1edfc*/
      goto LABEL_40; /*0x1ee01*/
    case 4: /*0x1edb1*/
      n512 = 8; /*0x1edf5*/
      goto LABEL_39; /*0x1edfa*/
    case 8: /*0x1edb1*/
      LOWORD(v23) = 16; /*0x1edee*/
      goto LABEL_40; /*0x1edf3*/
    case 16: /*0x1edb1*/
      n512 = 32; /*0x1ede7*/
      goto LABEL_39; /*0x1edec*/
    case 32: /*0x1edb1*/
      n512 = 64; /*0x1ede0*/
LABEL_39:
      LOWORD(v23) = n512; /*0x1ee5d*/
      goto LABEL_40; /*0x1ee5d*/
    case 64: /*0x1edb1*/
      LOWORD(v23) = 128; /*0x1edd5*/
      goto LABEL_40; /*0x1eddb*/
  }
LABEL_37:
  LOWORD(v23) = 0; /*0x1ee50*/
LABEL_40:
  v9 = sub_A440(n5); /*0x1ee62*/
  v32 = 0; /*0x1ee8e*/
  v33 = 0; /*0x1ee96*/
  WORD2(v23) = v9; /*0x1eea3*/
  RstParseDecimalString((__int64)dword_57E41, 9u, 2u, &v32, &v33); /*0x1eea9*/
  if ( a2 ) /*0x1eebb*/
  {
    LODWORD(v22) = 0; /*0x1eebd*/
  }
  else
  {
    v10 = ((v33 << 10) * (unsigned __int128)0x47AE147AE147AE15uLL) >> 64; /*0x1eed0*/
    LODWORD(v22) = ((_DWORD)v32 << 10) + ((v10 + (((v33 << 10) - v10) >> 1)) >> 6); /*0x1eeec*/
  }
  LODWORD(n4) = Assert_67(); /*0x1eefd*/
  if ( (_DWORD)n4 == 4 ) /*0x1ef03*/
    sub_AA5C((unsigned __int8)n0x90, 1, 3); /*0x1ef12*/
  n12 = (unsigned int)Assert_116((__int64)&v21, v3, a1 == 0, 1); /*0x1ef30*/
  v12 = (char *)sub_22EA4(n12); /*0x1ef32*/
  sub_872C(StartOfBuffer, 0x96u, v12); /*0x1ef46*/
  HiiGetString(HiiHandle, 0x24Fu, StartOfBuffer); /*0x1ef61*/
  if ( (_DWORD)n12 ) /*0x1ef70*/
  {
    if ( (_DWORD)n12 != 12 ) /*0x1f06d*/
    {
      StringToLanguage = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Du, 0); /*0x1f07e*/
      StringToLanguage_1 = StringToLanguage; /*0x1f083*/
      if ( StringToLanguage ) /*0x1f089*/
      {
        HiiGetString(HiiHandle, 0x24Cu, StringToLanguage); /*0x1f09d*/
        (*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(StringToLanguage_1); /*0x1f0ac*/
      }
    }
    goto LABEL_59; /*0x1f0ac*/
  }
  if ( !a2 ) /*0x1ef79*/
  {
LABEL_59:
    LODWORD(v16) = v22; /*0x1f0af*/
    goto LABEL_60; /*0x1f0af*/
  }
  Language = (const CHAR8 *)HiiGetStringToLanguage(HiiHandle, 0x24Eu, 0); /*0x1ef9d*/
  if ( Language ) /*0x1efa3*/
  {
    RstHelper_8da8( /*0x1efef*/
      (__int64)v28,
      0x13u,
      "%d.%02d",
      (unsigned int)v22 >> 10,
      ((100 * (unsigned __int64)(unsigned int)v22) >> 10) % 0x64);
    n49 = *(_WORD *)Language; /*0x1eff4*/
    Language_1 = (CHAR8 *)Language; /*0x1eff7*/
    while ( n49 && n49 != 49 ) /*0x1f000*/
    {
      Language_1 += 2; /*0x1f002*/
      n49 = *(_WORD *)Language_1; /*0x1f005*/
    }
    if ( *(_WORD *)Language_1 ) /*0x1f00e*/
    {
      sub_872C(Language_1, 0x14u, v28); /*0x1f01e*/
      HiiGetString(HiiHandle, 0x24Cu, Language); /*0x1f035*/
    }
    (*(void (__fastcall **)(const CHAR8 *))(qword_58070 + 72))(Language); /*0x1f044*/
  }
  v16 = 95 * (unsigned __int64)(unsigned int)v22 / 0x64; /*0x1f05f*/
  LODWORD(v22) = v16; /*0x1f063*/
LABEL_60:
  v25[0] = 0; /*0x1f0be*/
  *(_QWORD *)&v25[1] = 0; /*0x1f0c8*/
  if ( (10000 * (unsigned __int64)(unsigned int)v16) >> 10 != 100 /*0x1f10c*/
                                                            * (((10000 * (unsigned __int64)(unsigned int)v16) >> 10)
                                                             / 0x64)
    && v32
    && v33 )
  {
    LODWORD(v19) = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64 + 1; /*0x1f133*/
  }
  else
  {
    v19 = ((100 * (unsigned __int64)(unsigned int)v16) >> 10) % 0x64; /*0x1f15a*/
  }
  RstHelper_8da8((__int64)v25, 9u, "%d.%02d", (unsigned int)v16 >> 10, v19); /*0x1f176*/
  sub_872C(dword_57E41, 9u, v25); /*0x1f189*/
  return (unsigned int)n12; /*0x1f198*/
}


// Function: RstHelper_f1ac @ 0x1f1ac (0x248 bytes)
// Index: 829/906

bool __fastcall RstHelper_f1ac(unsigned __int16 a1)
{
  unsigned int i_2; // eax
  unsigned int i_3; // ebx
  unsigned __int16 n5; // ax
  __int64 i_1; // rax
  unsigned __int64 j; // rdx
  unsigned __int16 v7; // bx
  unsigned __int16 n5_1; // ax
  __int64 j_1; // rax
  unsigned __int64 v10; // r12
  unsigned __int16 k; // bp
  int v12; // ebx
  bool v13; // al
  __int64 i[16]; // [rsp+20h] [rbp-108h] BYREF
  __int16 v16; // [rsp+A0h] [rbp-88h]
  int n2; // [rsp+B4h] [rbp-74h]

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f1e9*/
  RstHelper_ce6c(a1, (__int64)i); /*0x1f1f7*/
  if ( n2 == 2 ) /*0x1f204*/
  {
    i_2 = sub_B27C(v16); /*0x1f212*/
    i_3 = i_2; /*0x1f220*/
    if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f227*/
    {
      byte_57F34 = 0; /*0x1f230*/
      n5 = HiiRstStripeSizeToShift(n2_0); /*0x1f237*/
      i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f24b*/
      i_0 = i_1; /*0x1f257*/
      if ( n2 == 2 ) /*0x1f25e*/
        i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f26b*/
    }
    else
    {
      i_0 = i_2; /*0x1f274*/
      byte_57F34 = 1; /*0x1f27b*/
    }
    for ( j = 0; i_3; i_3 >>= 1 ) /*0x1f287*/
    {
      if ( (i_3 & 1) != 0 ) /*0x1f290*/
        *((_BYTE *)&i__5 + (unsigned __int16)j + 71) = *((_BYTE *)&i__5 + a1 + 71); /*0x1f29a*/
      LOWORD(j) = j + 1; /*0x1f29f*/
    }
  }
  else if ( *((_BYTE *)&i__5 + a1 + 71) == 1 ) /*0x1f2b9*/
  {
    v7 = 0; /*0x1f2c4*/
    n5_1 = HiiRstStripeSizeToShift(n2_0); /*0x1f2c7*/
    j_1 = Assert_115(n5_0, n5_1, 0, 0); /*0x1f2db*/
    j = j_1; /*0x1f2e0*/
    if ( j_1 ) /*0x1f2e6*/
    {
      while ( (j & 1) == 0 || *((_BYTE *)&i__5 + v7 + 71) == 1 ) /*0x1f2f5*/
      {
        j >>= 1; /*0x1f2fb*/
        ++v7; /*0x1f2fe*/
        if ( !j ) /*0x1f304*/
          goto LABEL_16; /*0x1f304*/
      }
    }
    else
    {
LABEL_16:
      i_0 = j_1; /*0x1f306*/
      if ( n2 == 2 ) /*0x1f314*/
        i_0 = (unsigned int)j_1 & ~dword_57F1F; /*0x1f321*/
    }
  }
  else
  {
    v10 = sub_B120(); /*0x1f331*/
    for ( k = 0; v10; ++k ) /*0x1f33a*/
    {
      if ( !(unsigned int)RstHelper_ce6c(k, (__int64)i) ) /*0x1f344*/
      {
        if ( n2 == 2 || n2 == 2 && (v12 = sub_BD68(k), v12 != (unsigned int)sub_BD68(a1)) ) /*0x1f375*/
          i_0 &= ~(1LL << k); /*0x1f383*/
      }
      v10 >>= 1; /*0x1f38a*/
    }
  }
  HiiRstCalcBlockSize(0, j); /*0x1f397*/
  byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f3a9*/
  if ( sub_1E028() || (v13 = HiiRstCheckCapacityWarn(), byte_57F55 = 0, v13) ) /*0x1f3c9*/
    byte_57F55 = 1; /*0x1f3cb*/
  return RstHelper_e888(); /*0x1f3eb*/
}


// Function: RstHelper_f3f4 @ 0x1f3f4 (0xa3 bytes)
// Index: 830/906

bool __fastcall RstHelper_f3f4(unsigned __int16 n24)
{
  __int64 n24_1; // rcx
  unsigned __int64 i; // rdx
  unsigned __int16 n5; // ax
  __int64 i_1; // rax

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1f413*/
  LOBYTE(n24_1) = 1; /*0x1f418*/
  HiiRstCalcBlockSize(n24_1, i); /*0x1f41a*/
  byte_57F33 = 0; /*0x1f42e*/
  MemZero(i__0, 1, 144); /*0x1f435*/
  n5 = HiiRstStripeSizeToShift(n2_0); /*0x1f441*/
  i_1 = Assert_115(n5_0, n5, 0, 0); /*0x1f455*/
  i_0 = i_1; /*0x1f461*/
  if ( n2 == 2 ) /*0x1f468*/
    i_0 = ~dword_57F1F & (unsigned int)i_1; /*0x1f475*/
  byte_57F08 = (unsigned int)RstHelper_eca0(1, 1) == 0; /*0x1f487*/
  return RstHelper_e888(); /*0x1f48e*/
}


// Function: RstHelper_f498 @ 0x1f498 (0x164 bytes)
// Index: 831/906

__int16 __fastcall RstHelper_f498(__int64 i, unsigned int n5)
{
  int v4; // eax
  unsigned int v5; // ecx
  int v6; // r11d
  __int16 n8; // ax
  int v8; // r11d
  int v9; // r11d
  int v10; // r11d
  int n8_1; // r11d
  unsigned __int16 n5_1; // ax
  __int16 result; // ax
  _BYTE ia[16]; // [rsp+20h] [rbp-38h] BYREF
  CHAR16 Source[20]; // [rsp+30h] [rbp-28h] BYREF

  MemZero((_BYTE *)i, 0, 310); /*0x1f4b9*/
  *(_DWORD *)(i + 215) = n5; /*0x1f4c5*/
  *(_BYTE *)(i + 269) = -1; /*0x1f4cb*/
  *(_BYTE *)(i + 283) = 2; /*0x1f4d2*/
  *(_BYTE *)(i + 270) = -1; /*0x1f4d9*/
  *(_BYTE *)i = sub_DA80(n5); /*0x1f4eb*/
  v4 = sub_B93C(); /*0x1f4ed*/
  v5 = *(_DWORD *)(i + 215); /*0x1f4f2*/
  *(_DWORD *)(i + 259) = v4; /*0x1f4f8*/
  *(_QWORD *)(i + 239) = sub_B1C4(v5); /*0x1f503*/
  *(_DWORD *)(i + 255) = sub_D504(); /*0x1f50f*/
  *(_DWORD *)(i + 219) = HiiBlockCompareConst(); /*0x1f527*/
  MemZero(ia, 0, 16); /*0x1f52d*/
  MemZero(Source, 0, 32); /*0x1f53f*/
  RstHelper_cc54(ia, 0x10u); /*0x1f54b*/
  sub_872C(Source, 0x10u, ia); /*0x1f55c*/
  StrnCpy((CHAR16 *)(i + 1), Source, 0x20u); /*0x1f56d*/
  word_57E53 = sub_D2C0(*(_DWORD *)(i + 215)); /*0x1f57d*/
  v6 = (unsigned __int16)sub_D34C(*(_DWORD *)(i + 215)); /*0x1f58f*/
  n8 = 1; /*0x1f593*/
  v8 = v6 - 1; /*0x1f596*/
  if ( v8 ) /*0x1f599*/
  {
    v9 = v8 - 1; /*0x1f59b*/
    if ( v9 ) /*0x1f59e*/
    {
      v10 = v9 - 2; /*0x1f5a0*/
      if ( v10 ) /*0x1f5a3*/
      {
        n8_1 = v10 - 4; /*0x1f5a5*/
        n8 = 8; /*0x1f5a9*/
        if ( n8_1 ) /*0x1f5ac*/
        {
          if ( n8_1 == 8 ) /*0x1f5b1*/
            n8 = 16; /*0x1f5ba*/
          else
            n8 = -1; /*0x1f5b3*/
        }
      }
      else
      {
        n8 = 4; /*0x1f5bf*/
      }
    }
    else
    {
      n8 = 2; /*0x1f5c6*/
    }
  }
  n2_0 = n8; /*0x1f5cc*/
  n5_1 = HiiRstStripeSizeToShift(n8); /*0x1f5d3*/
  result = sub_B8B0(n5_1); /*0x1f5db*/
  word_57EFF = result; /*0x1f5ef*/
  return result; /*0x1f5f6*/
}


// Function: RstHelper_f5fc @ 0x1f5fc (0x24d bytes)
// Index: 832/906

EFI_STRING __fastcall RstHelper_f5fc(char a1)
{
  int v2; // eax
  int v3; // eax
  int v4; // eax
  unsigned __int16 n750; // ax
  __int64 StringToLanguage; // rbx
  __int64 v7; // rax
  EFI_STRING result; // rax
  unsigned int v9; // esi
  unsigned __int8 n0x18; // bp
  unsigned __int16 v11; // di
  unsigned __int16 v12; // ax
  __int64 v13; // rbx
  __int64 v14; // rax
  EFI_STRING_ID _stuvwxyz_____; // cx
  _BYTE i_3[16]; // [rsp+40h] [rbp-118h] BYREF
  _WORD i_2[12]; // [rsp+50h] [rbp-108h] BYREF
  _WORD i[20]; // [rsp+68h] [rbp-F0h] BYREF
  __int64 i_1[4]; // [rsp+90h] [rbp-C8h] BYREF
  unsigned int v20; // [rsp+B4h] [rbp-A4h]
  unsigned __int64 v21; // [rsp+B8h] [rbp-A0h]
  int n55_1; // [rsp+11Ch] [rbp-3Ch]
  int n55; // [rsp+120h] [rbp-38h]

  RstHelper_f498((__int64)&i__5, 0); /*0x1f622*/
  if ( a1 ) /*0x1f629*/
    RstHelper_e888(); /*0x1f62b*/
  v2 = sub_B5C0(); /*0x1f630*/
  if ( v2 ) /*0x1f637*/
  {
    v3 = v2 - 1; /*0x1f639*/
    if ( !v3 ) /*0x1f63c*/
    {
      n750 = 750; /*0x1f656*/
      goto LABEL_11; /*0x1f65b*/
    }
    v4 = v3 - 1; /*0x1f63e*/
    if ( !v4 ) /*0x1f641*/
    {
      n750 = 751; /*0x1f64f*/
      goto LABEL_11; /*0x1f654*/
    }
    if ( v4 == 1 ) /*0x1f646*/
    {
      n750 = 752; /*0x1f648*/
      goto LABEL_11; /*0x1f64d*/
    }
  }
  n750 = 749; /*0x1f65d*/
LABEL_11:
  StringToLanguage = HiiGetStringToLanguage(HiiHandle, n750, 0); /*0x1f662*/
  v7 = HiiGetStringToLanguage(HiiHandle, 0x2ECu, 0); /*0x1f686*/
  HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s %s", v7, StringToLanguage); /*0x1f6ad*/
  result = HiiGetString(HiiHandle, 0x2F1u, StartOfBuffer); /*0x1f6c4*/
  v9 = dword_57F23; /*0x1f6c9*/
  if ( dword_57F23 ) /*0x1f6d1*/
  {
    n0x18 = 0; /*0x1f6d7*/
    do /*0x1f826*/
    {
      if ( (v9 & 1) != 0 ) /*0x1f6e6*/
      {
        RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f6f7*/
        MemZero(StartOfBuffer, 0, 300); /*0x1f704*/
        MemZero(i, 0, 34); /*0x1f714*/
        MemZero(i_2, 0, 20); /*0x1f724*/
        MemZero(i_3, 0, 10); /*0x1f734*/
        sub_872C(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f74b*/
        RstFormatDiskSize((__int64)i_3, v21, v20, 1, 0); /*0x1f76d*/
        sub_872C(i_2, 0xAu, i_3); /*0x1f781*/
        v11 = sub_1D508(n55); /*0x1f799*/
        v12 = sub_1D508(n55_1); /*0x1f79c*/
        v13 = HiiGetStringToLanguage(HiiHandle, v12, 0); /*0x1f7c0*/
        v14 = HiiGetStringToLanguage(HiiHandle, v11, 0); /*0x1f7c3*/
        HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v14, i_2, v13); /*0x1f7ee*/
        if ( n0x18 >= 0x18u ) /*0x1f7f7*/
          _stuvwxyz_____ = 0; /*0x1f80a*/
        else
          _stuvwxyz_____ = aStuvwxyz[n0x18]; // "stuvwxyz{|}~" /*0x1f804*/
        result = HiiGetString(HiiHandle, _stuvwxyz_____, StartOfBuffer); /*0x1f81c*/
      }
      ++n0x18; /*0x1f821*/
      v9 >>= 1; /*0x1f824*/
    }
    while ( v9 ); /*0x1f826*/
  }
  return result; /*0x1f840*/
}


// Function: RstHelper_f84c @ 0x1f84c (0x255 bytes)
// Index: 833/906

EFI_STRING __fastcall RstHelper_f84c(unsigned int n5)
{
  EFI_STRING result; // rax
  unsigned int v2; // esi
  unsigned __int8 n0x18; // bp
  unsigned __int16 v4; // di
  unsigned __int16 v5; // ax
  __int64 StringToLanguage; // rbx
  __int64 v7; // rax
  EFI_STRING_ID StringId; // cx
  unsigned __int64 v9; // rdi
  unsigned __int8 n0x30; // bl
  EFI_STRING_ID StringId_1; // si
  const CHAR8 *Language; // rax
  EFI_STRING_ID StringId_2; // si
  const CHAR8 *Language_1; // rax
  _BYTE i_3[16]; // [rsp+40h] [rbp-108h] BYREF
  _WORD i_2[12]; // [rsp+50h] [rbp-F8h] BYREF
  _WORD i[20]; // [rsp+68h] [rbp-E0h] BYREF
  __int64 i_1[4]; // [rsp+90h] [rbp-B8h] BYREF
  unsigned int v19; // [rsp+B4h] [rbp-94h]
  unsigned __int64 v20; // [rsp+B8h] [rbp-90h]
  int n55_1; // [rsp+11Ch] [rbp-2Ch]
  int n55; // [rsp+120h] [rbp-28h]

  RstHelper_f498((__int64)&i__5, n5); /*0x1f871*/
  RstHelper_e888(); /*0x1f876*/
  result = RstHelper_dd38(0x96u, 0x90u); /*0x1f883*/
  v2 = dword_57F23; /*0x1f888*/
  if ( dword_57F23 ) /*0x1f897*/
  {
    n0x18 = 0; /*0x1f89d*/
    do /*0x1f9fb*/
    {
      if ( (v2 & 1) != 0 ) /*0x1f8ac*/
      {
        RstHelper_c8a8(n0x18, (__int64)i_1); /*0x1f8bd*/
        MemZero(StartOfBuffer, 0, 300); /*0x1f8d1*/
        MemZero(i, 0, 34); /*0x1f8e1*/
        MemZero(i_2, 0, 20); /*0x1f8f1*/
        MemZero(i_3, 0, 10); /*0x1f901*/
        sub_872C(i, 0x11u, (_BYTE *)i_1 + 4); /*0x1f918*/
        RstFormatDiskSize((__int64)i_3, v20, v19, 1, 0); /*0x1f93a*/
        sub_872C(i_2, 0xAu, i_3); /*0x1f94e*/
        v4 = sub_1D508(n55); /*0x1f966*/
        v5 = sub_1D508(n55_1); /*0x1f969*/
        StringToLanguage = HiiGetStringToLanguage(HiiHandle, v5, 0); /*0x1f98d*/
        v7 = HiiGetStringToLanguage(HiiHandle, v4, 0); /*0x1f990*/
        HiiCfgArrayGet(StartOfBuffer, 0x12Cu, (unsigned __int8 *)L"%s, %s, %s, %s", i, v7, i_2, StringToLanguage); /*0x1f9c1*/
        if ( n0x18 >= 0x18u ) /*0x1f9ca*/
          StringId = 0; /*0x1f9db*/
        else
          StringId = *(__int16 *)((char *)&word_27A00 + (_QWORD)&_ImageBase[n0x18]); /*0x1f9d0*/
        result = HiiGetString(HiiHandle, StringId, StartOfBuffer); /*0x1f9f1*/
      }
      ++n0x18; /*0x1f9f6*/
      v2 >>= 1; /*0x1f9f9*/
    }
    while ( v2 ); /*0x1f9fb*/
  }
  v9 = qword_57F0F; /*0x1fa01*/
  if ( qword_57F0F ) /*0x1fa0b*/
  {
    n0x30 = 0; /*0x1fa0d*/
    do /*0x1fa81*/
    {
      if ( (v9 & 1) != 0 ) /*0x1fa18*/
      {
        if ( n0x30 >= 0x30u ) /*0x1fa1d*/
          StringId_1 = 0; /*0x1fa2d*/
        else
          StringId_1 = *(__int16 *)((char *)&word_27A30 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa22*/
        Language = RstHelper_dd6c(n0x30); /*0x1fa31*/
        HiiGetString(HiiHandle, StringId_1, Language); /*0x1fa46*/
        if ( n0x30 >= 0x30u ) /*0x1fa4e*/
          StringId_2 = 0; /*0x1fa5e*/
        else
          StringId_2 = *(__int16 *)((char *)&word_27A90 + (_QWORD)&_ImageBase[n0x30]); /*0x1fa53*/
        Language_1 = RstHelper_dee0(n0x30); /*0x1fa62*/
        result = HiiGetString(HiiHandle, StringId_2, Language_1); /*0x1fa77*/
      }
      ++n0x30; /*0x1fa7c*/
      v9 >>= 1; /*0x1fa7e*/
    }
    while ( v9 ); /*0x1fa81*/
  }
  return result; /*0x1fa9b*/
}


// Function: RstHelper_faa4 @ 0x1faa4 (0xf1 bytes)
// Index: 834/906

void __fastcall RstHelper_faa4(__int16 n10)
{
  unsigned int n12; // ebx
  char *v2; // rax
  __int64 StringToLanguage; // rax
  __int16 n23; // [rsp+50h] [rbp+8h] BYREF
  __int16 n13; // [rsp+52h] [rbp+Ah]

  if ( n10 == 1 || n10 == 10 ) /*0x1fac3*/
  {
    HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fae4*/
    n12 = RstHelper_eca0(0, 0); /*0x1faf2*/
    if ( n12 ) /*0x1faf6*/
    {
      do /*0x1fb66*/
      {
        v2 = (char *)sub_22EA4(n12); /*0x1fb0d*/
        sub_872C(StartOfBuffer, 0x96u, v2); /*0x1fb1d*/
        StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x252u, 0); /*0x1fb31*/
        ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x1fb54*/
      }
      while ( n23 != 23 && n13 != 13 ); /*0x1fb66*/
    }
    ((void (*)(void))qword_35418[42])(); /*0x1fb6f*/
    RstHelper_f84c(n5_0); /*0x1fb7b*/
  }
}


// Function: RstHelper_fb98 @ 0x1fb98 (0x2da bytes)
// Index: 835/906

char __fastcall RstHelper_fb98(__int16 j)
{
  int n14; // eax
  unsigned __int16 v3; // ax
  unsigned __int8 n0x30; // bl
  unsigned __int16 v5; // ax
  unsigned __int16 v6; // ax
  unsigned __int64 v7; // rsi
  unsigned __int8 n24; // di
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  EFI_STRING_ID StringId_1; // ax
  const CHAR8 *Language_1; // r8
  __int64 n5; // rdx
  __int16 n8; // ax
  _WORD *n0x90; // rcx
  unsigned int v16; // edi
  EFI_STRING_ID n744; // si
  CHAR8 *Language_2; // rax
  _BYTE i[112]; // [rsp+30h] [rbp-78h] BYREF

  n14 = RstHelper_c8a8(j, (__int64)&i__1); /*0x1fbbe*/
  if ( n14 != 14 ) /*0x1fbc6*/
  {
    dword_57F09 = dword_58008; /*0x1fbde*/
    n0x18 = j; /*0x1fbe4*/
    RstHelper_dca0(0x132u, (_BYTE *)&i__1 + 4); /*0x1fbeb*/
    v3 = sub_1D508(n55); /*0x1fbf6*/
    RstHelper_dd38(0x135u, v3); /*0x1fc03*/
    MemZero(i, 0, 100); /*0x1fc13*/
    n0x30 = 0; /*0x1fc2b*/
    RstFormatDiskSize((__int64)i, qword_57F98, dword_57F94, 1, 0); /*0x1fc34*/
    RstHelper_dca0(0x13Au, i); /*0x1fc43*/
    v5 = sub_1D508(n55_0); /*0x1fc4e*/
    RstHelper_dd38(0x13Du, v5); /*0x1fc5b*/
    RstHelper_dd38(0x140u, 10 - (byte_57FF8 != 0)); /*0x1fc76*/
    RstHelper_8da8((__int64)i, 0x63u, "%ld", dword_57F94); /*0x1fc96*/
    RstHelper_dca0(0x143u, i); /*0x1fca5*/
    v6 = sub_1D508(n55_1); /*0x1fcb0*/
    RstHelper_dd38(0x137u, v6); /*0x1fcbd*/
    v7 = sub_B3A0(j); /*0x1fcca*/
    qword_57F17 = v7; /*0x1fccd*/
    if ( v7 ) /*0x1fcd7*/
    {
      n24 = 0; /*0x1fcd9*/
      do /*0x1fd35*/
      {
        if ( (v7 & 1) != 0 ) /*0x1fce0*/
        {
          RstHelper_dd6c(n24); /*0x1fce5*/
          StringId = sub_1D7F0(n24); /*0x1fcf0*/
          HiiGetString(HiiHandle, StringId, Language); /*0x1fd02*/
          RstHelper_dee0(n24); /*0x1fd0a*/
          StringId_1 = sub_1DA48(n24); /*0x1fd15*/
          HiiGetString(HiiHandle, StringId_1, Language_1); /*0x1fd27*/
        }
        v7 >>= 1; /*0x1fd2c*/
        ++n24; /*0x1fd2f*/
      }
      while ( v7 ); /*0x1fd35*/
    }
    n5 = (unsigned int)n5; /*0x1fd37*/
    if ( (_WORD)n5 ) /*0x1fd4d*/
    {
      switch ( (unsigned __int16)n5 ) /*0x1fd52*/
      {
        case 1u: /*0x1fd52*/
          n2_0 = 2; /*0x1fd76*/
          goto LABEL_17; /*0x1fd7e*/
        case 5u: /*0x1fd52*/
          n2_0 = 4; /*0x1fd6c*/
          goto LABEL_17; /*0x1fd74*/
        case 0xAu: /*0x1fd52*/
          n8 = 8; /*0x1fd65*/
          break;
        default:
          n8 = -1; /*0x1fd5e*/
          break;
      }
    }
    else
    {
      n8 = 32; /*0x1fd80*/
    }
    n2_0 = n8; /*0x1fd85*/
LABEL_17:
    if ( n5 != 5 ) /*0x1fd8f*/
    {
      dword_57F35 = 0; /*0x1fe49*/
      goto LABEL_35; /*0x1fe49*/
    }
    LOBYTE(n5) = n0x90_0; /*0x1fd95*/
    v16 = Assert_23(n5_0, n5); /*0x1fda6*/
    dword_57F35 = v16; /*0x1fda8*/
    if ( v16 ) /*0x1fdb0*/
    {
      do /*0x1fdf2*/
      {
        if ( (v16 & 1) != 0 ) /*0x1fdb6*/
        {
          if ( n0x30 >= 0x30u ) /*0x1fdbb*/
          {
            n744 = 744; /*0x1fdcd*/
          }
          else
          {
            n0x90 = n0x90_2; /*0x1fdbd*/
            n744 = n0x90_2[n0x30]; /*0x1fdc7*/
          }
          LOBYTE(n0x90) = n0x30; /*0x1fdd2*/
          Language_2 = RstHelper_ddc8((unsigned __int64)n0x90); /*0x1fdd4*/
          HiiGetString(HiiHandle, n744, Language_2); /*0x1fde9*/
        }
        ++n0x30; /*0x1fdee*/
        v16 >>= 1; /*0x1fdf0*/
      }
      while ( v16 ); /*0x1fdf2*/
      v16 = dword_57F35; /*0x1fdf4*/
    }
    if ( n2_1 != 1 ) /*0x1fe03*/
    {
      if ( n2_1 == 2 ) /*0x1fe08*/
        goto LABEL_31; /*0x1fe08*/
      if ( n2_1 != 3 ) /*0x1fe0d*/
      {
        if ( n2_1 != 4 ) /*0x1fe12*/
        {
          n4 = 4; /*0x1fe14*/
LABEL_35:
          LOBYTE(n14) = RstHelper_e888(); /*0x1fe4f*/
          return n14; /*0x1fe4f*/
        }
LABEL_31:
        n4 = 2; /*0x1fe1d*/
        n0x90 = n0x90_0; /*0x1fe2a*/
        if ( (_BYTE)n0x90_0 == 0xFF ) /*0x1fe32*/
          dword_57F35 = v16 | 0x80000000; /*0x1fe38*/
        goto LABEL_35; /*0x1fe3e*/
      }
    }
    n4 = 1; /*0x1fe40*/
    goto LABEL_35; /*0x1fe47*/
  }
  return n14; /*0x1fe6c*/
}


// Function: RstHelper_fe74 @ 0x1fe74 (0xed bytes)
// Index: 836/906

bool RstHelper_fe74()
{
  unsigned int n2; // eax
  char n0x90; // bl
  unsigned int v3; // eax

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1fe95*/
  dword_57F09 &= ~0x80000000; /*0x1fe9a*/
  if ( n5 == 5 ) /*0x1fea9*/
  {
    n2 = Assert_67(); /*0x1feab*/
    n0x90 = 0; /*0x1feb0*/
    if ( n2 < 2 || n2 == 3 ) /*0x1fec0*/
      goto LABEL_6; /*0x1fec0*/
    if ( n2 != 4 ) /*0x1fec5*/
    {
      if ( n2 != 5 ) /*0x1feca*/
      {
LABEL_8:
        n0x90 = n0x90_0; /*0x1fedc*/
        return RstHelper_e888(); /*0x1fee2*/
      }
LABEL_6:
      if ( n2_1 != n2 ) /*0x1fed2*/
        dword_57F09 |= 0x80000000; /*0x1fed4*/
      goto LABEL_8; /*0x1fed4*/
    }
    if ( n2_1 != 4 || (_BYTE)n0x90_0 != n0x90 ) /*0x1ff09*/
    {
      dword_57F09 |= 0x80000000; /*0x1ff0b*/
      if ( n2_1 != 4 ) /*0x1ff16*/
      {
        if ( RstDebugEnabled() && _bittest(&dword_57F35, 0x1Fu) ) /*0x1ff21*/
          DebugAssert("HiiStandalone.cpp", 0x932u, "( hii_g_Configuration.RwhJournalDisksBitMap & 0x80000000 ) == 0"); /*0x1ff3e*/
        v3 = dword_57F35; /*0x1ff43*/
        if ( dword_57F35 ) /*0x1ff4b*/
        {
          while ( (v3 & 1) == 0 ) /*0x1ff4f*/
          {
            ++n0x90; /*0x1ff51*/
            v3 >>= 1; /*0x1ff53*/
            if ( !v3 ) /*0x1ff55*/
              return RstHelper_e888(); /*0x1ff55*/
          }
          n0x90 = n0x90; /*0x1ff59*/
        }
      }
    }
  }
  return RstHelper_e888(); /*0x1fee8*/
}


// Function: RstHelper_ff64 @ 0x1ff64 (0xf5 bytes)
// Index: 837/906

bool RstHelper_ff64()
{
  unsigned int n4; // ebx
  unsigned int n12; // ebx
  char *v2; // rax
  __int64 StringToLanguage; // rax
  __int16 n23; // [rsp+50h] [rbp+8h] BYREF
  __int16 n13; // [rsp+52h] [rbp+Ah]

  HiiGetConfigString((__int64)&qword_24318, (wchar_t *)L"RstHiiConfig", 310, (__int64)&i__5); /*0x1ff93*/
  n4 = Assert_67(); /*0x1ff9d*/
  if ( n4 == 4 && n0x90 != -1 ) /*0x1ffad*/
    sub_AA5C((unsigned __int8)n0x90, 1, 3); /*0x1ffb8*/
  n12 = Assert_107(byte_57F88, n4); /*0x1ffca*/
  if ( n12 ) /*0x1ffce*/
  {
    do /*0x2003e*/
    {
      v2 = (char *)sub_22EA4(n12); /*0x1ffe5*/
      sub_872C(StartOfBuffer, 0x96u, v2); /*0x1fff5*/
      StringToLanguage = HiiGetStringToLanguage(HiiHandle, 0x2EBu, 0); /*0x20009*/
      ConsolePrintBoxed(23, &n23, &unk_2442C, StringToLanguage, StartOfBuffer, &unk_2442C, 0); /*0x2002c*/
    }
    while ( n23 != 23 && n13 != 13 ); /*0x2003e*/
  }
  return RstHelper_e888(); /*0x2004f*/
}


// Function: Assert_77 @ 0x2005c (0x12c bytes)
// Index: 838/906

void __fastcall Assert_77(__int64 n2)
{
  unsigned int n12; // ebx
  char *v2; // rax
  __int16 n23; // [rsp+40h] [rbp+8h] BYREF
  __int16 n13; // [rsp+42h] [rbp+Ah]

  if ( (_WORD)n2 ) /*0x20070*/
  {
    if ( (unsigned __int16)n2 <= 2u ) /*0x20079*/
    {
      Assert_24(n24); /*0x2015a*/
    }
    else
    {
      if ( (unsigned __int16)n2 == 3 ) /*0x20082*/
      {
        Assert_24(n24); /*0x20138*/
        ((void (*)(void))qword_35418[42])(); /*0x20144*/
        RstHelper_f5fc(1); /*0x2014d*/
        return; /*0x20152*/
      }
      if ( (unsigned __int16)n2 == 4 ) /*0x2008b*/
      {
        LOBYTE(n2) = n24; /*0x20125*/
        sub_B014(n2); /*0x2012b*/
      }
      else
      {
        if ( (unsigned __int16)n2 != 7 ) /*0x20094*/
        {
          if ( (unsigned __int16)n2 == 10 ) /*0x2009d*/
            RstHelper_faa4(10); /*0x200a3*/
          return; /*0x200a8*/
        }
        n12 = Assert_19(n24); /*0x200b8*/
        if ( n12 ) /*0x200bc*/
        {
          do /*0x20114*/
          {
            v2 = (char *)sub_22EA4(n12); /*0x200cc*/
            sub_872C(StartOfBuffer, 0x96u, v2); /*0x200e0*/
            ConsolePrintBoxed(23, &n23, &unk_2442C, StartOfBuffer, &unk_2442C, 0); /*0x20102*/
          }
          while ( n23 != 23 && n13 != 13 ); /*0x20114*/
        }
      }
    }
    ((void (*)(void))qword_35418[42])(); /*0x20166*/
    RstHelper_f84c(n5_0); /*0x20173*/
  }
}


// Function: RstHelper_0188 @ 0x20188 (0x15b bytes)
// Index: 839/906

bool RstHelper_0188()
{
  unsigned __int8 n24; // si
  unsigned __int64 j; // rdi
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  EFI_STRING_ID StringId_1; // ax
  const CHAR8 *Language_1; // r8
  unsigned __int64 v6; // rbx
  __int64 i[3]; // [rsp+20h] [rbp-F8h] BYREF
  unsigned __int64 v9; // [rsp+38h] [rbp-E0h]
  char v10; // [rsp+ACh] [rbp-6Ch]

  dword_57F2F = 0; /*0x2019f*/
  n24 = 0; /*0x201a6*/
  for ( j = sub_B120(); j; j >>= 1 ) /*0x201b4*/
  {
    if ( (j & 1) != 0 && !(unsigned int)RstHelper_be04(n0x18, n24, 1) ) /*0x201d7*/
    {
      RstHelper_ce6c(n24, (__int64)i); /*0x201ed*/
      RstHelper_dd6c(n24); /*0x201f9*/
      StringId = HiiRstMapRaidLevelToStrId(n24); /*0x20203*/
      HiiGetString(HiiHandle, StringId, Language); /*0x20215*/
      RstHelper_dee0(n24); /*0x2021d*/
      StringId_1 = HiiRstMapRaidLevelToStrId2(n24); /*0x20227*/
      HiiGetString(HiiHandle, StringId_1, Language_1); /*0x20239*/
      dword_57F2F |= 1 << n24; /*0x2024e*/
      v6 = sub_D764(n0x18); /*0x20260*/
      *((_BYTE *)&i__5 + n24 + 285) = sub_D600(n0x18) && sub_D6CC(n0x18) != v10 || v9 > v6 && 100 * (v9 - v6) / v9 > 0xA; /*0x202b2*/
    }
    ++n24; /*0x202ba*/
  }
  return RstHelper_e888(); /*0x202da*/
}


// Function: HiiRstGetStringHelper @ 0x202e4 (0x54 bytes)
// Index: 840/906

EFI_STRING __fastcall HiiRstGetStringHelper(unsigned __int16 n19, __int64 n24)
{
  int n19_1; // ebx
  EFI_STRING result; // rax

  n19_1 = n19; /*0x202ea*/
  RstHelper_be04(n0x18, n24, 0); /*0x202f6*/
  result = (EFI_STRING)((__int64 (*)(void))qword_35418[42])(); /*0x20302*/
  if ( n19_1 == 19 ) /*0x20310*/
    return RstHelper_f5fc(1); /*0x20320*/
  if ( n19_1 != 20 ) /*0x20316*/
  {
    if ( n19_1 != 26 ) /*0x2031c*/
      return result; /*0x2031c*/
    return RstHelper_f5fc(1); /*0x2031c*/
  }
  return RstHelper_f84c(n5_0); /*0x20325*/
}


// Function: Assert_53 @ 0x20338 (0xaa bytes)
// Index: 841/906

CHAR8 *__fastcall Assert_53(__int64 n24, unsigned __int8 a2)
{
  unsigned __int8 n24_1; // si
  EFI_STRING_ID StringId; // bx
  int v5; // eax
  unsigned __int16 n501; // dx
  _BYTE i[40]; // [rsp+20h] [rbp-28h] BYREF

  n24_1 = n24; /*0x2034a*/
  if ( RstDebugEnabled() && a2 ) /*0x2035a*/
    DebugAssert("HiiStandalone.cpp", 0xA6Au, "a_nJdPplMpbId < sizeof( arrJdPplMpbStat ) / sizeof( EFI_STRING_ID )"); /*0x2036f*/
  StringId = word_27BB0[a2]; /*0x20384*/
  i[0] = 0; /*0x20391*/
  v5 = Assert_29(n24_1, a2, i, 0x11u); /*0x20396*/
  if ( v5 ) /*0x203a0*/
  {
    if ( v5 == 1 ) /*0x203a5*/
      n501 = 501; /*0x203ae*/
    else
      n501 = 502; /*0x203a7*/
  }
  else
  {
    if ( i[0] ) /*0x203ba*/
      return RstHelper_dca0(StringId, i); /*0x203c6*/
    n501 = 500; /*0x203c8*/
  }
  return (CHAR8 *)RstHelper_dd38(StringId, n501); /*0x203dc*/
}


// Function: RstHelper_03e4 @ 0x203e4 (0x306 bytes)
// Index: 842/906

char __fastcall RstHelper_03e4(__int64 n24)
{
  unsigned __int16 n24_1; // di
  int n15; // eax
  unsigned __int8 v3; // bl
  const CHAR8 *Language; // rax
  const CHAR8 *Language_1; // rax
  unsigned __int16 v6; // ax
  _BYTE i[112]; // [rsp+30h] [rbp-188h] BYREF
  _BYTE v9[32]; // [rsp+A0h] [rbp-118h] BYREF
  unsigned __int64 i_1[8]; // [rsp+C0h] [rbp-F8h] BYREF
  int v11; // [rsp+100h] [rbp-B8h]
  _BYTE v12[64]; // [rsp+110h] [rbp-A8h] BYREF
  int n55; // [rsp+150h] [rbp-68h]
  int n5; // [rsp+154h] [rbp-64h]
  int v15; // [rsp+158h] [rbp-60h]
  int v16; // [rsp+15Ch] [rbp-5Ch]
  unsigned int v17; // [rsp+16Ch] [rbp-4Ch]
  int v18; // [rsp+170h] [rbp-48h]
  int v19; // [rsp+174h] [rbp-44h]
  int v20; // [rsp+178h] [rbp-40h]
  int v21; // [rsp+17Ch] [rbp-3Ch]
  int v22; // [rsp+180h] [rbp-38h]
  int v23; // [rsp+184h] [rbp-34h]
  unsigned __int16 v24; // [rsp+188h] [rbp-30h]
  int v25; // [rsp+18Ch] [rbp-2Ch]
  __int64 v26; // [rsp+198h] [rbp-20h]
  __int64 v27; // [rsp+1A0h] [rbp-18h]
  __int64 v28; // [rsp+1A8h] [rbp-10h]

  n24_1 = n24; /*0x20402*/
  n15 = RstHelper_ce6c(n24, (__int64)i_1); /*0x20405*/
  if ( n15 != 15 && v11 != -1 ) /*0x2041b*/
  {
    if ( n24_1 != 255 ) /*0x20430*/
      sub_BBD4((__int64)v9, n24_1, "en"); /*0x20440*/
    ::n24 = n24_1; /*0x20457*/
    dword_57F27 = v16; /*0x2045e*/
    MemZero(i, 0, 100); /*0x20464*/
    v3 = 0; /*0x2047e*/
    RstFormatDiskSize((__int64)i, i_1[3], v17, 1, 0); /*0x20487*/
    RstHelper_dca0(0x1D6u, i); /*0x20496*/
    RstHelper_dca0(0x1D3u, v12); /*0x204a8*/
    RstHelper_dca0(0x1D0u, v9); /*0x204ba*/
    Language = (const CHAR8 *)RstHelper_bd1c(n24_1, "en"); /*0x204c5*/
    HiiGetString(HiiHandle, 0x1CDu, Language); /*0x204dc*/
    Language_1 = (const CHAR8 *)sub_BB98(n24_1, "en"); /*0x204e7*/
    HiiGetString(HiiHandle, 0x1BCu, Language_1); /*0x204fe*/
    v6 = sub_1D508(n55); /*0x2050a*/
    RstHelper_dd38(0x1D9u, v6); /*0x20517*/
    RstHelper_8da8((__int64)i, 0x63u, "%ld", v17); /*0x20536*/
    RstHelper_dca0(0x1DCu, i); /*0x20545*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v23); /*0x20564*/
    RstHelper_dca0(0x1DFu, i); /*0x20573*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v22); /*0x2058b*/
    RstHelper_dca0(0x1E5u, i); /*0x2059a*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v24); /*0x205b3*/
    RstHelper_dca0(0x1EBu, i); /*0x205c2*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v21); /*0x205da*/
    RstHelper_dca0(0x1E8u, i); /*0x205e9*/
    RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v18, v19, v20); /*0x2061b*/
    RstHelper_dca0(0x1EEu, i); /*0x2062a*/
    RstHelper_8da8((__int64)i, 0x63u, "%d", v25); /*0x20642*/
    RstHelper_dca0(0x1E2u, i); /*0x20651*/
    RstHelper_8da8((__int64)i, 0x63u, "%02x:%02x.%x", v26, v27, v28); /*0x20687*/
    RstHelper_dca0(0x1F1u, i); /*0x20696*/
    if ( n5 == 5 && !v15 && RstNoop() ) /*0x206ae*/
    {
      do /*0x206ca*/
        Assert_53(n24_1, v3++); /*0x206bc*/
      while ( v3 < (unsigned __int8)RstNoop() ); /*0x206ca*/
    }
    LOBYTE(n15) = RstHelper_e888(); /*0x206cc*/
  }
  return n15; /*0x206e5*/
}


// Function: RstHelper_06ec @ 0x206ec (0x1eb bytes)
// Index: 843/906

bool RstHelper_06ec()
{
  unsigned __int16 v0; // ax
  int n8; // r11d
  __int16 n2; // ax
  unsigned __int16 n5; // ax
  __int64 i; // rax
  __int64 n5_1; // rdx
  int v6; // eax
  unsigned __int64 i_1; // rdx
  int v8; // eax
  unsigned __int64 n0x90; // rcx
  unsigned __int64 v10; // rbx
  unsigned __int8 n42; // di
  EFI_STRING_ID StringId; // ax
  const CHAR8 *Language; // r8
  unsigned int v14; // edi
  unsigned __int8 n0x90_3; // bl
  unsigned __int64 n0x90_1; // rcx
  char n0x90_2; // dl
  EFI_STRING_ID StringId_1; // si
  CHAR8 *Language_1; // rax

  qword_57E57 = sub_B120(); /*0x2070b*/
  word_57E53 = sub_D2C0(n5_0); /*0x2071d*/
  v0 = sub_D34C(n5_0); /*0x20724*/
  switch ( v0 ) /*0x2073b*/
  {
    case 1u: /*0x2073b*/
      n2 = 1; /*0x20773*/
      break;
    case 2u: /*0x2073b*/
      n2 = 2; /*0x20767*/
      n2_0 = 2; /*0x2076a*/
      goto LABEL_12; /*0x20771*/
    case 4u: /*0x2073b*/
      n2 = 4; /*0x20762*/
      break;
    default:
      n8 = v0 - 8; /*0x20747*/
      n2 = 8; /*0x2074a*/
      if ( n8 ) /*0x2074d*/
      {
        if ( n8 == 8 ) /*0x20752*/
          n2 = 16; /*0x2075b*/
        else
          n2 = -1; /*0x20754*/
      }
      break;
  }
  n2_0 = n2; /*0x20776*/
LABEL_12:
  dword_57F03 = 0; /*0x2077d*/
  byte_57F34 = 0; /*0x20787*/
  n5 = HiiRstStripeSizeToShift(n2); /*0x2078e*/
  i = Assert_115(n5_0, n5, 0, 0); /*0x207a2*/
  i_0 = i; /*0x207a7*/
  if ( n2 == 2 ) /*0x207b4*/
    i_0 = ~dword_57F1F & (unsigned int)i; /*0x207c1*/
  LOBYTE(n5_1) = -1; /*0x207ce*/
  v6 = Assert_23(n5_0, n5_1); /*0x207d0*/
  n4 = 4; /*0x207d7*/
  dword_57F35 = v6; /*0x207de*/
  n0x90 = -1; /*0x207e4*/
  HiiRstCalcBlockSize(0, i_1); /*0x207eb*/
  MemZero(i__0, 1, 144); /*0x20800*/
  v8 = RstHelper_eca0(1, 1); /*0x2080b*/
  v10 = qword_57E57; /*0x20810*/
  byte_57F08 = v8 == 0; /*0x20819*/
  n42 = 0; /*0x20820*/
  if ( qword_57E57 ) /*0x20826*/
  {
    do /*0x20859*/
    {
      if ( (v10 & 1) != 0 ) /*0x2082b*/
      {
        LOBYTE(n0x90) = n42; /*0x2082d*/
        RstHelper_ddc8(n0x90); /*0x20830*/
        StringId = sub_1E0A4(n42); /*0x2083c*/
        HiiGetString(HiiHandle, StringId, Language); /*0x2084e*/
      }
      ++n42; /*0x20853*/
      v10 >>= 1; /*0x20856*/
    }
    while ( v10 ); /*0x20859*/
  }
  v14 = dword_57F35; /*0x2085b*/
  n0x90_3 = 0; /*0x20861*/
  if ( dword_57F35 ) /*0x20865*/
  {
    do /*0x208bc*/
    {
      if ( (v14 & 1) != 0 ) /*0x2086a*/
      {
        n0x90_1 = (unsigned __int8)n0x90; /*0x2086c*/
        n0x90_2 = n0x90; /*0x20879*/
        if ( n0x90 == -1 ) /*0x2087b*/
          n0x90_2 = n0x90_3; /*0x2087b*/
        n0x90 = n0x90_2; /*0x2087e*/
        if ( n0x90_3 >= 0x30u ) /*0x20887*/
        {
          StringId_1 = 0; /*0x20899*/
        }
        else
        {
          n0x90_1 = (unsigned __int64)n0x90_1; /*0x20889*/
          StringId_1 = n0x90_1[n0x90_3]; /*0x20893*/
        }
        LOBYTE(n0x90_1) = n0x90_3; /*0x2089b*/
        Language_1 = RstHelper_ddc8(n0x90_1); /*0x2089d*/
        HiiGetString(HiiHandle, StringId_1, Language_1); /*0x208b2*/
      }
      ++n0x90_3; /*0x208b7*/
      v14 >>= 1; /*0x208ba*/
    }
    while ( v14 ); /*0x208bc*/
  }
  return RstHelper_e888(); /*0x208cd*/
}


// Function: RstHelper_08d8 @ 0x208d8 (0x1e3 bytes)
// Index: 844/906

__int64 __fastcall RstHelper_08d8(__int64 a1, CHAR8 *i, __int64 *a3, __int64 a4)
{
  CHAR8 *i_1; // rbx
  _WORD *v7; // rdi
  unsigned __int64 v8; // r12
  char v9; // r12
  unsigned __int64 v10; // rax
  CHAR16 *v11; // rax
  CHAR16 *v12; // rdi
  unsigned __int64 n0xF4240; // rax
  unsigned __int64 v15; // rax
  unsigned __int64 v16; // rax
  const CHAR16 *v17; // rax
  __int64 v18; // rdi
  unsigned __int64 v19; // rax

  i_1 = i; /*0x208f7*/
  if ( !a3 || !a4 ) /*0x20906*/
    return 0x8000000000000002uLL; /*0x20906*/
  if ( !i ) /*0x20916*/
  {
    v7 = (_WORD *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", qword_35418[78]); /*0x20939*/
    v8 = 2 * StrLenSafe_w(v7) + 66; /*0x20941*/
    i_1 = (CHAR8 *)MemAllocPages(v8); /*0x2094e*/
    if ( RstDebugEnabled() && !i_1 ) /*0x2095d*/
      DebugAssert("HiiStandalone.cpp", 0xB90u, "ConfigRequest != 0"); /*0x20972*/
    MemZero(i_1, 0, v8); /*0x2097f*/
    HiiCfgArrayGet(i_1, v8, (unsigned __int8 *)L"%s&OFFSET=0&WIDTH=%016LX", v7, 310); /*0x2099d*/
    *a3 = (__int64)i_1; /*0x209a5*/
    v9 = 1; /*0x209a8*/
    v10 = StrLenSafe_w(v7); /*0x209ab*/
    MemZeroThenFree(v7, 2 * v10); /*0x209b7*/
    goto LABEL_14; /*0x209bc*/
  }
  *a3 = (__int64)i; /*0x209c1*/
  v9 = 0; /*0x209d2*/
  v11 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x209d5*/
  v12 = v11; /*0x209da*/
  if ( !v11 ) /*0x209e0*/
    return 0x800000000000000EuLL; /*0x209ec*/
  n0xF4240 = StrLenSafe_w(v11); /*0x209f4*/
  if ( StrCpyOrCat((const CHAR16 *)i_1, v12, n0xF4240) ) /*0x20a02*/
  {
    v15 = StrLenSafe_w(v12); /*0x20a0f*/
    MemZeroThenFree(v12, 2 * v15); /*0x20a1b*/
    return 0x800000000000000EuLL; /*0x20a20*/
  }
  v16 = StrLenSafe_w(v12); /*0x20a22*/
  MemZeroThenFree(v12, 2 * v16); /*0x20a2e*/
  v17 = Assert_44((const CHAR16 *)i_1 + 8, L"&GUID"); /*0x20a3e*/
  *a3 = (__int64)v17; /*0x20a43*/
  if ( v17 ) /*0x20a49*/
    return 0x8000000000000002uLL; /*0x20a96*/
  *a3 = (__int64)i_1; /*0x20a4b*/
LABEL_14:
  v18 = (*(__int64 (__fastcall **)(__int64, CHAR8 *, __int64 *, __int64, __int64, __int64 *))(qword_57E18 + 24))( /*0x20a4e*/
          qword_57E18,
          i_1,
          &i__5,
          310,
          a4,
          a3);
  if ( v9 ) /*0x20a7b*/
  {
    v19 = StrLenSafe_w(i_1); /*0x20a80*/
    MemZeroThenFree(i_1, 2 * v19); /*0x20a8c*/
  }
  return v18; /*0x20ab4*/
}


// Function: RstHelper_0abc @ 0x20abc (0x10b bytes)
// Index: 845/906

__int64 __fastcall RstHelper_0abc(__int64 a1, const CHAR16 *i, const CHAR16 **a3)
{
  CHAR16 *v5; // rax
  CHAR16 *v6; // rdi
  __int64 result; // rax
  unsigned __int64 n0xF4240; // rax
  unsigned __int64 v9; // rax
  unsigned __int64 v10; // rax
  _BYTE v11[320]; // [rsp+30h] [rbp-148h] BYREF
  __int64 n310; // [rsp+188h] [rbp+10h] BYREF

  if ( !i || !a3 ) /*0x20ae7*/
    return 0x8000000000000002uLL; /*0x20ba4*/
  v5 = (CHAR16 *)HiiConfigRoutingExtract((__int64)&qword_24318, L"RstHiiConfig", ImageHandle); /*0x20b02*/
  v6 = v5; /*0x20b07*/
  if ( !v5 ) /*0x20b0d*/
    return 0x800000000000000EuLL; /*0x20b19*/
  n0xF4240 = StrLenSafe_w(v5); /*0x20b21*/
  if ( StrCpyOrCat(i, v6, n0xF4240) ) /*0x20b2f*/
  {
    v9 = StrLenSafe_w(v6); /*0x20b3c*/
    MemZeroThenFree(v6, 2 * v9); /*0x20b48*/
    return 0x800000000000000EuLL; /*0x20b4d*/
  }
  v10 = StrLenSafe_w(v6); /*0x20b4f*/
  MemZeroThenFree(v6, 2 * v10); /*0x20b5b*/
  n310 = 310; /*0x20b7a*/
  result = (*(__int64 (__fastcall **)(__int64, const CHAR16 *, _BYTE *, __int64 *, const CHAR16 **))(qword_57E18 + 32))( /*0x20b8b*/
             qword_57E18,
             i,
             v11,
             &n310,
             a3);
  for ( *a3 = i; **a3; ++*a3 ) /*0x20b91*/
    ; /*0x20b96*/
  return result; /*0x20bc2*/
}


// Function: HiiRstConfigToBlock @ 0x20bc8 (0x54c bytes)
// Index: 846/906

unsigned __int64 __fastcall HiiRstConfigToBlock(
        __int64 a1,
        unsigned __int64 n3,
        unsigned __int16 n24,
        __int64 a4,
        __int64 a5,
        _QWORD *a6)
{
  __int64 n24_1; // rcx
  unsigned int n0x17; // edx
  __int64 n24_2; // rdx
  __int16 n7; // bx
  unsigned int n5_1; // ecx
  unsigned int v14; // edx
  unsigned int v15; // edx
  char v16; // dl
  int n6; // eax
  unsigned __int16 n5; // ax
  __int64 i_1; // rax
  int v20; // ecx
  unsigned int n7_1; // eax
  __int64 n127; // rdx
  __int64 n18; // rcx
  __int64 i[8]; // [rsp+20h] [rbp-1B8h] BYREF
  unsigned __int8 v25; // [rsp+60h] [rbp-178h]
  char i_2[176]; // [rsp+110h] [rbp-C8h] BYREF

  if ( a5 && a6 ) /*0x20c0b*/
  {
    *a6 = 0; /*0x20c11*/
    if ( n3 == 3 ) /*0x20c28*/
    {
      if ( (n24 & 0x8000) != 0 && (n24 & 7) == 1 && (n24 & 0xF8) == 8 && (n24 & 0x7F00) == 0 ) /*0x20c4d*/
      {
        RstHelper_f5fc(0); /*0x20c51*/
        RstHelper_e888(); /*0x20c56*/
      }
      if ( (n24 & 0x8000) =... [8535 chars total]


// Function: RstHelper_1114 @ 0x21114 (0x1f3 bytes)
// Index: 847/906

__int64 __fastcall RstHelper_1114(__int64 a1)
{
  __int64 result; // rax
  void *HiiHandle; // rax
  __int64 v4; // [rsp+48h] [rbp+10h] BYREF

  result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_279A0, 0, &v4); /*0x21136*/
  if ( result >= 0 ) /*0x21141*/
  {
    qword_58018 = v4; /*0x21158*/
    result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27960, 0, &v4); /*0x21168*/
    if ( result >= 0 ) /*0x21171*/
    {
      qword_58020 = v4; /*0x21188*/
      result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27990, 0, &v4); /*0x21198*/
      if ( result >= 0 ) /*0x211a1*/
      {
        qword_57E10 = v4; /*0x211b8*/
        result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_58070 + 320))(&unk_27970, 0, &v4); /*0x211c8*/
        if ( result >= 0 ) /*0x211d1*/
        {
          qword_57E18 = v4; /*0x211ea*/
          LocateHandleBuffer(qword_35418[78], SystemTable); /*0x211f8*/
          p_sub_20ABC = (__int64)RstHelper_0abc; /*0x2120b*/
          pHiiRstConfigToBlock = (__int64)HiiRstConfigToBlock; /*0x21220*/
          p_sub_208D8 = (__int64)RstHelper_08d8; /*0x21257*/
          (*(void (__fastcall **)(_QWORD *, void *, __int64, void *, __int64 *, _QWORD))(qword_58070 + 328))( /*0x2125e*/
            qword_35418 + 78,
            &unk_27730,
            a1,
            &unk_27980,
            &p_sub_208D8,
            0);
          RstHelper_f498((__int64)&i__5, 0); /*0x2126d*/
          HiiHandle = (void *)HiiPackageListBuild((__int64)&qword_24318, qword_35418[78], &unk_27BC0, &unk_2B230, 0); /*0x2129a*/
          HiiHandle = HiiHandle; /*0x2129f*/
          if ( HiiHandle /*0x212e9*/
            && (unsigned __int16)HiiGetString(HiiHandle, 5u, L"Intel(R) VROC with VMD Technology 6.2.0.1034")
            && (unsigned __int16)HiiGetString(HiiHandle, 2u, L"Intel(R) Virtual RAID on CPU") )
          {
            RstHelper_f5fc(1); /*0x212f5*/
            return 0; /*0x212fa*/
          }
          else
          {
            return 0x8000000000000009uLL; /*0x212ab*/
          }
        }
      }
    }
  }
  return result; /*0x21301*/
}