int __usercall sub_FFD86E37@<eax>(int a1@<edx>, int a2@<ecx>, int a3, int a4, int a5, int a6, int a7, ...)
{
  int v7; // ebx
  unsigned int n8_3; // esi
  unsigned int v9; // edi
  unsigned __int8 *v10; // ebx
  unsigned __int8 n8; // al
  int n8_4; // ebp
  int v13; // eax
  unsigned int n8_1; // ecx
  _DWORD *v15; // edx
  int v16; // eax
  unsigned int v17; // edi
  unsigned __int8 *v18; // ebp
  unsigned __int8 n8_2; // al
  int n8_5; // ebx
  int v21; // eax
  _DWORD *v22; // ecx
  int result; // eax
  unsigned int retaddr; // [esp+5Ch] [ebp+0h]
  int v27; // [esp+74h] [ebp+18h] BYREF
  va_list va; // [esp+74h] [ebp+18h]
  int v29; // [esp+78h] [ebp+1Ch]
  int v30; // [esp+7Ch] [ebp+20h]
  int v31; // [esp+80h] [ebp+24h]
  int v32; // [esp+84h] [ebp+28h]
  int v33; // [esp+88h] [ebp+2Ch]
  int v34; // [esp+8Ch] [ebp+30h]
  int v35; // [esp+90h] [ebp+34h]
  va_list va1; // [esp+94h] [ebp+38h] BYREF

  va_start(va1, a7);
  va_start(va, a7);
  v27 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v29 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v30 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v31 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v32 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v33 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v34 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v35 = va_arg(va1, _DWORD); /*0xffd86e37*/
  v7 = a2; /*0xffd86e3e*/
  sub_FFD8D4C8(va1, retaddr); /*0xffd86e4f*/
  sub_FFD8D4C8((int *)va, retaddr); /*0xffd86e5b*/
  sub_FFD8BF54(); /*0xffd86e60*/
  n8_3 = 0; /*0xffd86e65*/
  v9 = 0; /*0xffd86e67*/
  if ( (unsigned __int8)sub_FFD8C051() ) /*0xffd86e69*/
  {
    v10 = (unsigned __int8 *)(v7 + 264); /*0xffd86e72*/
    do /*0xffd86ebd*/
    {
      n8 = *v10; /*0xffd86e78*/
      if ( *v10 != 8 ) /*0xffd86e7c*/
      {
        n8_4 = n8; /*0xffd86e7e*/
        if ( n8 >= 8u ) /*0xffd86e84*/
        {
          v13 = GetReportStatusCodePpi(); /*0xffd86e86*/
          if ( v13 ) /*0xffd86e8d*/
            (*(void (**)(void))(v13 + 4))(); /*0xffd86e9e*/
        }
        *((int *)va + n8_4) |= 1 << v9; /*0xffd86eab*/
      }
      ++v9; /*0xffd86eaf*/
      v10 += 16; /*0xffd86eb0*/
    }
    while ( v9 < (unsigned __int8)sub_FFD8C051() ); /*0xffd86ebd*/
    v7 = a2; /*0xffd86ebf*/
  }
  n8_1 = 0; /*0xffd86ec7*/
  v15 = (_DWORD *)(a1 + 208); /*0xffd86ec9*/
  do /*0xffd86edc*/
  {
    v16 = *((int *)va + n8_1++); /*0xffd86ecf*/
    *v15++ = v16; /*0xffd86ed4*/
  }
  while ( n8_1 < 8 ); /*0xffd86edc*/
  v17 = 0; /*0xffd86ede*/
  v18 = (unsigned __int8 *)(v7 + 8); /*0xffd86ee0*/
  while ( (unsigned int)(sub_FFD8BE68() - 1) <= 1 && v17 < retaddr ) /*0xffd86efb*/
  {
    n8_2 = *v18; /*0xffd86efd*/
    if ( *v18 != 8 ) /*0xffd86f02*/
    {
      n8_5 = n8_2; /*0xffd86f04*/
      if ( n8_2 >= 8u ) /*0xffd86f0a*/
      {
        v21 = GetReportStatusCodePpi(); /*0xffd86f0c*/
        if ( v21 ) /*0xffd86f13*/
          (*(void (**)(void))(v21 + 4))(); /*0xffd86f24*/
      }
      va1[n8_5] = (void *)((unsigned int)va1[n8_5] | (1 << v17)); /*0xffd86f31*/
    }
    ++v17; /*0xffd86f35*/
    v18 += 16; /*0xffd86f36*/
  }
  v22 = (_DWORD *)(a1 + 176); /*0xffd86f3f*/
  do /*0xffd86f52*/
  {
    result = (int)va1[n8_3++]; /*0xffd86f45*/
    *v22++ = result; /*0xffd86f4a*/
  }
  while ( n8_3 < 8 ); /*0xffd86f52*/
  return result; /*0xffd86f54*/
}
