
int accessPayload(BtCursor *pCur,u32 offset,u32 amt,uchar *pBuf,int eOp)

{
  BtShared *pBt;
  MemPage *pMVar1;
  u8 *puVar2;
  Pager *pPVar3;
  uint *puVar4;
  Pgno PVar5;
  BtCursor *pCur_00;
  uint uVar6;
  int iVar7;
  int iVar8;
  Pgno *pPVar9;
  size_t extraout_ECX;
  DbPage *pPg;
  uint uVar10;
  uint uVar11;
  size_t sVar12;
  uint uVar13;
  int unaff_EDI;
  int in_GS_OFFSET;
  bool bVar14;
  undefined8 uVar15;
  u64 in_stack_ffffffa4;
  size_t local_50;
  size_t local_4c;
  BtCursor *local_40;
  Pgno nextPage;
  DbPage *pDbPage;
  int local_20;
  
  uVar15 = __x86_get_pc_thunk_di();
  uVar13 = (uint)((ulonglong)uVar15 >> 0x20);
  pCur_00 = (BtCursor *)uVar15;
  pBt = pCur_00->pBt;
  pMVar1 = pCur_00->pPage;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  getCellInfo(pCur_00);
  puVar2 = (pCur_00->info).pPayload;
  uVar10 = (uint)(pCur_00->info).nLocal;
  if (pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)) {
    iVar8 = sqlite3CorruptError(0x108be);
    goto LAB_000815e0;
  }
  local_50 = extraout_ECX;
  if (uVar13 < uVar10) {
    if (uVar10 < uVar13 + extraout_ECX) {
      local_4c = (uVar13 - uVar10) + extraout_ECX;
      bVar14 = local_4c != 0;
      local_50 = uVar10 - uVar13;
      if (offset != 0) goto LAB_00081592;
LAB_00081633:
      memcpy(pCur,puVar2 + uVar13,local_50);
    }
    else {
      bVar14 = false;
      local_4c = 0;
      if (offset == 0) goto LAB_00081633;
LAB_00081592:
      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);
      if (iVar8 != 0) goto LAB_000815e0;
      memcpy(puVar2 + uVar13,pCur,local_50);
    }
    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));
    uVar13 = 0;
    local_50 = local_4c;
  }
  else {
    uVar13 = uVar13 - uVar10;
    bVar14 = extraout_ECX != 0;
    local_40 = pCur;
  }
  iVar8 = 0;
  if (!bVar14) goto LAB_000815e0;
  uVar10 = pBt->usableSize - 4;
  uVar11 = (uint)(pCur_00->info).nLocal;
  pPVar9 = pCur_00->aOverflow;
  uVar6 = *(uint *)(puVar2 + uVar11);
  nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;
  if ((pCur_00->curFlags & 4) == 0) {
    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;
    if (pPVar9 == (Pgno *)0x0) {
LAB_0008179f:
      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);
      if (pPVar9 == (Pgno *)0x0) {
        iVar8 = 7;
        goto LAB_000815e0;
      }
      pCur_00->aOverflow = pPVar9;
    }
    else {
      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);
      iVar8 = uVar6 * 4;
      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {
        pPVar9 = pCur_00->aOverflow;
        goto LAB_0008179f;
      }
      pPVar9 = pCur_00->aOverflow;
    }
    memset(pPVar9,0,uVar6 << 2);
    pCur_00->curFlags = pCur_00->curFlags | 4;
  }
  else {
    uVar6 = uVar13 / uVar10;
    uVar11 = uVar13 % uVar10;
    PVar5 = pPVar9[uVar6];
    if (pPVar9[uVar6] != 0) goto LAB_000814a2;
  }
  if (nextPage != 0) {
    pPVar9 = pCur_00->aOverflow;
    uVar6 = 0;
    uVar11 = uVar13;
    PVar5 = nextPage;
LAB_000814a2:
    nextPage = PVar5;
    PVar5 = nextPage;
LAB_000814d6:
    nextPage = PVar5;
    uVar13 = uVar6 + 1;
    pPVar9[uVar6] = nextPage;
    uVar6 = uVar13;
    if (uVar10 <= uVar11) goto LAB_000814b8;
    sVar12 = 0;
    if (uVar10 < local_50 + uVar11) {
      sVar12 = (uVar11 - uVar10) + local_50;
      local_50 = uVar10 - uVar11;
    }
    pPVar3 = pBt->pPager;
    if (offset == 0) {
      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);
      pPg = pDbPage;
      if (iVar8 == 0) {
                    /* WARNING: Load size is inaccurate */
        uVar13 = *pDbPage->pData;
        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |
                   uVar13 << 0x18;
        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);
LAB_000816e0:
        uVar11 = 0;
        sqlite3PagerUnrefNotNull(pPg);
      }
    }
    else {
      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);
      if (iVar8 == 0) {
        puVar4 = (uint *)pDbPage->pData;
        uVar13 = *puVar4;
        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |
                   uVar13 << 0x18;
        iVar8 = sqlite3PagerWrite(pDbPage);
        if (iVar8 == 0) {
          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);
        }
        uVar11 = 0;
        pPg = pDbPage;
        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;
      }
    }
    if (sVar12 != 0) {
      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));
      local_50 = sVar12;
      goto joined_r0x0008171a;
    }
    goto LAB_000815e0;
  }
  iVar8 = 0;
  if (bVar14) {
LAB_00081780:
    iVar8 = sqlite3CorruptError(0x1094f);
  }
LAB_000815e0:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return iVar8;
LAB_000814b8:
  uVar11 = uVar11 - uVar10;
  pPVar9 = pCur_00->aOverflow;
  PVar5 = pPVar9[uVar13];
  if (pPVar9[uVar13] == 0) {
    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);
joined_r0x0008171a:
    if (iVar8 != 0) goto LAB_000815e0;
    if (nextPage != 0) {
      pPVar9 = pCur_00->aOverflow;
      PVar5 = nextPage;
      goto LAB_000814d6;
    }
    goto LAB_00081780;
  }
  goto LAB_000814d6;
}



int FUN_00081380(void *param_1,int param_2)

{
  int *piVar1;
  uint *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  void *__s;
  size_t extraout_ECX;
  uint uVar8;
  size_t sVar9;
  uint uVar10;
  uint uVar11;
  int unaff_EDI;
  int in_GS_OFFSET;
  bool bVar12;
  undefined8 uVar13;
  size_t local_50;
  size_t local_4c;
  void *local_40;
  uint local_28;
  int local_24;
  int local_20;
  
  uVar13 = FUN_000196fd();
  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);
  iVar3 = (int)uVar13;
  piVar1 = *(int **)(iVar3 + 0x14);
  iVar7 = *(int *)(iVar3 + 0x6c);
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  FUN_00023170();
  iVar5 = *(int *)(iVar3 + 0x24);
  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);
  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {
    iVar7 = FUN_00051360();
    goto LAB_000815e0;
  }
  local_50 = extraout_ECX;
  if (uVar10 < uVar8) {
    if (uVar8 < uVar10 + extraout_ECX) {
      local_4c = (uVar10 - uVar8) + extraout_ECX;
      bVar12 = local_4c != 0;
      local_50 = uVar8 - uVar10;
      if (param_2 != 0) goto LAB_00081592;
LAB_00081633:
      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);
    }
    else {
      bVar12 = false;
      local_4c = 0;
      if (param_2 == 0) goto LAB_00081633;
LAB_00081592:
      iVar7 = FUN_00079770();
      if (iVar7 != 0) goto LAB_000815e0;
      memcpy((void *)(uVar10 + iVar5),param_1,local_50);
    }
    local_40 = (void *)((int)param_1 + local_50);
    uVar10 = 0;
    local_50 = local_4c;
  }
  else {
    uVar10 = uVar10 - uVar8;
    bVar12 = extraout_ECX != 0;
    local_40 = param_1;
  }
  iVar7 = 0;
  if (bVar12) {
    uVar8 = piVar1[9] - 4;
    iVar7 = *(int *)(iVar3 + 0xc);
    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));
    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
    if ((*(byte *)(iVar3 + 1) & 4) == 0) {
      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;
      if ((iVar7 == 0) ||
         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,
         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {
        __s = (void *)FUN_00026820();
        if (__s == (void *)0x0) {
          iVar7 = 7;
          goto LAB_000815e0;
        }
        *(void **)(iVar3 + 0xc) = __s;
      }
      else {
        __s = *(void **)(iVar3 + 0xc);
      }
      memset(__s,0,uVar4 << 2);
      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;
    }
    else {
      uVar6 = uVar10 / uVar8;
      uVar11 = uVar10 % uVar8;
      uVar4 = *(uint *)(iVar7 + uVar6 * 4);
      if (uVar4 != 0) goto LAB_000814a2;
    }
    if (local_28 != 0) {
      iVar7 = *(int *)(iVar3 + 0xc);
      uVar6 = 0;
      uVar11 = uVar10;
      uVar4 = local_28;
LAB_000814a2:
      local_28 = uVar4;
      uVar10 = local_28;
LAB_000814d6:
      local_28 = uVar10;
      uVar6 = uVar6 + 1;
      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;
      if (uVar8 <= uVar11) goto LAB_000814b8;
      sVar9 = 0;
      if (uVar8 < local_50 + uVar11) {
        sVar9 = (uVar11 - uVar8) + local_50;
        local_50 = uVar8 - uVar11;
      }
      iVar7 = *piVar1;
      if (param_2 == 0) {
        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);
        if (iVar7 == 0) {
          uVar10 = **(uint **)(local_24 + 4);
          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |
                     uVar10 << 0x18;
          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);
LAB_000816e0:
          uVar11 = 0;
          FUN_0001b1a0();
        }
      }
      else {
        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);
        if (iVar7 == 0) {
          puVar2 = *(uint **)(local_24 + 4);
          uVar10 = *puVar2;
          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |
                     uVar10 << 0x18;
          iVar7 = FUN_00079770();
          if (iVar7 == 0) {
            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);
          }
          uVar11 = 0;
          if (local_24 != 0) goto LAB_000816e0;
        }
      }
      if (sVar9 != 0) {
        local_40 = (void *)((int)local_40 + local_50);
        local_50 = sVar9;
        goto joined_r0x0008171a;
      }
      goto LAB_000815e0;
    }
    iVar7 = 0;
    if (bVar12) {
LAB_00081780:
      iVar7 = FUN_00051360();
    }
  }
LAB_000815e0:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_000f4bf0();
  }
  return iVar7;
LAB_000814b8:
  uVar11 = uVar11 - uVar8;
  iVar7 = *(int *)(iVar3 + 0xc);
  uVar10 = *(uint *)(iVar7 + uVar6 * 4);
  if (uVar10 == 0) {
    iVar7 = FUN_000519a0(&local_28);
joined_r0x0008171a:
    if (iVar7 != 0) goto LAB_000815e0;
    if (local_28 != 0) {
      iVar7 = *(int *)(iVar3 + 0xc);
      uVar10 = local_28;
      goto LAB_000814d6;
    }
    goto LAB_00081780;
  }
  goto LAB_000814d6;
}


PUSH EBP
PUSH EDI
CALL 0x000196fd
ADD EDI,0xc7b4d
PUSH ESI
MOV ESI,EDX
PUSH EBX
SUB ESP,0x4c
MOV EBP,dword ptr [EAX + 0x14]
MOV EBX,dword ptr [EAX + 0x6c]
MOV dword ptr [ESP + 0x14],EAX
MOV dword ptr [ESP + 0x24],EDI
MOV EDI,dword ptr [ESP + 0x60]
MOV dword ptr [ESP + 0xc],ECX
MOV dword ptr [ESP + 0x1c],EDI
MOV EDI,dword ptr GS:[0x14]
MOV dword ptr [ESP + 0x3c],EDI
XOR EDI,EDI
MOV EDI,EAX
MOV dword ptr [ESP + 0x18],EBP
CALL 0x00023170
MOV EAX,EDI
MOV EDI,dword ptr [EDI + 0x24]
MOVZX EDX,word ptr [EAX + 0x2c]
MOV EAX,dword ptr [EBP + 0x24]
MOV ECX,EDI
SUB ECX,dword ptr [EBX + 0x38]
MOV dword ptr [ESP + 0x10],EAX
SUB EAX,EDX
CMP ECX,EAX
JA 0x00081600
CMP EDX,ESI
JA 0x00081568
MOV EBP,dword ptr [ESP + 0xc]
SUB ESI,EDX
TEST EBP,EBP
SETNZ byte ptr [ESP + 0x20]
XOR EBP,EBP
CMP byte ptr [ESP + 0x20],0x0
JZ 0x000815e0
MOV EAX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [EAX + 0x24]
LEA ECX,[EAX + -0x4]
MOV EAX,dword ptr [ESP + 0x14]
MOV dword ptr [ESP + 0x10],ECX
MOVZX EDX,word ptr [EAX + 0x2c]
MOV EBP,dword ptr [EAX + 0xc]
MOV EBX,dword ptr [EDI + EDX*0x1]
MOV EDI,EAX
BSWAP EBX
MOV dword ptr [ESP + 0x34],EBX
TEST byte ptr [EAX + 0x1],0x4
JNZ 0x00081650
MOV EAX,dword ptr [EAX + 0x28]
LEA EAX,[ECX + EAX*0x1 + -0x1]
SUB EAX,EDX
XOR EDX,EDX
DIV ECX
MOV EBX,EAX
TEST EBP,EBP
JZ 0x0008179f
SUB ESP,0xc
PUSH EBP
MOV EAX,dword ptr [ESP + 0x34]
CALL dword ptr [EAX + 0x2e4]
LEA EDX,[EBX*0x4 + 0x0]
ADD ESP,0x10
CMP EDX,EAX
JG 0x00081798
MOV EAX,dword ptr [EDI + 0xc]
SUB ESP,0x4
SHL EBX,0x2
PUSH EBX
PUSH 0x0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x00014280
MOV EAX,dword ptr [ESP + 0x24]
MOV EBX,dword ptr [ESP + 0x44]
ADD ESP,0x10
OR byte ptr [EAX + 0x1],0x4
TEST EBX,EBX
JZ 0x00081770
MOV EAX,dword ptr [ESP + 0x14]
MOV EBP,dword ptr [EAX + 0xc]
XOR EAX,EAX
LEA EDI,[EAX + 0x1]
LEA EAX,[ESP + 0x38]
MOV EDX,EBX
MOV dword ptr [ESP + 0x20],EAX
JMP 0x000814d6
MOV EAX,dword ptr [ESP + 0x14]
SUB ESI,EBX
MOV EBP,dword ptr [EAX + 0xc]
MOV EAX,dword ptr [EBP + EDI*0x4]
TEST EAX,EAX
JZ 0x00081700
MOV dword ptr [ESP + 0x34],EAX
MOV EDX,EAX
ADD EDI,0x1
MOV EBX,dword ptr [ESP + 0x10]
MOV dword ptr [EBP + EDI*0x4 + -0x4],EDX
CMP EBX,ESI
JBE 0x000814b8
MOV EBX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [ESP + 0x10]
XOR EBP,EBP
LEA EAX,[EBX + ESI*0x1]
CMP EAX,ECX
JBE 0x00081501
MOV EAX,ECX
MOV EBP,ESI
SUB EAX,ESI
SUB EBP,ECX
MOV dword ptr [ESP + 0xc],EAX
ADD EBP,EBX
MOV EAX,dword ptr [ESP + 0x18]
MOV EBX,dword ptr [ESP + 0x64]
MOV EAX,dword ptr [EAX]
MOV ECX,dword ptr [EAX + 0xc8]
TEST EBX,EBX
JNZ 0x00081678
PUSH 0x2
PUSH dword ptr [ESP + 0x24]
PUSH EDX
PUSH EAX
CALL ECX
MOV EDX,EAX
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00081730
TEST EBP,EBP
JZ 0x00081720
MOV ECX,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0xc],EBP
ADD dword ptr [ESP + 0x1c],ECX
TEST EDX,EDX
JNZ 0x00081720
MOV EDX,dword ptr [ESP + 0x34]
TEST EDX,EDX
JZ 0x00081780
MOV EAX,dword ptr [ESP + 0x14]
MOV EBP,dword ptr [EAX + 0xc]
JMP 0x000814d3
MOV ECX,dword ptr [ESP + 0xc]
LEA EAX,[ESI + ECX*0x1]
CMP EDX,EAX
JC 0x00081610
MOV EAX,dword ptr [ESP + 0x64]
MOV byte ptr [ESP + 0x20],0x0
ADD ESI,EDI
MOV dword ptr [ESP + 0x10],0x0
TEST EAX,EAX
JZ 0x00081633
MOV EAX,dword ptr [EBX + 0x48]
CALL 0x00079770
MOV EBP,EAX
TEST EAX,EAX
JNZ 0x000815e0
SUB ESP,0x4
PUSH dword ptr [ESP + 0x10]
PUSH dword ptr [ESP + 0x24]
PUSH ESI
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x000140d0
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x10]
MOV ESI,dword ptr [ESP + 0xc]
XOR EBP,EBP
ADD dword ptr [ESP + 0x1c],ESI
XOR ESI,ESI
CMP byte ptr [ESP + 0x20],0x0
MOV dword ptr [ESP + 0xc],EAX
JNZ 0x00081407
LEA ESI,[ESI]
NOP
MOV ESI,dword ptr [ESP + 0x3c]
XOR ESI,dword ptr GS:[0x14]
MOV EAX,EBP
JNZ 0x000817c9
ADD ESP,0x4c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,0x108be
CALL 0x00051360
MOV EBP,EAX
JMP 0x000815e0
MOV EAX,ESI
SUB EAX,EDX
ADD EAX,ECX
MOV dword ptr [ESP + 0x10],EAX
MOV EAX,dword ptr [ESP + 0x64]
SETNZ byte ptr [ESP + 0x20]
SUB EDX,ESI
ADD ESI,EDI
MOV dword ptr [ESP + 0xc],EDX
TEST EAX,EAX
JNZ 0x00081592
SUB ESP,0x4
PUSH dword ptr [ESP + 0x10]
PUSH ESI
PUSH dword ptr [ESP + 0x28]
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x000140d0
ADD ESP,0x10
JMP 0x000815b8
MOV EAX,ESI
XOR EDX,EDX
DIV dword ptr [ESP + 0x10]
MOV ECX,dword ptr [EBP + EAX*0x4]
TEST ECX,ECX
JZ 0x00081491
MOV dword ptr [ESP + 0x34],ECX
MOV ESI,EDX
MOV EBX,ECX
JMP 0x000814a2
PUSH 0x0
PUSH dword ptr [ESP + 0x24]
PUSH EDX
PUSH EAX
CALL ECX
MOV EDX,EAX
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00081530
MOV EAX,dword ptr [ESP + 0x38]
MOV EBX,dword ptr [EAX + 0x4]
MOV EDX,dword ptr [EBX]
BSWAP EDX
MOV dword ptr [ESP + 0x34],EDX
CALL 0x00079770
MOV EDX,EAX
TEST EAX,EAX
JNZ 0x000816cd
MOV dword ptr [ESP + 0x28],EDX
LEA EAX,[EBX + ESI*0x1 + 0x4]
SUB ESP,0x4
PUSH dword ptr [ESP + 0x10]
PUSH dword ptr [ESP + 0x24]
PUSH EAX
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x000140d0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x28]
MOV ECX,dword ptr [ESP + 0x38]
XOR ESI,ESI
TEST ECX,ECX
JZ 0x00081530
LEA ESI,[ESI]
NOP
MOV EAX,ECX
MOV dword ptr [ESP + 0x28],EDX
XOR ESI,ESI
CALL 0x0001b1a0
MOV EDX,dword ptr [ESP + 0x28]
JMP 0x00081530
SUB ESP,0xc
XOR ECX,ECX
LEA EAX,[ESP + 0x40]
PUSH EAX
MOV EAX,dword ptr [ESP + 0x28]
CALL 0x000519a0
ADD ESP,0x10
MOV EDX,EAX
TEST EDX,EDX
JZ 0x0008154c
MOV EBP,EDX
JMP 0x000815e0
MOV ECX,dword ptr [ESP + 0x38]
MOV dword ptr [ESP + 0x2c],EDX
SUB ESP,0x4
MOV EBX,dword ptr [ECX + 0x4]
MOV dword ptr [ESP + 0x2c],ECX
MOV EAX,dword ptr [EBX]
BSWAP EAX
MOV dword ptr [ESP + 0x38],EAX
LEA EAX,[EBX + ESI*0x1 + 0x4]
PUSH dword ptr [ESP + 0x10]
PUSH EAX
PUSH dword ptr [ESP + 0x28]
MOV EBX,dword ptr [ESP + 0x34]
CALL 0x000140d0
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x28]
MOV EDX,dword ptr [ESP + 0x2c]
JMP 0x000816e0
XOR EBP,EBP
CMP byte ptr [ESP + 0x20],0x0
JZ 0x000815e0
LEA ESI,[ESI]
MOV EAX,0x1094f
CALL 0x00051360
MOV EBP,EAX
JMP 0x000815e0
MOV EAX,dword ptr [ESP + 0x14]
MOV EBP,dword ptr [EAX + 0xc]
XOR ECX,ECX
LEA EDX,[EBX*0x8 + 0x0]
MOV EAX,EBP
CALL 0x00026820
TEST EAX,EAX
JZ 0x000817bf
MOV EDI,dword ptr [ESP + 0x14]
MOV dword ptr [EDI + 0xc],EAX
JMP 0x0008146f
MOV EBP,0x7
JMP 0x000815e0
CALL 0x000f4bf0
(translation_unit "int FUN_00081380(void *param_1,int param_2)\n\n{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}\n\n" (function_definition "int FUN_00081380(void *param_1,int param_2)\n\n{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" primitive_type (function_declarator "FUN_00081380(void *param_1,int param_2)" identifier (parameter_list "(void *param_1,int param_2)" ( (parameter_declaration "void *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "size_t extraout_ECX;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined8 uVar13;" type_identifier identifier ;) (declaration "size_t local_50;" primitive_type identifier ;) (declaration "size_t local_4c;" primitive_type identifier ;) (declaration "void *local_40;" primitive_type (pointer_declarator "*local_40" * identifier) ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar13 = FUN_000196fd();" (assignment_expression "uVar13 = FUN_000196fd()" identifier = (call_expression "FUN_000196fd()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar10 = (uint)((ulonglong)uVar13 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)uVar13 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar13 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar13 >> 0x20)" ( (binary_expression "(ulonglong)uVar13 >> 0x20" (cast_expression "(ulonglong)uVar13" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar3 = (int)uVar13;" (assignment_expression "iVar3 = (int)uVar13" identifier = (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1 = *(int **)(iVar3 + 0x14);" (assignment_expression "piVar1 = *(int **)(iVar3 + 0x14)" identifier = (pointer_expression "*(int **)(iVar3 + 0x14)" * (cast_expression "(int **)(iVar3 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "iVar7 = *(int *)(iVar3 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar3 + 0x6c)" * (cast_expression "(int *)(iVar3 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x6c)" ( (binary_expression "iVar3 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_00023170();" (call_expression "FUN_00023170()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar5 = *(int *)(iVar3 + 0x24);" (assignment_expression "iVar5 = *(int *)(iVar3 + 0x24)" identifier = (pointer_expression "*(int *)(iVar3 + 0x24)" * (cast_expression "(int *)(iVar3 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x24)" ( (binary_expression "iVar3 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);" (assignment_expression "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c)" identifier = (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) ;) (if_statement "if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" if (parenthesized_expression "(piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38)))" ( (binary_expression "piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))" (binary_expression "piVar1[9] - uVar8" (subscript_expression "piVar1[9]" identifier [ number_literal ]) - identifier) < (call_expression "(uint)(iVar5 - *(int *)(iVar7 + 0x38))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 - *(int *)(iVar7 + 0x38))" ( (binary_expression "iVar5 - *(int *)(iVar7 + 0x38)" identifier - (pointer_expression "*(int *)(iVar7 + 0x38)" * (cast_expression "(int *)(iVar7 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x38)" ( (binary_expression "iVar7 + 0x38" identifier + number_literal) ))))) )))) )) (compound_statement "{\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" { (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "local_50 = extraout_ECX;" (assignment_expression "local_50 = extraout_ECX" identifier = identifier) ;) (if_statement "if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" if (parenthesized_expression "(uVar10 < uVar8)" ( (binary_expression "uVar10 < uVar8" identifier < identifier) )) (compound_statement "{\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }" { (if_statement "if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" if (parenthesized_expression "(uVar8 < uVar10 + extraout_ECX)" ( (binary_expression "uVar8 < uVar10 + extraout_ECX" identifier < (binary_expression "uVar10 + extraout_ECX" identifier + identifier)) )) (compound_statement "{\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }" { (expression_statement "local_4c = (uVar10 - uVar8) + extraout_ECX;" (assignment_expression "local_4c = (uVar10 - uVar8) + extraout_ECX" identifier = (binary_expression "(uVar10 - uVar8) + extraout_ECX" (parenthesized_expression "(uVar10 - uVar8)" ( (binary_expression "uVar10 - uVar8" identifier - identifier) )) + identifier)) ;) (expression_statement "bVar12 = local_4c != 0;" (assignment_expression "bVar12 = local_4c != 0" identifier = (binary_expression "local_4c != 0" identifier != number_literal)) ;) (expression_statement "local_50 = uVar8 - uVar10;" (assignment_expression "local_50 = uVar8 - uVar10" identifier = (binary_expression "uVar8 - uVar10" identifier - identifier)) ;) (if_statement "if (param_2 != 0) goto LAB_00081592;" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00081592;" goto statement_identifier ;)) (labeled_statement "LAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" statement_identifier : (expression_statement "memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" (call_expression "memcpy(param_1,(void *)(uVar10 + iVar5),local_50)" identifier (argument_list "(param_1,(void *)(uVar10 + iVar5),local_50)" ( identifier , (cast_expression "(void *)(uVar10 + iVar5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + iVar5)" ( (binary_expression "uVar10 + iVar5" identifier + identifier) ))) , identifier ))) ;)) }) (else_clause "else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" else (compound_statement "{\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" { (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (if_statement "if (param_2 == 0) goto LAB_00081633;" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00081633;" goto statement_identifier ;)) (labeled_statement "LAB_00081592:\n      iVar7 = FUN_00079770();" statement_identifier : (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" identifier = (call_expression "FUN_00079770()" identifier (argument_list "()" ( )))) ;)) (if_statement "if (iVar7 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;)) (expression_statement "memcpy((void *)(uVar10 + iVar5),param_1,local_50);" (call_expression "memcpy((void *)(uVar10 + iVar5),param_1,local_50)" identifier (argument_list "((void *)(uVar10 + iVar5),param_1,local_50)" ( (cast_expression "(void *)(uVar10 + iVar5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + iVar5)" ( (binary_expression "uVar10 + iVar5" identifier + identifier) ))) , identifier , identifier ))) ;) }))) (expression_statement "local_40 = (void *)((int)param_1 + local_50);" (assignment_expression "local_40 = (void *)((int)param_1 + local_50)" identifier = (cast_expression "(void *)((int)param_1 + local_50)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + local_50)" ( (binary_expression "(int)param_1 + local_50" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "local_50 = local_4c;" (assignment_expression "local_50 = local_4c" identifier = identifier) ;) }) (else_clause "else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" else (compound_statement "{\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" { (expression_statement "uVar10 = uVar10 - uVar8;" (assignment_expression "uVar10 = uVar10 - uVar8" identifier = (binary_expression "uVar10 - uVar8" identifier - identifier)) ;) (expression_statement "bVar12 = extraout_ECX != 0;" (assignment_expression "bVar12 = extraout_ECX != 0" identifier = (binary_expression "extraout_ECX != 0" identifier != number_literal)) ;) (expression_statement "local_40 = param_1;" (assignment_expression "local_40 = param_1" identifier = identifier) ;) }))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" { (expression_statement "uVar8 = piVar1[9] - 4;" (assignment_expression "uVar8 = piVar1[9] - 4" identifier = (binary_expression "piVar1[9] - 4" (subscript_expression "piVar1[9]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));" (assignment_expression "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" identifier = (pointer_expression "*(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" * (cast_expression "(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" ( (binary_expression "iVar5 + (uint)*(ushort *)(iVar3 + 0x2c)" identifier + (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) ))))) ;) (expression_statement "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" identifier = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) (if_statement "if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" if (parenthesized_expression "((*(byte *)(iVar3 + 1) & 4) == 0)" ( (binary_expression "(*(byte *)(iVar3 + 1) & 4) == 0" (parenthesized_expression "(*(byte *)(iVar3 + 1) & 4)" ( (binary_expression "*(byte *)(iVar3 + 1) & 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }" { (expression_statement "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;" (assignment_expression "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" identifier = (binary_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" (parenthesized_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c))" ( (binary_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28))" ( (binary_expression "piVar1[9] + -5 + *(int *)(iVar3 + 0x28)" (binary_expression "piVar1[9] + -5" (subscript_expression "piVar1[9]" identifier [ number_literal ]) + number_literal) + (pointer_expression "*(int *)(iVar3 + 0x28)" * (cast_expression "(int *)(iVar3 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x28)" ( (binary_expression "iVar3 + 0x28" identifier + number_literal) ))))) )) - (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) )) / identifier)) ;) (if_statement "if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" if (parenthesized_expression "((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7))" ( (binary_expression "(iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" ( (comma_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7)" identifier = (call_expression "(**(code **)(unaff_EDI + 0xc7e31))(iVar7)" (parenthesized_expression "(**(code **)(unaff_EDI + 0xc7e31))" ( (pointer_expression "**(code **)(unaff_EDI + 0xc7e31)" * (pointer_expression "*(code **)(unaff_EDI + 0xc7e31)" * (cast_expression "(code **)(unaff_EDI + 0xc7e31)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0xc7e31)" ( (binary_expression "unaff_EDI + 0xc7e31" identifier + number_literal) ))))) )) (argument_list "(iVar7)" ( identifier )))) , (comma_expression "iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar7 = uVar4 * 4" identifier = (binary_expression "uVar4 * 4" identifier * number_literal)) , (binary_expression "iVar7 - iVar5 != 0 && iVar5 <= iVar7" (binary_expression "iVar7 - iVar5 != 0" (binary_expression "iVar7 - iVar5" identifier - identifier) != number_literal) && (binary_expression "iVar5 <= iVar7" identifier <= identifier)))) ))) )) (compound_statement "{\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }" { (expression_statement "__s = (void *)FUN_00026820();" (assignment_expression "__s = (void *)FUN_00026820()" identifier = (cast_expression "(void *)FUN_00026820()" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00026820()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" if (parenthesized_expression "(__s == (void *)0x0)" ( (binary_expression "__s == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" { (expression_statement "iVar7 = 7;" (assignment_expression "iVar7 = 7" identifier = number_literal) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "*(void **)(iVar3 + 0xc) = __s;" (assignment_expression "*(void **)(iVar3 + 0xc) = __s" (pointer_expression "*(void **)(iVar3 + 0xc)" * (cast_expression "(void **)(iVar3 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" else (compound_statement "{\n        __s = *(void **)(iVar3 + 0xc);\n      }" { (expression_statement "__s = *(void **)(iVar3 + 0xc);" (assignment_expression "__s = *(void **)(iVar3 + 0xc)" identifier = (pointer_expression "*(void **)(iVar3 + 0xc)" * (cast_expression "(void **)(iVar3 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) }))) (expression_statement "memset(__s,0,uVar4 << 2);" (call_expression "memset(__s,0,uVar4 << 2)" identifier (argument_list "(__s,0,uVar4 << 2)" ( identifier , number_literal , (binary_expression "uVar4 << 2" identifier << number_literal) ))) ;) (expression_statement "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;" (assignment_expression "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) = (binary_expression "*(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) | number_literal)) ;) }) (else_clause "else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" else (compound_statement "{\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" { (expression_statement "uVar6 = uVar10 / uVar8;" (assignment_expression "uVar6 = uVar10 / uVar8" identifier = (binary_expression "uVar10 / uVar8" identifier / identifier)) ;) (expression_statement "uVar11 = uVar10 % uVar8;" (assignment_expression "uVar11 = uVar10 % uVar8" identifier = (binary_expression "uVar10 % uVar8" identifier % identifier)) ;) (expression_statement "uVar4 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar4 = *(uint *)(iVar7 + uVar6 * 4)" identifier = (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar6 * 4)" ( (binary_expression "iVar7 + uVar6 * 4" identifier + (binary_expression "uVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar4 != 0) goto LAB_000814a2;" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000814a2;" goto statement_identifier ;)) }))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" { (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar11 = uVar10;" (assignment_expression "uVar11 = uVar10" identifier = identifier) ;) (expression_statement "uVar4 = local_28;" (assignment_expression "uVar4 = local_28" identifier = identifier) ;) (labeled_statement "LAB_000814a2:\n      local_28 = uVar4;" statement_identifier : (expression_statement "local_28 = uVar4;" (assignment_expression "local_28 = uVar4" identifier = identifier) ;)) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" identifier = identifier) ;) (labeled_statement "LAB_000814d6:\n      local_28 = uVar10;" statement_identifier : (expression_statement "local_28 = uVar10;" (assignment_expression "local_28 = uVar10" identifier = identifier) ;)) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;" (assignment_expression "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28" (pointer_expression "*(uint *)(iVar7 + -4 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + -4 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -4 + uVar6 * 4)" ( (binary_expression "iVar7 + -4 + uVar6 * 4" (binary_expression "iVar7 + -4" identifier + number_literal) + (binary_expression "uVar6 * 4" identifier * number_literal)) )))) = identifier) ;) (if_statement "if (uVar8 <= uVar11) goto LAB_000814b8;" if (parenthesized_expression "(uVar8 <= uVar11)" ( (binary_expression "uVar8 <= uVar11" identifier <= identifier) )) (goto_statement "goto LAB_000814b8;" goto statement_identifier ;)) (expression_statement "sVar9 = 0;" (assignment_expression "sVar9 = 0" identifier = number_literal) ;) (if_statement "if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" if (parenthesized_expression "(uVar8 < local_50 + uVar11)" ( (binary_expression "uVar8 < local_50 + uVar11" identifier < (binary_expression "local_50 + uVar11" identifier + identifier)) )) (compound_statement "{\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" { (expression_statement "sVar9 = (uVar11 - uVar8) + local_50;" (assignment_expression "sVar9 = (uVar11 - uVar8) + local_50" identifier = (binary_expression "(uVar11 - uVar8) + local_50" (parenthesized_expression "(uVar11 - uVar8)" ( (binary_expression "uVar11 - uVar8" identifier - identifier) )) + identifier)) ;) (expression_statement "local_50 = uVar8 - uVar11;" (assignment_expression "local_50 = uVar8 - uVar11" identifier = (binary_expression "uVar8 - uVar11" identifier - identifier)) ;) })) (expression_statement "iVar7 = *piVar1;" (assignment_expression "iVar7 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }" { (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" identifier = (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" (parenthesized_expression "(**(code **)(iVar7 + 200))" ( (pointer_expression "**(code **)(iVar7 + 200)" * (pointer_expression "*(code **)(iVar7 + 200)" * (cast_expression "(code **)(iVar7 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 200)" ( (binary_expression "iVar7 + 200" identifier + number_literal) ))))) )) (argument_list "(iVar7,local_28,&local_24,2)" ( identifier , identifier , (pointer_expression "&local_24" & identifier) , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" { (expression_statement "uVar10 = **(uint **)(local_24 + 4);" (assignment_expression "uVar10 = **(uint **)(local_24 + 4)" identifier = (pointer_expression "**(uint **)(local_24 + 4)" * (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) )))))) ;) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" identifier = (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" ( (binary_expression "uVar10 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" ( (binary_expression "uVar10 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar10 << 0x18" identifier << number_literal))) ;) (expression_statement "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);" (call_expression "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" identifier (argument_list "(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" ( identifier , (cast_expression "(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)*(uint **)(local_24 + 4) + uVar11 + 4)" ( (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11 + 4" (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11" (cast_expression "(int)*(uint **)(local_24 + 4)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) ))))) + identifier) + number_literal) ))) , identifier ))) ;) (labeled_statement "LAB_000816e0:\n          uVar11 = 0;" statement_identifier : (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;)) (expression_statement "FUN_0001b1a0();" (call_expression "FUN_0001b1a0()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" else (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" { (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" identifier = (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" (parenthesized_expression "(**(code **)(iVar7 + 200))" ( (pointer_expression "**(code **)(iVar7 + 200)" * (pointer_expression "*(code **)(iVar7 + 200)" * (cast_expression "(code **)(iVar7 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 200)" ( (binary_expression "iVar7 + 200" identifier + number_literal) ))))) )) (argument_list "(iVar7,local_28,&local_24,0)" ( identifier , identifier , (pointer_expression "&local_24" & identifier) , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" { (expression_statement "puVar2 = *(uint **)(local_24 + 4);" (assignment_expression "puVar2 = *(uint **)(local_24 + 4)" identifier = (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = *puVar2;" (assignment_expression "uVar10 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" identifier = (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" ( (binary_expression "uVar10 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" ( (binary_expression "uVar10 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar10 << 0x18" identifier << number_literal))) ;) (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" identifier = (call_expression "FUN_00079770()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" { (expression_statement "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);" (call_expression "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" identifier (argument_list "((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" ( (cast_expression "(void *)((int)puVar2 + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + uVar11 + 4)" ( (binary_expression "(int)puVar2 + uVar11 + 4" (binary_expression "(int)puVar2 + uVar11" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))) , identifier , identifier ))) ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if (local_24 != 0) goto LAB_000816e0;" if (parenthesized_expression "(local_24 != 0)" ( (binary_expression "local_24 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000816e0;" goto statement_identifier ;)) })) }))) (if_statement "if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" if (parenthesized_expression "(sVar9 != 0)" ( (binary_expression "sVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" { (expression_statement "local_40 = (void *)((int)local_40 + local_50);" (assignment_expression "local_40 = (void *)((int)local_40 + local_50)" identifier = (cast_expression "(void *)((int)local_40 + local_50)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_40 + local_50)" ( (binary_expression "(int)local_40 + local_50" (cast_expression "(int)local_40" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "local_50 = sVar9;" (assignment_expression "local_50 = sVar9" identifier = identifier) ;) (goto_statement "goto joined_r0x0008171a;" goto statement_identifier ;) })) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" { (labeled_statement "LAB_00081780:\n      iVar7 = FUN_00051360();" statement_identifier : (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;)) })) })) (labeled_statement "LAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_000f4bf0();\n  }" { comment (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar7;" return identifier ;) (labeled_statement "LAB_000814b8:\n  uVar11 = uVar11 - uVar8;" statement_identifier : (expression_statement "uVar11 = uVar11 - uVar8;" (assignment_expression "uVar11 = uVar11 - uVar8" identifier = (binary_expression "uVar11 - uVar8" identifier - identifier)) ;)) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar10 = *(uint *)(iVar7 + uVar6 * 4)" identifier = (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar6 * 4)" ( (binary_expression "iVar7 + uVar6 * 4" identifier + (binary_expression "uVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" { (expression_statement "iVar7 = FUN_000519a0(&local_28);" (assignment_expression "iVar7 = FUN_000519a0(&local_28)" identifier = (call_expression "FUN_000519a0(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (labeled_statement "joined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;" statement_identifier : (if_statement "if (iVar7 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" { (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" identifier = identifier) ;) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })) (goto_statement "goto LAB_00081780;" goto statement_identifier ;) })) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })))
(translation_unit "int accessPayload(BtCursor *pCur,u32 offset,u32 amt,uchar *pBuf,int eOp)\n\n{\n  BtShared *pBt;\n  MemPage *pMVar1;\n  u8 *puVar2;\n  Pager *pPVar3;\n  uint *puVar4;\n  Pgno PVar5;\n  BtCursor *pCur_00;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  Pgno *pPVar9;\n  size_t extraout_ECX;\n  DbPage *pPg;\n  uint uVar10;\n  uint uVar11;\n  size_t sVar12;\n  uint uVar13;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar14;\n  undefined8 uVar15;\n  u64 in_stack_ffffffa4;\n  size_t local_50;\n  size_t local_4c;\n  BtCursor *local_40;\n  Pgno nextPage;\n  DbPage *pDbPage;\n  int local_20;\n  \n  uVar15 = __x86_get_pc_thunk_di();\n  uVar13 = (uint)((ulonglong)uVar15 >> 0x20);\n  pCur_00 = (BtCursor *)uVar15;\n  pBt = pCur_00->pBt;\n  pMVar1 = pCur_00->pPage;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  getCellInfo(pCur_00);\n  puVar2 = (pCur_00->info).pPayload;\n  uVar10 = (uint)(pCur_00->info).nLocal;\n  if (pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)) {\n    iVar8 = sqlite3CorruptError(0x108be);\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar13 < uVar10) {\n    if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }\n    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));\n    uVar13 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }\n  iVar8 = 0;\n  if (!bVar14) goto LAB_000815e0;\n  uVar10 = pBt->usableSize - 4;\n  uVar11 = (uint)(pCur_00->info).nLocal;\n  pPVar9 = pCur_00->aOverflow;\n  uVar6 = *(uint *)(puVar2 + uVar11);\n  nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n  if ((pCur_00->curFlags & 4) == 0) {\n    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;\n    if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }\n    memset(pPVar9,0,uVar6 << 2);\n    pCur_00->curFlags = pCur_00->curFlags | 4;\n  }\n  else {\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }\n  if (nextPage != 0) {\n    pPVar9 = pCur_00->aOverflow;\n    uVar6 = 0;\n    uVar11 = uVar13;\n    PVar5 = nextPage;\nLAB_000814a2:\n    nextPage = PVar5;\n    PVar5 = nextPage;\nLAB_000814d6:\n    nextPage = PVar5;\n    uVar13 = uVar6 + 1;\n    pPVar9[uVar6] = nextPage;\n    uVar6 = uVar13;\n    if (uVar10 <= uVar11) goto LAB_000814b8;\n    sVar12 = 0;\n    if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }\n    pPVar3 = pBt->pPager;\n    if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }\n    if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }\n    goto LAB_000815e0;\n  }\n  iVar8 = 0;\n  if (bVar14) {\nLAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar8;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar10;\n  pPVar9 = pCur_00->aOverflow;\n  PVar5 = pPVar9[uVar13];\n  if (pPVar9[uVar13] == 0) {\n    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);\njoined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;\n    if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}\n\n" (function_definition "int accessPayload(BtCursor *pCur,u32 offset,u32 amt,uchar *pBuf,int eOp)\n\n{\n  BtShared *pBt;\n  MemPage *pMVar1;\n  u8 *puVar2;\n  Pager *pPVar3;\n  uint *puVar4;\n  Pgno PVar5;\n  BtCursor *pCur_00;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  Pgno *pPVar9;\n  size_t extraout_ECX;\n  DbPage *pPg;\n  uint uVar10;\n  uint uVar11;\n  size_t sVar12;\n  uint uVar13;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar14;\n  undefined8 uVar15;\n  u64 in_stack_ffffffa4;\n  size_t local_50;\n  size_t local_4c;\n  BtCursor *local_40;\n  Pgno nextPage;\n  DbPage *pDbPage;\n  int local_20;\n  \n  uVar15 = __x86_get_pc_thunk_di();\n  uVar13 = (uint)((ulonglong)uVar15 >> 0x20);\n  pCur_00 = (BtCursor *)uVar15;\n  pBt = pCur_00->pBt;\n  pMVar1 = pCur_00->pPage;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  getCellInfo(pCur_00);\n  puVar2 = (pCur_00->info).pPayload;\n  uVar10 = (uint)(pCur_00->info).nLocal;\n  if (pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)) {\n    iVar8 = sqlite3CorruptError(0x108be);\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar13 < uVar10) {\n    if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }\n    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));\n    uVar13 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }\n  iVar8 = 0;\n  if (!bVar14) goto LAB_000815e0;\n  uVar10 = pBt->usableSize - 4;\n  uVar11 = (uint)(pCur_00->info).nLocal;\n  pPVar9 = pCur_00->aOverflow;\n  uVar6 = *(uint *)(puVar2 + uVar11);\n  nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n  if ((pCur_00->curFlags & 4) == 0) {\n    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;\n    if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }\n    memset(pPVar9,0,uVar6 << 2);\n    pCur_00->curFlags = pCur_00->curFlags | 4;\n  }\n  else {\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }\n  if (nextPage != 0) {\n    pPVar9 = pCur_00->aOverflow;\n    uVar6 = 0;\n    uVar11 = uVar13;\n    PVar5 = nextPage;\nLAB_000814a2:\n    nextPage = PVar5;\n    PVar5 = nextPage;\nLAB_000814d6:\n    nextPage = PVar5;\n    uVar13 = uVar6 + 1;\n    pPVar9[uVar6] = nextPage;\n    uVar6 = uVar13;\n    if (uVar10 <= uVar11) goto LAB_000814b8;\n    sVar12 = 0;\n    if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }\n    pPVar3 = pBt->pPager;\n    if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }\n    if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }\n    goto LAB_000815e0;\n  }\n  iVar8 = 0;\n  if (bVar14) {\nLAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar8;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar10;\n  pPVar9 = pCur_00->aOverflow;\n  PVar5 = pPVar9[uVar13];\n  if (pPVar9[uVar13] == 0) {\n    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);\njoined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;\n    if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" primitive_type (function_declarator "accessPayload(BtCursor *pCur,u32 offset,u32 amt,uchar *pBuf,int eOp)" identifier (parameter_list "(BtCursor *pCur,u32 offset,u32 amt,uchar *pBuf,int eOp)" ( (parameter_declaration "BtCursor *pCur" type_identifier (pointer_declarator "*pCur" * identifier)) , (parameter_declaration "u32 offset" type_identifier identifier) , (parameter_declaration "u32 amt" type_identifier identifier) , (parameter_declaration "uchar *pBuf" type_identifier (pointer_declarator "*pBuf" * identifier)) , (parameter_declaration "int eOp" primitive_type identifier) ))) (compound_statement "{\n  BtShared *pBt;\n  MemPage *pMVar1;\n  u8 *puVar2;\n  Pager *pPVar3;\n  uint *puVar4;\n  Pgno PVar5;\n  BtCursor *pCur_00;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  Pgno *pPVar9;\n  size_t extraout_ECX;\n  DbPage *pPg;\n  uint uVar10;\n  uint uVar11;\n  size_t sVar12;\n  uint uVar13;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar14;\n  undefined8 uVar15;\n  u64 in_stack_ffffffa4;\n  size_t local_50;\n  size_t local_4c;\n  BtCursor *local_40;\n  Pgno nextPage;\n  DbPage *pDbPage;\n  int local_20;\n  \n  uVar15 = __x86_get_pc_thunk_di();\n  uVar13 = (uint)((ulonglong)uVar15 >> 0x20);\n  pCur_00 = (BtCursor *)uVar15;\n  pBt = pCur_00->pBt;\n  pMVar1 = pCur_00->pPage;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  getCellInfo(pCur_00);\n  puVar2 = (pCur_00->info).pPayload;\n  uVar10 = (uint)(pCur_00->info).nLocal;\n  if (pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)) {\n    iVar8 = sqlite3CorruptError(0x108be);\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar13 < uVar10) {\n    if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }\n    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));\n    uVar13 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }\n  iVar8 = 0;\n  if (!bVar14) goto LAB_000815e0;\n  uVar10 = pBt->usableSize - 4;\n  uVar11 = (uint)(pCur_00->info).nLocal;\n  pPVar9 = pCur_00->aOverflow;\n  uVar6 = *(uint *)(puVar2 + uVar11);\n  nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n  if ((pCur_00->curFlags & 4) == 0) {\n    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;\n    if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }\n    memset(pPVar9,0,uVar6 << 2);\n    pCur_00->curFlags = pCur_00->curFlags | 4;\n  }\n  else {\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }\n  if (nextPage != 0) {\n    pPVar9 = pCur_00->aOverflow;\n    uVar6 = 0;\n    uVar11 = uVar13;\n    PVar5 = nextPage;\nLAB_000814a2:\n    nextPage = PVar5;\n    PVar5 = nextPage;\nLAB_000814d6:\n    nextPage = PVar5;\n    uVar13 = uVar6 + 1;\n    pPVar9[uVar6] = nextPage;\n    uVar6 = uVar13;\n    if (uVar10 <= uVar11) goto LAB_000814b8;\n    sVar12 = 0;\n    if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }\n    pPVar3 = pBt->pPager;\n    if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }\n    if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }\n    goto LAB_000815e0;\n  }\n  iVar8 = 0;\n  if (bVar14) {\nLAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return iVar8;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar10;\n  pPVar9 = pCur_00->aOverflow;\n  PVar5 = pPVar9[uVar13];\n  if (pPVar9[uVar13] == 0) {\n    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);\njoined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;\n    if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" { (declaration "BtShared *pBt;" type_identifier (pointer_declarator "*pBt" * identifier) ;) (declaration "MemPage *pMVar1;" type_identifier (pointer_declarator "*pMVar1" * identifier) ;) (declaration "u8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "Pager *pPVar3;" type_identifier (pointer_declarator "*pPVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "Pgno PVar5;" type_identifier identifier ;) (declaration "BtCursor *pCur_00;" type_identifier (pointer_declarator "*pCur_00" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "Pgno *pPVar9;" type_identifier (pointer_declarator "*pPVar9" * identifier) ;) (declaration "size_t extraout_ECX;" primitive_type identifier ;) (declaration "DbPage *pPg;" type_identifier (pointer_declarator "*pPg" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "size_t sVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "undefined8 uVar15;" type_identifier identifier ;) (declaration "u64 in_stack_ffffffa4;" type_identifier identifier ;) (declaration "size_t local_50;" primitive_type identifier ;) (declaration "size_t local_4c;" primitive_type identifier ;) (declaration "BtCursor *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "Pgno nextPage;" type_identifier identifier ;) (declaration "DbPage *pDbPage;" type_identifier (pointer_declarator "*pDbPage" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar15 = __x86_get_pc_thunk_di();" (assignment_expression "uVar15 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar13 = (uint)((ulonglong)uVar15 >> 0x20);" (assignment_expression "uVar13 = (uint)((ulonglong)uVar15 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar15 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar15 >> 0x20)" ( (binary_expression "(ulonglong)uVar15 >> 0x20" (cast_expression "(ulonglong)uVar15" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "pCur_00 = (BtCursor *)uVar15;" (assignment_expression "pCur_00 = (BtCursor *)uVar15" identifier = (cast_expression "(BtCursor *)uVar15" ( (type_descriptor "BtCursor *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pBt = pCur_00->pBt;" (assignment_expression "pBt = pCur_00->pBt" identifier = (field_expression "pCur_00->pBt" identifier -> field_identifier)) ;) (expression_statement "pMVar1 = pCur_00->pPage;" (assignment_expression "pMVar1 = pCur_00->pPage" identifier = (field_expression "pCur_00->pPage" identifier -> field_identifier)) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "getCellInfo(pCur_00);" (call_expression "getCellInfo(pCur_00)" identifier (argument_list "(pCur_00)" ( identifier ))) ;) (expression_statement "puVar2 = (pCur_00->info).pPayload;" (assignment_expression "puVar2 = (pCur_00->info).pPayload" identifier = (field_expression "(pCur_00->info).pPayload" (parenthesized_expression "(pCur_00->info)" ( (field_expression "pCur_00->info" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar10 = (uint)(pCur_00->info).nLocal;" (assignment_expression "uVar10 = (uint)(pCur_00->info).nLocal" identifier = (field_expression "(uint)(pCur_00->info).nLocal" (call_expression "(uint)(pCur_00->info)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pCur_00->info)" ( (field_expression "pCur_00->info" identifier -> field_identifier) ))) . field_identifier)) ;) (if_statement "if (pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)) {\n    iVar8 = sqlite3CorruptError(0x108be);\n    goto LAB_000815e0;\n  }" if (parenthesized_expression "(pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData))" ( (binary_expression "pBt->usableSize - uVar10 < (uint)((int)puVar2 - (int)pMVar1->aData)" (binary_expression "pBt->usableSize - uVar10" (field_expression "pBt->usableSize" identifier -> field_identifier) - identifier) < (call_expression "(uint)((int)puVar2 - (int)pMVar1->aData)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar2 - (int)pMVar1->aData)" ( (binary_expression "(int)puVar2 - (int)pMVar1->aData" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pMVar1->aData" ( (type_descriptor "int" primitive_type) ) (field_expression "pMVar1->aData" identifier -> field_identifier))) )))) )) (compound_statement "{\n    iVar8 = sqlite3CorruptError(0x108be);\n    goto LAB_000815e0;\n  }" { (expression_statement "iVar8 = sqlite3CorruptError(0x108be);" (assignment_expression "iVar8 = sqlite3CorruptError(0x108be)" identifier = (call_expression "sqlite3CorruptError(0x108be)" identifier (argument_list "(0x108be)" ( number_literal )))) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "local_50 = extraout_ECX;" (assignment_expression "local_50 = extraout_ECX" identifier = identifier) ;) (if_statement "if (uVar13 < uVar10) {\n    if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }\n    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));\n    uVar13 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }" if (parenthesized_expression "(uVar13 < uVar10)" ( (binary_expression "uVar13 < uVar10" identifier < identifier) )) (compound_statement "{\n    if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }\n    local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));\n    uVar13 = 0;\n    local_50 = local_4c;\n  }" { (if_statement "if (uVar10 < uVar13 + extraout_ECX) {\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }\n    else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }" if (parenthesized_expression "(uVar10 < uVar13 + extraout_ECX)" ( (binary_expression "uVar10 < uVar13 + extraout_ECX" identifier < (binary_expression "uVar13 + extraout_ECX" identifier + identifier)) )) (compound_statement "{\n      local_4c = (uVar13 - uVar10) + extraout_ECX;\n      bVar14 = local_4c != 0;\n      local_50 = uVar10 - uVar13;\n      if (offset != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);\n    }" { (expression_statement "local_4c = (uVar13 - uVar10) + extraout_ECX;" (assignment_expression "local_4c = (uVar13 - uVar10) + extraout_ECX" identifier = (binary_expression "(uVar13 - uVar10) + extraout_ECX" (parenthesized_expression "(uVar13 - uVar10)" ( (binary_expression "uVar13 - uVar10" identifier - identifier) )) + identifier)) ;) (expression_statement "bVar14 = local_4c != 0;" (assignment_expression "bVar14 = local_4c != 0" identifier = (binary_expression "local_4c != 0" identifier != number_literal)) ;) (expression_statement "local_50 = uVar10 - uVar13;" (assignment_expression "local_50 = uVar10 - uVar13" identifier = (binary_expression "uVar10 - uVar13" identifier - identifier)) ;) (if_statement "if (offset != 0) goto LAB_00081592;" if (parenthesized_expression "(offset != 0)" ( (binary_expression "offset != 0" identifier != number_literal) )) (goto_statement "goto LAB_00081592;" goto statement_identifier ;)) (labeled_statement "LAB_00081633:\n      memcpy(pCur,puVar2 + uVar13,local_50);" statement_identifier : (expression_statement "memcpy(pCur,puVar2 + uVar13,local_50);" (call_expression "memcpy(pCur,puVar2 + uVar13,local_50)" identifier (argument_list "(pCur,puVar2 + uVar13,local_50)" ( identifier , (binary_expression "puVar2 + uVar13" identifier + identifier) , identifier ))) ;)) }) (else_clause "else {\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }" else (compound_statement "{\n      bVar14 = false;\n      local_4c = 0;\n      if (offset == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);\n      if (iVar8 != 0) goto LAB_000815e0;\n      memcpy(puVar2 + uVar13,pCur,local_50);\n    }" { (expression_statement "bVar14 = false;" (assignment_expression "bVar14 = false" identifier = false) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (if_statement "if (offset == 0) goto LAB_00081633;" if (parenthesized_expression "(offset == 0)" ( (binary_expression "offset == 0" identifier == number_literal) )) (goto_statement "goto LAB_00081633;" goto statement_identifier ;)) (labeled_statement "LAB_00081592:\n      iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);" statement_identifier : (expression_statement "iVar8 = sqlite3PagerWrite(pMVar1->pDbPage);" (assignment_expression "iVar8 = sqlite3PagerWrite(pMVar1->pDbPage)" identifier = (call_expression "sqlite3PagerWrite(pMVar1->pDbPage)" identifier (argument_list "(pMVar1->pDbPage)" ( (field_expression "pMVar1->pDbPage" identifier -> field_identifier) )))) ;)) (if_statement "if (iVar8 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;)) (expression_statement "memcpy(puVar2 + uVar13,pCur,local_50);" (call_expression "memcpy(puVar2 + uVar13,pCur,local_50)" identifier (argument_list "(puVar2 + uVar13,pCur,local_50)" ( (binary_expression "puVar2 + uVar13" identifier + identifier) , identifier , identifier ))) ;) }))) (expression_statement "local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40));" (assignment_expression "local_40 = (BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40))" identifier = (cast_expression "(BtCursor *)((int)pCur->aiIdx + (local_50 - 0x40))" ( (type_descriptor "BtCursor *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pCur->aiIdx + (local_50 - 0x40))" ( (binary_expression "(int)pCur->aiIdx + (local_50 - 0x40)" (cast_expression "(int)pCur->aiIdx" ( (type_descriptor "int" primitive_type) ) (field_expression "pCur->aiIdx" identifier -> field_identifier)) + (parenthesized_expression "(local_50 - 0x40)" ( (binary_expression "local_50 - 0x40" identifier - number_literal) ))) )))) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "local_50 = local_4c;" (assignment_expression "local_50 = local_4c" identifier = identifier) ;) }) (else_clause "else {\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }" else (compound_statement "{\n    uVar13 = uVar13 - uVar10;\n    bVar14 = extraout_ECX != 0;\n    local_40 = pCur;\n  }" { (expression_statement "uVar13 = uVar13 - uVar10;" (assignment_expression "uVar13 = uVar13 - uVar10" identifier = (binary_expression "uVar13 - uVar10" identifier - identifier)) ;) (expression_statement "bVar14 = extraout_ECX != 0;" (assignment_expression "bVar14 = extraout_ECX != 0" identifier = (binary_expression "extraout_ECX != 0" identifier != number_literal)) ;) (expression_statement "local_40 = pCur;" (assignment_expression "local_40 = pCur" identifier = identifier) ;) }))) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (!bVar14) goto LAB_000815e0;" if (parenthesized_expression "(!bVar14)" ( (unary_expression "!bVar14" ! identifier) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;)) (expression_statement "uVar10 = pBt->usableSize - 4;" (assignment_expression "uVar10 = pBt->usableSize - 4" identifier = (binary_expression "pBt->usableSize - 4" (field_expression "pBt->usableSize" identifier -> field_identifier) - number_literal)) ;) (expression_statement "uVar11 = (uint)(pCur_00->info).nLocal;" (assignment_expression "uVar11 = (uint)(pCur_00->info).nLocal" identifier = (field_expression "(uint)(pCur_00->info).nLocal" (call_expression "(uint)(pCur_00->info)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pCur_00->info)" ( (field_expression "pCur_00->info" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) (expression_statement "uVar6 = *(uint *)(puVar2 + uVar11);" (assignment_expression "uVar6 = *(uint *)(puVar2 + uVar11)" identifier = (pointer_expression "*(uint *)(puVar2 + uVar11)" * (cast_expression "(uint *)(puVar2 + uVar11)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11)" ( (binary_expression "puVar2 + uVar11" identifier + identifier) ))))) ;) (expression_statement "nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "nextPage = uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" identifier = (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal))) ;) (if_statement "if ((pCur_00->curFlags & 4) == 0) {\n    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;\n    if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }\n    memset(pPVar9,0,uVar6 << 2);\n    pCur_00->curFlags = pCur_00->curFlags | 4;\n  }\n  else {\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }" if (parenthesized_expression "((pCur_00->curFlags & 4) == 0)" ( (binary_expression "(pCur_00->curFlags & 4) == 0" (parenthesized_expression "(pCur_00->curFlags & 4)" ( (binary_expression "pCur_00->curFlags & 4" (field_expression "pCur_00->curFlags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;\n    if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }\n    memset(pPVar9,0,uVar6 << 2);\n    pCur_00->curFlags = pCur_00->curFlags | 4;\n  }" { (expression_statement "uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10;" (assignment_expression "uVar6 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10" identifier = (binary_expression "(((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11) / uVar10" (parenthesized_expression "(((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11)" ( (binary_expression "((pBt->usableSize - 5) + (pCur_00->info).nPayload) - uVar11" (parenthesized_expression "((pBt->usableSize - 5) + (pCur_00->info).nPayload)" ( (binary_expression "(pBt->usableSize - 5) + (pCur_00->info).nPayload" (parenthesized_expression "(pBt->usableSize - 5)" ( (binary_expression "pBt->usableSize - 5" (field_expression "pBt->usableSize" identifier -> field_identifier) - number_literal) )) + (field_expression "(pCur_00->info).nPayload" (parenthesized_expression "(pCur_00->info)" ( (field_expression "pCur_00->info" identifier -> field_identifier) )) . field_identifier)) )) - identifier) )) / identifier)) ;) (if_statement "if (pPVar9 == (Pgno *)0x0) {\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }\n    else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }" if (parenthesized_expression "(pPVar9 == (Pgno *)0x0)" ( (binary_expression "pPVar9 == (Pgno *)0x0" identifier == (cast_expression "(Pgno *)0x0" ( (type_descriptor "Pgno *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);\n      if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }\n      pCur_00->aOverflow = pPVar9;\n    }" { (labeled_statement "LAB_0008179f:\n      pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);" statement_identifier : (expression_statement "pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4);" (assignment_expression "pPVar9 = (Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4)" identifier = (cast_expression "(Pgno *)sqlite3Realloc(pPVar9,in_stack_ffffffa4)" ( (type_descriptor "Pgno *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3Realloc(pPVar9,in_stack_ffffffa4)" identifier (argument_list "(pPVar9,in_stack_ffffffa4)" ( identifier , identifier ))))) ;)) (if_statement "if (pPVar9 == (Pgno *)0x0) {\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }" if (parenthesized_expression "(pPVar9 == (Pgno *)0x0)" ( (binary_expression "pPVar9 == (Pgno *)0x0" identifier == (cast_expression "(Pgno *)0x0" ( (type_descriptor "Pgno *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar8 = 7;\n        goto LAB_000815e0;\n      }" { (expression_statement "iVar8 = 7;" (assignment_expression "iVar8 = 7" identifier = number_literal) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "pCur_00->aOverflow = pPVar9;" (assignment_expression "pCur_00->aOverflow = pPVar9" (field_expression "pCur_00->aOverflow" identifier -> field_identifier) = identifier) ;) }) (else_clause "else {\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }" else (compound_statement "{\n      iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);\n      iVar8 = uVar6 * 4;\n      if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }\n      pPVar9 = pCur_00->aOverflow;\n    }" { (expression_statement "iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9);" (assignment_expression "iVar7 = (**(code **)(unaff_EDI + 0xc7e31))(pPVar9)" identifier = (call_expression "(**(code **)(unaff_EDI + 0xc7e31))(pPVar9)" (parenthesized_expression "(**(code **)(unaff_EDI + 0xc7e31))" ( (pointer_expression "**(code **)(unaff_EDI + 0xc7e31)" * (pointer_expression "*(code **)(unaff_EDI + 0xc7e31)" * (cast_expression "(code **)(unaff_EDI + 0xc7e31)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0xc7e31)" ( (binary_expression "unaff_EDI + 0xc7e31" identifier + number_literal) ))))) )) (argument_list "(pPVar9)" ( identifier )))) ;) (expression_statement "iVar8 = uVar6 * 4;" (assignment_expression "iVar8 = uVar6 * 4" identifier = (binary_expression "uVar6 * 4" identifier * number_literal)) ;) (if_statement "if (iVar8 - iVar7 != 0 && iVar7 <= iVar8) {\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }" if (parenthesized_expression "(iVar8 - iVar7 != 0 && iVar7 <= iVar8)" ( (binary_expression "iVar8 - iVar7 != 0 && iVar7 <= iVar8" (binary_expression "iVar8 - iVar7 != 0" (binary_expression "iVar8 - iVar7" identifier - identifier) != number_literal) && (binary_expression "iVar7 <= iVar8" identifier <= identifier)) )) (compound_statement "{\n        pPVar9 = pCur_00->aOverflow;\n        goto LAB_0008179f;\n      }" { (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) (goto_statement "goto LAB_0008179f;" goto statement_identifier ;) })) (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) }))) (expression_statement "memset(pPVar9,0,uVar6 << 2);" (call_expression "memset(pPVar9,0,uVar6 << 2)" identifier (argument_list "(pPVar9,0,uVar6 << 2)" ( identifier , number_literal , (binary_expression "uVar6 << 2" identifier << number_literal) ))) ;) (expression_statement "pCur_00->curFlags = pCur_00->curFlags | 4;" (assignment_expression "pCur_00->curFlags = pCur_00->curFlags | 4" (field_expression "pCur_00->curFlags" identifier -> field_identifier) = (binary_expression "pCur_00->curFlags | 4" (field_expression "pCur_00->curFlags" identifier -> field_identifier) | number_literal)) ;) }) (else_clause "else {\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }" else (compound_statement "{\n    uVar6 = uVar13 / uVar10;\n    uVar11 = uVar13 % uVar10;\n    PVar5 = pPVar9[uVar6];\n    if (pPVar9[uVar6] != 0) goto LAB_000814a2;\n  }" { (expression_statement "uVar6 = uVar13 / uVar10;" (assignment_expression "uVar6 = uVar13 / uVar10" identifier = (binary_expression "uVar13 / uVar10" identifier / identifier)) ;) (expression_statement "uVar11 = uVar13 % uVar10;" (assignment_expression "uVar11 = uVar13 % uVar10" identifier = (binary_expression "uVar13 % uVar10" identifier % identifier)) ;) (expression_statement "PVar5 = pPVar9[uVar6];" (assignment_expression "PVar5 = pPVar9[uVar6]" identifier = (subscript_expression "pPVar9[uVar6]" identifier [ identifier ])) ;) (if_statement "if (pPVar9[uVar6] != 0) goto LAB_000814a2;" if (parenthesized_expression "(pPVar9[uVar6] != 0)" ( (binary_expression "pPVar9[uVar6] != 0" (subscript_expression "pPVar9[uVar6]" identifier [ identifier ]) != number_literal) )) (goto_statement "goto LAB_000814a2;" goto statement_identifier ;)) }))) (if_statement "if (nextPage != 0) {\n    pPVar9 = pCur_00->aOverflow;\n    uVar6 = 0;\n    uVar11 = uVar13;\n    PVar5 = nextPage;\nLAB_000814a2:\n    nextPage = PVar5;\n    PVar5 = nextPage;\nLAB_000814d6:\n    nextPage = PVar5;\n    uVar13 = uVar6 + 1;\n    pPVar9[uVar6] = nextPage;\n    uVar6 = uVar13;\n    if (uVar10 <= uVar11) goto LAB_000814b8;\n    sVar12 = 0;\n    if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }\n    pPVar3 = pBt->pPager;\n    if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }\n    if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }\n    goto LAB_000815e0;\n  }" if (parenthesized_expression "(nextPage != 0)" ( (binary_expression "nextPage != 0" identifier != number_literal) )) (compound_statement "{\n    pPVar9 = pCur_00->aOverflow;\n    uVar6 = 0;\n    uVar11 = uVar13;\n    PVar5 = nextPage;\nLAB_000814a2:\n    nextPage = PVar5;\n    PVar5 = nextPage;\nLAB_000814d6:\n    nextPage = PVar5;\n    uVar13 = uVar6 + 1;\n    pPVar9[uVar6] = nextPage;\n    uVar6 = uVar13;\n    if (uVar10 <= uVar11) goto LAB_000814b8;\n    sVar12 = 0;\n    if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }\n    pPVar3 = pBt->pPager;\n    if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }\n    if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }\n    goto LAB_000815e0;\n  }" { (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar11 = uVar13;" (assignment_expression "uVar11 = uVar13" identifier = identifier) ;) (expression_statement "PVar5 = nextPage;" (assignment_expression "PVar5 = nextPage" identifier = identifier) ;) (labeled_statement "LAB_000814a2:\n    nextPage = PVar5;" statement_identifier : (expression_statement "nextPage = PVar5;" (assignment_expression "nextPage = PVar5" identifier = identifier) ;)) (expression_statement "PVar5 = nextPage;" (assignment_expression "PVar5 = nextPage" identifier = identifier) ;) (labeled_statement "LAB_000814d6:\n    nextPage = PVar5;" statement_identifier : (expression_statement "nextPage = PVar5;" (assignment_expression "nextPage = PVar5" identifier = identifier) ;)) (expression_statement "uVar13 = uVar6 + 1;" (assignment_expression "uVar13 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "pPVar9[uVar6] = nextPage;" (assignment_expression "pPVar9[uVar6] = nextPage" (subscript_expression "pPVar9[uVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "uVar6 = uVar13;" (assignment_expression "uVar6 = uVar13" identifier = identifier) ;) (if_statement "if (uVar10 <= uVar11) goto LAB_000814b8;" if (parenthesized_expression "(uVar10 <= uVar11)" ( (binary_expression "uVar10 <= uVar11" identifier <= identifier) )) (goto_statement "goto LAB_000814b8;" goto statement_identifier ;)) (expression_statement "sVar12 = 0;" (assignment_expression "sVar12 = 0" identifier = number_literal) ;) (if_statement "if (uVar10 < local_50 + uVar11) {\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }" if (parenthesized_expression "(uVar10 < local_50 + uVar11)" ( (binary_expression "uVar10 < local_50 + uVar11" identifier < (binary_expression "local_50 + uVar11" identifier + identifier)) )) (compound_statement "{\n      sVar12 = (uVar11 - uVar10) + local_50;\n      local_50 = uVar10 - uVar11;\n    }" { (expression_statement "sVar12 = (uVar11 - uVar10) + local_50;" (assignment_expression "sVar12 = (uVar11 - uVar10) + local_50" identifier = (binary_expression "(uVar11 - uVar10) + local_50" (parenthesized_expression "(uVar11 - uVar10)" ( (binary_expression "uVar11 - uVar10" identifier - identifier) )) + identifier)) ;) (expression_statement "local_50 = uVar10 - uVar11;" (assignment_expression "local_50 = uVar10 - uVar11" identifier = (binary_expression "uVar10 - uVar11" identifier - identifier)) ;) })) (expression_statement "pPVar3 = pBt->pPager;" (assignment_expression "pPVar3 = pBt->pPager" identifier = (field_expression "pBt->pPager" identifier -> field_identifier)) ;) (if_statement "if (offset == 0) {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }\n    else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }" if (parenthesized_expression "(offset == 0)" ( (binary_expression "offset == 0" identifier == number_literal) )) (compound_statement "{\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);\n      pPg = pDbPage;\n      if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }\n    }" { (expression_statement "iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2);" (assignment_expression "iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2)" identifier = (call_expression "(*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,2)" (parenthesized_expression "(*pPVar3->xGet)" ( (pointer_expression "*pPVar3->xGet" * (field_expression "pPVar3->xGet" identifier -> field_identifier)) )) (argument_list "(pPVar3,nextPage,&pDbPage,2)" ( identifier , identifier , (pointer_expression "&pDbPage" & identifier) , number_literal )))) ;) (expression_statement "pPg = pDbPage;" (assignment_expression "pPg = pDbPage" identifier = identifier) ;) (if_statement "if (iVar8 == 0) {\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Load size is inaccurate */\n        uVar13 = *pDbPage->pData;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);\nLAB_000816e0:\n        uVar11 = 0;\n        sqlite3PagerUnrefNotNull(pPg);\n      }" { comment (expression_statement "uVar13 = *pDbPage->pData;" (assignment_expression "uVar13 = *pDbPage->pData" identifier = (pointer_expression "*pDbPage->pData" * (field_expression "pDbPage->pData" identifier -> field_identifier))) ;) (expression_statement "nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" identifier = (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal))) ;) (expression_statement "memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50);" (call_expression "memcpy(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50)" identifier (argument_list "(local_40,(void *)((int)pDbPage->pData + uVar11 + 4),local_50)" ( identifier , (cast_expression "(void *)((int)pDbPage->pData + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pDbPage->pData + uVar11 + 4)" ( (binary_expression "(int)pDbPage->pData + uVar11 + 4" (binary_expression "(int)pDbPage->pData + uVar11" (cast_expression "(int)pDbPage->pData" ( (type_descriptor "int" primitive_type) ) (field_expression "pDbPage->pData" identifier -> field_identifier)) + identifier) + number_literal) ))) , identifier ))) ;) (labeled_statement "LAB_000816e0:\n        uVar11 = 0;" statement_identifier : (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;)) (expression_statement "sqlite3PagerUnrefNotNull(pPg);" (call_expression "sqlite3PagerUnrefNotNull(pPg)" identifier (argument_list "(pPg)" ( identifier ))) ;) })) }) (else_clause "else {\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }" else (compound_statement "{\n      iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);\n      if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }\n    }" { (expression_statement "iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0);" (assignment_expression "iVar8 = (*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0)" identifier = (call_expression "(*pPVar3->xGet)(pPVar3,nextPage,&pDbPage,0)" (parenthesized_expression "(*pPVar3->xGet)" ( (pointer_expression "*pPVar3->xGet" * (field_expression "pPVar3->xGet" identifier -> field_identifier)) )) (argument_list "(pPVar3,nextPage,&pDbPage,0)" ( identifier , identifier , (pointer_expression "&pDbPage" & identifier) , number_literal )))) ;) (if_statement "if (iVar8 == 0) {\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        puVar4 = (uint *)pDbPage->pData;\n        uVar13 = *puVar4;\n        nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n        iVar8 = sqlite3PagerWrite(pDbPage);\n        if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }\n        uVar11 = 0;\n        pPg = pDbPage;\n        if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;\n      }" { (expression_statement "puVar4 = (uint *)pDbPage->pData;" (assignment_expression "puVar4 = (uint *)pDbPage->pData" identifier = (cast_expression "(uint *)pDbPage->pData" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pDbPage->pData" identifier -> field_identifier))) ;) (expression_statement "uVar13 = *puVar4;" (assignment_expression "uVar13 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "nextPage = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" identifier = (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal))) ;) (expression_statement "iVar8 = sqlite3PagerWrite(pDbPage);" (assignment_expression "iVar8 = sqlite3PagerWrite(pDbPage)" identifier = (call_expression "sqlite3PagerWrite(pDbPage)" identifier (argument_list "(pDbPage)" ( identifier )))) ;) (if_statement "if (iVar8 == 0) {\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);\n        }" { (expression_statement "memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50);" (call_expression "memcpy((void *)((int)puVar4 + uVar11 + 4),local_40,local_50)" identifier (argument_list "((void *)((int)puVar4 + uVar11 + 4),local_40,local_50)" ( (cast_expression "(void *)((int)puVar4 + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar4 + uVar11 + 4)" ( (binary_expression "(int)puVar4 + uVar11 + 4" (binary_expression "(int)puVar4 + uVar11" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))) , identifier , identifier ))) ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "pPg = pDbPage;" (assignment_expression "pPg = pDbPage" identifier = identifier) ;) (if_statement "if (pDbPage != (DbPage *)0x0) goto LAB_000816e0;" if (parenthesized_expression "(pDbPage != (DbPage *)0x0)" ( (binary_expression "pDbPage != (DbPage *)0x0" identifier != (cast_expression "(DbPage *)0x0" ( (type_descriptor "DbPage *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_000816e0;" goto statement_identifier ;)) })) }))) (if_statement "if (sVar12 != 0) {\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }" if (parenthesized_expression "(sVar12 != 0)" ( (binary_expression "sVar12 != 0" identifier != number_literal) )) (compound_statement "{\n      local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));\n      local_50 = sVar12;\n      goto joined_r0x0008171a;\n    }" { (expression_statement "local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40));" (assignment_expression "local_40 = (BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40))" identifier = (cast_expression "(BtCursor *)((int)local_40->aiIdx + (local_50 - 0x40))" ( (type_descriptor "BtCursor *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_40->aiIdx + (local_50 - 0x40))" ( (binary_expression "(int)local_40->aiIdx + (local_50 - 0x40)" (cast_expression "(int)local_40->aiIdx" ( (type_descriptor "int" primitive_type) ) (field_expression "local_40->aiIdx" identifier -> field_identifier)) + (parenthesized_expression "(local_50 - 0x40)" ( (binary_expression "local_50 - 0x40" identifier - number_literal) ))) )))) ;) (expression_statement "local_50 = sVar12;" (assignment_expression "local_50 = sVar12" identifier = identifier) ;) (goto_statement "goto joined_r0x0008171a;" goto statement_identifier ;) })) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (bVar14) {\nLAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);\n  }" if (parenthesized_expression "(bVar14)" ( identifier )) (compound_statement "{\nLAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);\n  }" { (labeled_statement "LAB_00081780:\n    iVar8 = sqlite3CorruptError(0x1094f);" statement_identifier : (expression_statement "iVar8 = sqlite3CorruptError(0x1094f);" (assignment_expression "iVar8 = sqlite3CorruptError(0x1094f)" identifier = (call_expression "sqlite3CorruptError(0x1094f)" identifier (argument_list "(0x1094f)" ( number_literal )))) ;)) })) (labeled_statement "LAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar8;" return identifier ;) (labeled_statement "LAB_000814b8:\n  uVar11 = uVar11 - uVar10;" statement_identifier : (expression_statement "uVar11 = uVar11 - uVar10;" (assignment_expression "uVar11 = uVar11 - uVar10" identifier = (binary_expression "uVar11 - uVar10" identifier - identifier)) ;)) (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) (expression_statement "PVar5 = pPVar9[uVar13];" (assignment_expression "PVar5 = pPVar9[uVar13]" identifier = (subscript_expression "pPVar9[uVar13]" identifier [ identifier ])) ;) (if_statement "if (pPVar9[uVar13] == 0) {\n    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);\njoined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;\n    if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" if (parenthesized_expression "(pPVar9[uVar13] == 0)" ( (binary_expression "pPVar9[uVar13] == 0" (subscript_expression "pPVar9[uVar13]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n    iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);\njoined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;\n    if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" { (expression_statement "iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage);" (assignment_expression "iVar8 = getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage)" identifier = (call_expression "getOverflowPage(pBt,nextPage,(MemPage **)0x0,&nextPage)" identifier (argument_list "(pBt,nextPage,(MemPage **)0x0,&nextPage)" ( identifier , identifier , (cast_expression "(MemPage **)0x0" ( (type_descriptor "MemPage **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , (pointer_expression "&nextPage" & identifier) )))) ;) (labeled_statement "joined_r0x0008171a:\n    if (iVar8 != 0) goto LAB_000815e0;" statement_identifier : (if_statement "if (iVar8 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;))) (if_statement "if (nextPage != 0) {\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }" if (parenthesized_expression "(nextPage != 0)" ( (binary_expression "nextPage != 0" identifier != number_literal) )) (compound_statement "{\n      pPVar9 = pCur_00->aOverflow;\n      PVar5 = nextPage;\n      goto LAB_000814d6;\n    }" { (expression_statement "pPVar9 = pCur_00->aOverflow;" (assignment_expression "pPVar9 = pCur_00->aOverflow" identifier = (field_expression "pCur_00->aOverflow" identifier -> field_identifier)) ;) (expression_statement "PVar5 = nextPage;" (assignment_expression "PVar5 = nextPage" identifier = identifier) ;) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })) (goto_statement "goto LAB_00081780;" goto statement_identifier ;) })) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })))
(translation_unit "int FUN_00081380(void *param_1,int param_2)\n\n{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}\n\n" (function_definition "int FUN_00081380(void *param_1,int param_2)\n\n{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" primitive_type (function_declarator "FUN_00081380(void *param_1,int param_2)" identifier (parameter_list "(void *param_1,int param_2)" ( (parameter_declaration "void *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "size_t extraout_ECX;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined8 uVar13;" type_identifier identifier ;) (declaration "size_t local_50;" primitive_type identifier ;) (declaration "size_t local_4c;" primitive_type identifier ;) (declaration "void *local_40;" primitive_type (pointer_declarator "*local_40" * identifier) ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int local_24;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar13 = FUN_000196fd();" (assignment_expression "uVar13 = FUN_000196fd()" identifier = (call_expression "FUN_000196fd()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar10 = (uint)((ulonglong)uVar13 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)uVar13 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar13 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar13 >> 0x20)" ( (binary_expression "(ulonglong)uVar13 >> 0x20" (cast_expression "(ulonglong)uVar13" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar3 = (int)uVar13;" (assignment_expression "iVar3 = (int)uVar13" identifier = (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1 = *(int **)(iVar3 + 0x14);" (assignment_expression "piVar1 = *(int **)(iVar3 + 0x14)" identifier = (pointer_expression "*(int **)(iVar3 + 0x14)" * (cast_expression "(int **)(iVar3 + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "iVar7 = *(int *)(iVar3 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar3 + 0x6c)" * (cast_expression "(int *)(iVar3 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x6c)" ( (binary_expression "iVar3 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "FUN_00023170();" (call_expression "FUN_00023170()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar5 = *(int *)(iVar3 + 0x24);" (assignment_expression "iVar5 = *(int *)(iVar3 + 0x24)" identifier = (pointer_expression "*(int *)(iVar3 + 0x24)" * (cast_expression "(int *)(iVar3 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x24)" ( (binary_expression "iVar3 + 0x24" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);" (assignment_expression "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c)" identifier = (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) ;) (if_statement "if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" if (parenthesized_expression "(piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38)))" ( (binary_expression "piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))" (binary_expression "piVar1[9] - uVar8" (subscript_expression "piVar1[9]" identifier [ number_literal ]) - identifier) < (call_expression "(uint)(iVar5 - *(int *)(iVar7 + 0x38))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 - *(int *)(iVar7 + 0x38))" ( (binary_expression "iVar5 - *(int *)(iVar7 + 0x38)" identifier - (pointer_expression "*(int *)(iVar7 + 0x38)" * (cast_expression "(int *)(iVar7 + 0x38)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x38)" ( (binary_expression "iVar7 + 0x38" identifier + number_literal) ))))) )))) )) (compound_statement "{\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" { (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "local_50 = extraout_ECX;" (assignment_expression "local_50 = extraout_ECX" identifier = identifier) ;) (if_statement "if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" if (parenthesized_expression "(uVar10 < uVar8)" ( (binary_expression "uVar10 < uVar8" identifier < identifier) )) (compound_statement "{\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }" { (if_statement "if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" if (parenthesized_expression "(uVar8 < uVar10 + extraout_ECX)" ( (binary_expression "uVar8 < uVar10 + extraout_ECX" identifier < (binary_expression "uVar10 + extraout_ECX" identifier + identifier)) )) (compound_statement "{\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }" { (expression_statement "local_4c = (uVar10 - uVar8) + extraout_ECX;" (assignment_expression "local_4c = (uVar10 - uVar8) + extraout_ECX" identifier = (binary_expression "(uVar10 - uVar8) + extraout_ECX" (parenthesized_expression "(uVar10 - uVar8)" ( (binary_expression "uVar10 - uVar8" identifier - identifier) )) + identifier)) ;) (expression_statement "bVar12 = local_4c != 0;" (assignment_expression "bVar12 = local_4c != 0" identifier = (binary_expression "local_4c != 0" identifier != number_literal)) ;) (expression_statement "local_50 = uVar8 - uVar10;" (assignment_expression "local_50 = uVar8 - uVar10" identifier = (binary_expression "uVar8 - uVar10" identifier - identifier)) ;) (if_statement "if (param_2 != 0) goto LAB_00081592;" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00081592;" goto statement_identifier ;)) (labeled_statement "LAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" statement_identifier : (expression_statement "memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" (call_expression "memcpy(param_1,(void *)(uVar10 + iVar5),local_50)" identifier (argument_list "(param_1,(void *)(uVar10 + iVar5),local_50)" ( identifier , (cast_expression "(void *)(uVar10 + iVar5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + iVar5)" ( (binary_expression "uVar10 + iVar5" identifier + identifier) ))) , identifier ))) ;)) }) (else_clause "else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" else (compound_statement "{\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" { (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (if_statement "if (param_2 == 0) goto LAB_00081633;" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00081633;" goto statement_identifier ;)) (labeled_statement "LAB_00081592:\n      iVar7 = FUN_00079770();" statement_identifier : (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" identifier = (call_expression "FUN_00079770()" identifier (argument_list "()" ( )))) ;)) (if_statement "if (iVar7 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;)) (expression_statement "memcpy((void *)(uVar10 + iVar5),param_1,local_50);" (call_expression "memcpy((void *)(uVar10 + iVar5),param_1,local_50)" identifier (argument_list "((void *)(uVar10 + iVar5),param_1,local_50)" ( (cast_expression "(void *)(uVar10 + iVar5)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar10 + iVar5)" ( (binary_expression "uVar10 + iVar5" identifier + identifier) ))) , identifier , identifier ))) ;) }))) (expression_statement "local_40 = (void *)((int)param_1 + local_50);" (assignment_expression "local_40 = (void *)((int)param_1 + local_50)" identifier = (cast_expression "(void *)((int)param_1 + local_50)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + local_50)" ( (binary_expression "(int)param_1 + local_50" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "local_50 = local_4c;" (assignment_expression "local_50 = local_4c" identifier = identifier) ;) }) (else_clause "else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" else (compound_statement "{\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" { (expression_statement "uVar10 = uVar10 - uVar8;" (assignment_expression "uVar10 = uVar10 - uVar8" identifier = (binary_expression "uVar10 - uVar8" identifier - identifier)) ;) (expression_statement "bVar12 = extraout_ECX != 0;" (assignment_expression "bVar12 = extraout_ECX != 0" identifier = (binary_expression "extraout_ECX != 0" identifier != number_literal)) ;) (expression_statement "local_40 = param_1;" (assignment_expression "local_40 = param_1" identifier = identifier) ;) }))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" { (expression_statement "uVar8 = piVar1[9] - 4;" (assignment_expression "uVar8 = piVar1[9] - 4" identifier = (binary_expression "piVar1[9] - 4" (subscript_expression "piVar1[9]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));" (assignment_expression "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" identifier = (pointer_expression "*(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" * (cast_expression "(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" ( (binary_expression "iVar5 + (uint)*(ushort *)(iVar3 + 0x2c)" identifier + (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) ))))) ;) (expression_statement "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" identifier = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) (if_statement "if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" if (parenthesized_expression "((*(byte *)(iVar3 + 1) & 4) == 0)" ( (binary_expression "(*(byte *)(iVar3 + 1) & 4) == 0" (parenthesized_expression "(*(byte *)(iVar3 + 1) & 4)" ( (binary_expression "*(byte *)(iVar3 + 1) & 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }" { (expression_statement "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;" (assignment_expression "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" identifier = (binary_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" (parenthesized_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c))" ( (binary_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28))" ( (binary_expression "piVar1[9] + -5 + *(int *)(iVar3 + 0x28)" (binary_expression "piVar1[9] + -5" (subscript_expression "piVar1[9]" identifier [ number_literal ]) + number_literal) + (pointer_expression "*(int *)(iVar3 + 0x28)" * (cast_expression "(int *)(iVar3 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x28)" ( (binary_expression "iVar3 + 0x28" identifier + number_literal) ))))) )) - (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar3 + 0x2c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x2c)" ( (binary_expression "iVar3 + 0x2c" identifier + number_literal) ))))) )) / identifier)) ;) (if_statement "if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" if (parenthesized_expression "((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7))" ( (binary_expression "(iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" ( (comma_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7)" identifier = (call_expression "(**(code **)(unaff_EDI + 0xc7e31))(iVar7)" (parenthesized_expression "(**(code **)(unaff_EDI + 0xc7e31))" ( (pointer_expression "**(code **)(unaff_EDI + 0xc7e31)" * (pointer_expression "*(code **)(unaff_EDI + 0xc7e31)" * (cast_expression "(code **)(unaff_EDI + 0xc7e31)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0xc7e31)" ( (binary_expression "unaff_EDI + 0xc7e31" identifier + number_literal) ))))) )) (argument_list "(iVar7)" ( identifier )))) , (comma_expression "iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar7 = uVar4 * 4" identifier = (binary_expression "uVar4 * 4" identifier * number_literal)) , (binary_expression "iVar7 - iVar5 != 0 && iVar5 <= iVar7" (binary_expression "iVar7 - iVar5 != 0" (binary_expression "iVar7 - iVar5" identifier - identifier) != number_literal) && (binary_expression "iVar5 <= iVar7" identifier <= identifier)))) ))) )) (compound_statement "{\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }" { (expression_statement "__s = (void *)FUN_00026820();" (assignment_expression "__s = (void *)FUN_00026820()" identifier = (cast_expression "(void *)FUN_00026820()" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00026820()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" if (parenthesized_expression "(__s == (void *)0x0)" ( (binary_expression "__s == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" { (expression_statement "iVar7 = 7;" (assignment_expression "iVar7 = 7" identifier = number_literal) ;) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "*(void **)(iVar3 + 0xc) = __s;" (assignment_expression "*(void **)(iVar3 + 0xc) = __s" (pointer_expression "*(void **)(iVar3 + 0xc)" * (cast_expression "(void **)(iVar3 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" else (compound_statement "{\n        __s = *(void **)(iVar3 + 0xc);\n      }" { (expression_statement "__s = *(void **)(iVar3 + 0xc);" (assignment_expression "__s = *(void **)(iVar3 + 0xc)" identifier = (pointer_expression "*(void **)(iVar3 + 0xc)" * (cast_expression "(void **)(iVar3 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) }))) (expression_statement "memset(__s,0,uVar4 << 2);" (call_expression "memset(__s,0,uVar4 << 2)" identifier (argument_list "(__s,0,uVar4 << 2)" ( identifier , number_literal , (binary_expression "uVar4 << 2" identifier << number_literal) ))) ;) (expression_statement "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;" (assignment_expression "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) = (binary_expression "*(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" * (cast_expression "(byte *)(iVar3 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 1)" ( (binary_expression "iVar3 + 1" identifier + number_literal) )))) | number_literal)) ;) }) (else_clause "else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" else (compound_statement "{\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" { (expression_statement "uVar6 = uVar10 / uVar8;" (assignment_expression "uVar6 = uVar10 / uVar8" identifier = (binary_expression "uVar10 / uVar8" identifier / identifier)) ;) (expression_statement "uVar11 = uVar10 % uVar8;" (assignment_expression "uVar11 = uVar10 % uVar8" identifier = (binary_expression "uVar10 % uVar8" identifier % identifier)) ;) (expression_statement "uVar4 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar4 = *(uint *)(iVar7 + uVar6 * 4)" identifier = (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar6 * 4)" ( (binary_expression "iVar7 + uVar6 * 4" identifier + (binary_expression "uVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar4 != 0) goto LAB_000814a2;" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000814a2;" goto statement_identifier ;)) }))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" { (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar11 = uVar10;" (assignment_expression "uVar11 = uVar10" identifier = identifier) ;) (expression_statement "uVar4 = local_28;" (assignment_expression "uVar4 = local_28" identifier = identifier) ;) (labeled_statement "LAB_000814a2:\n      local_28 = uVar4;" statement_identifier : (expression_statement "local_28 = uVar4;" (assignment_expression "local_28 = uVar4" identifier = identifier) ;)) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" identifier = identifier) ;) (labeled_statement "LAB_000814d6:\n      local_28 = uVar10;" statement_identifier : (expression_statement "local_28 = uVar10;" (assignment_expression "local_28 = uVar10" identifier = identifier) ;)) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;" (assignment_expression "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28" (pointer_expression "*(uint *)(iVar7 + -4 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + -4 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -4 + uVar6 * 4)" ( (binary_expression "iVar7 + -4 + uVar6 * 4" (binary_expression "iVar7 + -4" identifier + number_literal) + (binary_expression "uVar6 * 4" identifier * number_literal)) )))) = identifier) ;) (if_statement "if (uVar8 <= uVar11) goto LAB_000814b8;" if (parenthesized_expression "(uVar8 <= uVar11)" ( (binary_expression "uVar8 <= uVar11" identifier <= identifier) )) (goto_statement "goto LAB_000814b8;" goto statement_identifier ;)) (expression_statement "sVar9 = 0;" (assignment_expression "sVar9 = 0" identifier = number_literal) ;) (if_statement "if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" if (parenthesized_expression "(uVar8 < local_50 + uVar11)" ( (binary_expression "uVar8 < local_50 + uVar11" identifier < (binary_expression "local_50 + uVar11" identifier + identifier)) )) (compound_statement "{\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" { (expression_statement "sVar9 = (uVar11 - uVar8) + local_50;" (assignment_expression "sVar9 = (uVar11 - uVar8) + local_50" identifier = (binary_expression "(uVar11 - uVar8) + local_50" (parenthesized_expression "(uVar11 - uVar8)" ( (binary_expression "uVar11 - uVar8" identifier - identifier) )) + identifier)) ;) (expression_statement "local_50 = uVar8 - uVar11;" (assignment_expression "local_50 = uVar8 - uVar11" identifier = (binary_expression "uVar8 - uVar11" identifier - identifier)) ;) })) (expression_statement "iVar7 = *piVar1;" (assignment_expression "iVar7 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }" { (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" identifier = (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" (parenthesized_expression "(**(code **)(iVar7 + 200))" ( (pointer_expression "**(code **)(iVar7 + 200)" * (pointer_expression "*(code **)(iVar7 + 200)" * (cast_expression "(code **)(iVar7 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 200)" ( (binary_expression "iVar7 + 200" identifier + number_literal) ))))) )) (argument_list "(iVar7,local_28,&local_24,2)" ( identifier , identifier , (pointer_expression "&local_24" & identifier) , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" { (expression_statement "uVar10 = **(uint **)(local_24 + 4);" (assignment_expression "uVar10 = **(uint **)(local_24 + 4)" identifier = (pointer_expression "**(uint **)(local_24 + 4)" * (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) )))))) ;) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" identifier = (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" ( (binary_expression "uVar10 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" ( (binary_expression "uVar10 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar10 << 0x18" identifier << number_literal))) ;) (expression_statement "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);" (call_expression "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" identifier (argument_list "(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" ( identifier , (cast_expression "(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)*(uint **)(local_24 + 4) + uVar11 + 4)" ( (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11 + 4" (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11" (cast_expression "(int)*(uint **)(local_24 + 4)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) ))))) + identifier) + number_literal) ))) , identifier ))) ;) (labeled_statement "LAB_000816e0:\n          uVar11 = 0;" statement_identifier : (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;)) (expression_statement "FUN_0001b1a0();" (call_expression "FUN_0001b1a0()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" else (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" { (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" identifier = (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" (parenthesized_expression "(**(code **)(iVar7 + 200))" ( (pointer_expression "**(code **)(iVar7 + 200)" * (pointer_expression "*(code **)(iVar7 + 200)" * (cast_expression "(code **)(iVar7 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar7 + 200)" ( (binary_expression "iVar7 + 200" identifier + number_literal) ))))) )) (argument_list "(iVar7,local_28,&local_24,0)" ( identifier , identifier , (pointer_expression "&local_24" & identifier) , number_literal )))) ;) (if_statement "if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" { (expression_statement "puVar2 = *(uint **)(local_24 + 4);" (assignment_expression "puVar2 = *(uint **)(local_24 + 4)" identifier = (pointer_expression "*(uint **)(local_24 + 4)" * (cast_expression "(uint **)(local_24 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_24 + 4)" ( (binary_expression "local_24 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = *puVar2;" (assignment_expression "uVar10 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" identifier = (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" ( (binary_expression "uVar10 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" ( (binary_expression "uVar10 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar10 << 0x18" identifier << number_literal))) ;) (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" identifier = (call_expression "FUN_00079770()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" { (expression_statement "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);" (call_expression "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" identifier (argument_list "((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" ( (cast_expression "(void *)((int)puVar2 + uVar11 + 4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + uVar11 + 4)" ( (binary_expression "(int)puVar2 + uVar11 + 4" (binary_expression "(int)puVar2 + uVar11" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))) , identifier , identifier ))) ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if (local_24 != 0) goto LAB_000816e0;" if (parenthesized_expression "(local_24 != 0)" ( (binary_expression "local_24 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000816e0;" goto statement_identifier ;)) })) }))) (if_statement "if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" if (parenthesized_expression "(sVar9 != 0)" ( (binary_expression "sVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" { (expression_statement "local_40 = (void *)((int)local_40 + local_50);" (assignment_expression "local_40 = (void *)((int)local_40 + local_50)" identifier = (cast_expression "(void *)((int)local_40 + local_50)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_40 + local_50)" ( (binary_expression "(int)local_40 + local_50" (cast_expression "(int)local_40" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "local_50 = sVar9;" (assignment_expression "local_50 = sVar9" identifier = identifier) ;) (goto_statement "goto joined_r0x0008171a;" goto statement_identifier ;) })) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;) })) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" { (labeled_statement "LAB_00081780:\n      iVar7 = FUN_00051360();" statement_identifier : (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" identifier = (call_expression "FUN_00051360()" identifier (argument_list "()" ( )))) ;)) })) })) (labeled_statement "LAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    FUN_000f4bf0();\n  }" { (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar7;" return identifier ;) (labeled_statement "LAB_000814b8:\n  uVar11 = uVar11 - uVar8;" statement_identifier : (expression_statement "uVar11 = uVar11 - uVar8;" (assignment_expression "uVar11 = uVar11 - uVar8" identifier = (binary_expression "uVar11 - uVar8" identifier - identifier)) ;)) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar10 = *(uint *)(iVar7 + uVar6 * 4)" identifier = (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" * (cast_expression "(uint *)(iVar7 + uVar6 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + uVar6 * 4)" ( (binary_expression "iVar7 + uVar6 * 4" identifier + (binary_expression "uVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" { (expression_statement "iVar7 = FUN_000519a0(&local_28);" (assignment_expression "iVar7 = FUN_000519a0(&local_28)" identifier = (call_expression "FUN_000519a0(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (labeled_statement "joined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;" statement_identifier : (if_statement "if (iVar7 != 0) goto LAB_000815e0;" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000815e0;" goto statement_identifier ;))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" { (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" identifier = (pointer_expression "*(int *)(iVar3 + 0xc)" * (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" identifier = identifier) ;) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })) (goto_statement "goto LAB_00081780;" goto statement_identifier ;) })) (goto_statement "goto LAB_000814d6;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) , IDENT ))) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) , IDENT , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) - (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) / IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT )))) , (comma_expression (assignment_expression IDENT = (binary_expression IDENT * LIT)) , (binary_expression (binary_expression (binary_expression IDENT - IDENT) != LIT) && (binary_expression IDENT <= IDENT)))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT % IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + IDENT) + LIT) ))) , IDENT ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) ))) , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) })) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })))
(function_definition "int FUN_00081380(void *param_1,int param_2)\n\n{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" (primitive_type "int") (function_declarator "FUN_00081380(void *param_1,int param_2)" (identifier "FUN_00081380") (parameter_list "(void *param_1,int param_2)" (( "(") (parameter_declaration "void *param_1" (primitive_type "void") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int *piVar1;\n  uint *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  void *__s;\n  size_t extraout_ECX;\n  uint uVar8;\n  size_t sVar9;\n  uint uVar10;\n  uint uVar11;\n  int unaff_EDI;\n  int in_GS_OFFSET;\n  bool bVar12;\n  undefined8 uVar13;\n  size_t local_50;\n  size_t local_4c;\n  void *local_40;\n  uint local_28;\n  int local_24;\n  int local_20;\n  \n  uVar13 = FUN_000196fd();\n  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);\n  iVar3 = (int)uVar13;\n  piVar1 = *(int **)(iVar3 + 0x14);\n  iVar7 = *(int *)(iVar3 + 0x6c);\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  FUN_00023170();\n  iVar5 = *(int *)(iVar3 + 0x24);\n  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);\n  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }\n  local_50 = extraout_ECX;\n  if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }\n  iVar7 = 0;\n  if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }\nLAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }\n  return iVar7;\nLAB_000814b8:\n  uVar11 = uVar11 - uVar8;\n  iVar7 = *(int *)(iVar3 + 0xc);\n  uVar10 = *(uint *)(iVar7 + uVar6 * 4);\n  if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }\n  goto LAB_000814d6;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "void *__s;" (primitive_type "void") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "size_t extraout_ECX;" (primitive_type "size_t") (identifier "extraout_ECX") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "size_t sVar9;" (primitive_type "size_t") (identifier "sVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "undefined8 uVar13;" (type_identifier "undefined8") (identifier "uVar13") (; ";")) (declaration "size_t local_50;" (primitive_type "size_t") (identifier "local_50") (; ";")) (declaration "size_t local_4c;" (primitive_type "size_t") (identifier "local_4c") (; ";")) (declaration "void *local_40;" (primitive_type "void") (pointer_declarator "*local_40" (* "*") (identifier "local_40")) (; ";")) (declaration "uint local_28;" (type_identifier "uint") (identifier "local_28") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "uVar13 = FUN_000196fd();" (assignment_expression "uVar13 = FUN_000196fd()" (identifier "uVar13") (= "=") (call_expression "FUN_000196fd()" (identifier "FUN_000196fd") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar10 = (uint)((ulonglong)uVar13 >> 0x20);" (assignment_expression "uVar10 = (uint)((ulonglong)uVar13 >> 0x20)" (identifier "uVar10") (= "=") (call_expression "(uint)((ulonglong)uVar13 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar13 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar13 >> 0x20" (cast_expression "(ulonglong)uVar13" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar13")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "iVar3 = (int)uVar13;" (assignment_expression "iVar3 = (int)uVar13" (identifier "iVar3") (= "=") (cast_expression "(int)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar13"))) (; ";")) (expression_statement "piVar1 = *(int **)(iVar3 + 0x14);" (assignment_expression "piVar1 = *(int **)(iVar3 + 0x14)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(iVar3 + 0x14)" (* "*") (cast_expression "(int **)(iVar3 + 0x14)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0x14)" (( "(") (binary_expression "iVar3 + 0x14" (identifier "iVar3") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "iVar7 = *(int *)(iVar3 + 0x6c);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0x6c)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar3 + 0x6c)" (* "*") (cast_expression "(int *)(iVar3 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x6c)" (( "(") (binary_expression "iVar3 + 0x6c" (identifier "iVar3") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "FUN_00023170();" (call_expression "FUN_00023170()" (identifier "FUN_00023170") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar5 = *(int *)(iVar3 + 0x24);" (assignment_expression "iVar5 = *(int *)(iVar3 + 0x24)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar3 + 0x24)" (* "*") (cast_expression "(int *)(iVar3 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x24)" (( "(") (binary_expression "iVar3 + 0x24" (identifier "iVar3") (+ "+") (number_literal "0x24")) () ")"))))) (; ";")) (expression_statement "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);" (assignment_expression "uVar8 = (uint)*(ushort *)(iVar3 + 0x2c)" (identifier "uVar8") (= "=") (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(iVar3 + 0x2c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x2c)" (( "(") (binary_expression "iVar3 + 0x2c" (identifier "iVar3") (+ "+") (number_literal "0x2c")) () ")"))))) (; ";")) (if_statement "if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" (if "if") (parenthesized_expression "(piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38)))" (( "(") (binary_expression "piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))" (binary_expression "piVar1[9] - uVar8" (subscript_expression "piVar1[9]" (identifier "piVar1") ([ "[") (number_literal "9") (] "]")) (- "-") (identifier "uVar8")) (< "<") (call_expression "(uint)(iVar5 - *(int *)(iVar7 + 0x38))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar5 - *(int *)(iVar7 + 0x38))" (( "(") (binary_expression "iVar5 - *(int *)(iVar7 + 0x38)" (identifier "iVar5") (- "-") (pointer_expression "*(int *)(iVar7 + 0x38)" (* "*") (cast_expression "(int *)(iVar7 + 0x38)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x38)" (( "(") (binary_expression "iVar7 + 0x38" (identifier "iVar7") (+ "+") (number_literal "0x38")) () ")"))))) () ")")))) () ")")) (compound_statement "{\n    iVar7 = FUN_00051360();\n    goto LAB_000815e0;\n  }" ({ "{") (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" (identifier "iVar7") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";")) (goto_statement "goto LAB_000815e0;" (goto "goto") (statement_identifier "LAB_000815e0") (; ";")) (} "}"))) (expression_statement "local_50 = extraout_ECX;" (assignment_expression "local_50 = extraout_ECX" (identifier "local_50") (= "=") (identifier "extraout_ECX")) (; ";")) (if_statement "if (uVar10 < uVar8) {\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }\n  else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" (if "if") (parenthesized_expression "(uVar10 < uVar8)" (( "(") (binary_expression "uVar10 < uVar8" (identifier "uVar10") (< "<") (identifier "uVar8")) () ")")) (compound_statement "{\n    if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }\n    local_40 = (void *)((int)param_1 + local_50);\n    uVar10 = 0;\n    local_50 = local_4c;\n  }" ({ "{") (if_statement "if (uVar8 < uVar10 + extraout_ECX) {\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }\n    else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" (if "if") (parenthesized_expression "(uVar8 < uVar10 + extraout_ECX)" (( "(") (binary_expression "uVar8 < uVar10 + extraout_ECX" (identifier "uVar8") (< "<") (binary_expression "uVar10 + extraout_ECX" (identifier "uVar10") (+ "+") (identifier "extraout_ECX"))) () ")")) (compound_statement "{\n      local_4c = (uVar10 - uVar8) + extraout_ECX;\n      bVar12 = local_4c != 0;\n      local_50 = uVar8 - uVar10;\n      if (param_2 != 0) goto LAB_00081592;\nLAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);\n    }" ({ "{") (expression_statement "local_4c = (uVar10 - uVar8) + extraout_ECX;" (assignment_expression "local_4c = (uVar10 - uVar8) + extraout_ECX" (identifier "local_4c") (= "=") (binary_expression "(uVar10 - uVar8) + extraout_ECX" (parenthesized_expression "(uVar10 - uVar8)" (( "(") (binary_expression "uVar10 - uVar8" (identifier "uVar10") (- "-") (identifier "uVar8")) () ")")) (+ "+") (identifier "extraout_ECX"))) (; ";")) (expression_statement "bVar12 = local_4c != 0;" (assignment_expression "bVar12 = local_4c != 0" (identifier "bVar12") (= "=") (binary_expression "local_4c != 0" (identifier "local_4c") (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "local_50 = uVar8 - uVar10;" (assignment_expression "local_50 = uVar8 - uVar10" (identifier "local_50") (= "=") (binary_expression "uVar8 - uVar10" (identifier "uVar8") (- "-") (identifier "uVar10"))) (; ";")) (if_statement "if (param_2 != 0) goto LAB_00081592;" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00081592;" (goto "goto") (statement_identifier "LAB_00081592") (; ";"))) (labeled_statement "LAB_00081633:\n      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" (statement_identifier "LAB_00081633") (: ":") (expression_statement "memcpy(param_1,(void *)(uVar10 + iVar5),local_50);" (call_expression "memcpy(param_1,(void *)(uVar10 + iVar5),local_50)" (identifier "memcpy") (argument_list "(param_1,(void *)(uVar10 + iVar5),local_50)" (( "(") (identifier "param_1") (, ",") (cast_expression "(void *)(uVar10 + iVar5)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar10 + iVar5)" (( "(") (binary_expression "uVar10 + iVar5" (identifier "uVar10") (+ "+") (identifier "iVar5")) () ")"))) (, ",") (identifier "local_50") () ")"))) (; ";"))) (} "}")) (else_clause "else {\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" (else "else") (compound_statement "{\n      bVar12 = false;\n      local_4c = 0;\n      if (param_2 == 0) goto LAB_00081633;\nLAB_00081592:\n      iVar7 = FUN_00079770();\n      if (iVar7 != 0) goto LAB_000815e0;\n      memcpy((void *)(uVar10 + iVar5),param_1,local_50);\n    }" ({ "{") (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" (identifier "bVar12") (= "=") (false "false")) (; ";")) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" (identifier "local_4c") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_2 == 0) goto LAB_00081633;" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00081633;" (goto "goto") (statement_identifier "LAB_00081633") (; ";"))) (labeled_statement "LAB_00081592:\n      iVar7 = FUN_00079770();" (statement_identifier "LAB_00081592") (: ":") (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" (identifier "iVar7") (= "=") (call_expression "FUN_00079770()" (identifier "FUN_00079770") (argument_list "()" (( "(") () ")")))) (; ";"))) (if_statement "if (iVar7 != 0) goto LAB_000815e0;" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000815e0;" (goto "goto") (statement_identifier "LAB_000815e0") (; ";"))) (expression_statement "memcpy((void *)(uVar10 + iVar5),param_1,local_50);" (call_expression "memcpy((void *)(uVar10 + iVar5),param_1,local_50)" (identifier "memcpy") (argument_list "((void *)(uVar10 + iVar5),param_1,local_50)" (( "(") (cast_expression "(void *)(uVar10 + iVar5)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar10 + iVar5)" (( "(") (binary_expression "uVar10 + iVar5" (identifier "uVar10") (+ "+") (identifier "iVar5")) () ")"))) (, ",") (identifier "param_1") (, ",") (identifier "local_50") () ")"))) (; ";")) (} "}")))) (expression_statement "local_40 = (void *)((int)param_1 + local_50);" (assignment_expression "local_40 = (void *)((int)param_1 + local_50)" (identifier "local_40") (= "=") (cast_expression "(void *)((int)param_1 + local_50)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + local_50)" (( "(") (binary_expression "(int)param_1 + local_50" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (identifier "local_50")) () ")")))) (; ";")) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" (identifier "uVar10") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = local_4c;" (assignment_expression "local_50 = local_4c" (identifier "local_50") (= "=") (identifier "local_4c")) (; ";")) (} "}")) (else_clause "else {\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" (else "else") (compound_statement "{\n    uVar10 = uVar10 - uVar8;\n    bVar12 = extraout_ECX != 0;\n    local_40 = param_1;\n  }" ({ "{") (expression_statement "uVar10 = uVar10 - uVar8;" (assignment_expression "uVar10 = uVar10 - uVar8" (identifier "uVar10") (= "=") (binary_expression "uVar10 - uVar8" (identifier "uVar10") (- "-") (identifier "uVar8"))) (; ";")) (expression_statement "bVar12 = extraout_ECX != 0;" (assignment_expression "bVar12 = extraout_ECX != 0" (identifier "bVar12") (= "=") (binary_expression "extraout_ECX != 0" (identifier "extraout_ECX") (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "local_40 = param_1;" (assignment_expression "local_40 = param_1" (identifier "local_40") (= "=") (identifier "param_1")) (; ";")) (} "}")))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (if_statement "if (bVar12) {\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\n    uVar8 = piVar1[9] - 4;\n    iVar7 = *(int *)(iVar3 + 0xc);\n    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));\n    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n    if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }\n    iVar7 = 0;\n    if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }\n  }" ({ "{") (expression_statement "uVar8 = piVar1[9] - 4;" (assignment_expression "uVar8 = piVar1[9] - 4" (identifier "uVar8") (= "=") (binary_expression "piVar1[9] - 4" (subscript_expression "piVar1[9]" (identifier "piVar1") ([ "[") (number_literal "9") (] "]")) (- "-") (number_literal "4"))) (; ";")) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));" (assignment_expression "uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" (* "*") (cast_expression "(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c))" (( "(") (binary_expression "iVar5 + (uint)*(ushort *)(iVar3 + 0x2c)" (identifier "iVar5") (+ "+") (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(iVar3 + 0x2c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x2c)" (( "(") (binary_expression "iVar3 + 0x2c" (identifier "iVar3") (+ "+") (number_literal "0x2c")) () ")"))))) () ")"))))) (; ";")) (expression_statement "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (identifier "local_28") (= "=") (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" (( "(") (binary_expression "uVar4 & 0xff0000" (identifier "uVar4") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" (( "(") (binary_expression "uVar4 & 0xff00" (identifier "uVar4") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar4 << 0x18" (identifier "uVar4") (<< "<<") (number_literal "0x18")))) (; ";")) (if_statement "if ((*(byte *)(iVar3 + 1) & 4) == 0) {\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }\n    else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" (if "if") (parenthesized_expression "((*(byte *)(iVar3 + 1) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(iVar3 + 1) & 4) == 0" (parenthesized_expression "(*(byte *)(iVar3 + 1) & 4)" (( "(") (binary_expression "*(byte *)(iVar3 + 1) & 4" (pointer_expression "*(byte *)(iVar3 + 1)" (* "*") (cast_expression "(byte *)(iVar3 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 1)" (( "(") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;\n      if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }\n      memset(__s,0,uVar4 << 2);\n      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;\n    }" ({ "{") (expression_statement "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;" (assignment_expression "uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" (identifier "uVar4") (= "=") (binary_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8" (parenthesized_expression "((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c))" (( "(") (binary_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(piVar1[9] + -5 + *(int *)(iVar3 + 0x28))" (( "(") (binary_expression "piVar1[9] + -5 + *(int *)(iVar3 + 0x28)" (binary_expression "piVar1[9] + -5" (subscript_expression "piVar1[9]" (identifier "piVar1") ([ "[") (number_literal "9") (] "]")) (+ "+") (number_literal "-5")) (+ "+") (pointer_expression "*(int *)(iVar3 + 0x28)" (* "*") (cast_expression "(int *)(iVar3 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x28)" (( "(") (binary_expression "iVar3 + 0x28" (identifier "iVar3") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (- "-") (binary_expression "(uint)*(ushort *)(iVar3 + 0x2c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(iVar3 + 0x2c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x2c)" (( "(") (binary_expression "iVar3 + 0x2c" (identifier "iVar3") (+ "+") (number_literal "0x2c")) () ")"))))) () ")")) (/ "/") (identifier "uVar8"))) (; ";")) (if_statement "if ((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }\n      else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" (if "if") (parenthesized_expression "((iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7))" (( "(") (binary_expression "(iVar7 == 0) ||\n         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7)" (( "(") (comma_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7)" (identifier "iVar5") (= "=") (call_expression "(**(code **)(unaff_EDI + 0xc7e31))(iVar7)" (parenthesized_expression "(**(code **)(unaff_EDI + 0xc7e31))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0xc7e31)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0xc7e31)" (* "*") (cast_expression "(code **)(unaff_EDI + 0xc7e31)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0xc7e31)" (( "(") (binary_expression "unaff_EDI + 0xc7e31" (identifier "unaff_EDI") (+ "+") (number_literal "0xc7e31")) () ")"))))) () ")")) (argument_list "(iVar7)" (( "(") (identifier "iVar7") () ")")))) (, ",") (comma_expression "iVar7 = uVar4 * 4,\n         iVar7 - iVar5 != 0 && iVar5 <= iVar7" (assignment_expression "iVar7 = uVar4 * 4" (identifier "iVar7") (= "=") (binary_expression "uVar4 * 4" (identifier "uVar4") (* "*") (number_literal "4"))) (, ",") (binary_expression "iVar7 - iVar5 != 0 && iVar5 <= iVar7" (binary_expression "iVar7 - iVar5 != 0" (binary_expression "iVar7 - iVar5" (identifier "iVar7") (- "-") (identifier "iVar5")) (!= "!=") (number_literal "0")) (&& "&&") (binary_expression "iVar5 <= iVar7" (identifier "iVar5") (<= "<=") (identifier "iVar7"))))) () ")"))) () ")")) (compound_statement "{\n        __s = (void *)FUN_00026820();\n        if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }\n        *(void **)(iVar3 + 0xc) = __s;\n      }" ({ "{") (expression_statement "__s = (void *)FUN_00026820();" (assignment_expression "__s = (void *)FUN_00026820()" (identifier "__s") (= "=") (cast_expression "(void *)FUN_00026820()" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00026820()" (identifier "FUN_00026820") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (__s == (void *)0x0) {\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" (if "if") (parenthesized_expression "(__s == (void *)0x0)" (( "(") (binary_expression "__s == (void *)0x0" (identifier "__s") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          iVar7 = 7;\n          goto LAB_000815e0;\n        }" ({ "{") (expression_statement "iVar7 = 7;" (assignment_expression "iVar7 = 7" (identifier "iVar7") (= "=") (number_literal "7")) (; ";")) (goto_statement "goto LAB_000815e0;" (goto "goto") (statement_identifier "LAB_000815e0") (; ";")) (} "}"))) (expression_statement "*(void **)(iVar3 + 0xc) = __s;" (assignment_expression "*(void **)(iVar3 + 0xc) = __s" (pointer_expression "*(void **)(iVar3 + 0xc)" (* "*") (cast_expression "(void **)(iVar3 + 0xc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "__s")) (; ";")) (} "}")) (else_clause "else {\n        __s = *(void **)(iVar3 + 0xc);\n      }" (else "else") (compound_statement "{\n        __s = *(void **)(iVar3 + 0xc);\n      }" ({ "{") (expression_statement "__s = *(void **)(iVar3 + 0xc);" (assignment_expression "__s = *(void **)(iVar3 + 0xc)" (identifier "__s") (= "=") (pointer_expression "*(void **)(iVar3 + 0xc)" (* "*") (cast_expression "(void **)(iVar3 + 0xc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")))) (expression_statement "memset(__s,0,uVar4 << 2);" (call_expression "memset(__s,0,uVar4 << 2)" (identifier "memset") (argument_list "(__s,0,uVar4 << 2)" (( "(") (identifier "__s") (, ",") (number_literal "0") (, ",") (binary_expression "uVar4 << 2" (identifier "uVar4") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;" (assignment_expression "*(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" (* "*") (cast_expression "(byte *)(iVar3 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 1)" (( "(") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1")) () ")")))) (= "=") (binary_expression "*(byte *)(iVar3 + 1) | 4" (pointer_expression "*(byte *)(iVar3 + 1)" (* "*") (cast_expression "(byte *)(iVar3 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 1)" (( "(") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1")) () ")")))) (| "|") (number_literal "4"))) (; ";")) (} "}")) (else_clause "else {\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" (else "else") (compound_statement "{\n      uVar6 = uVar10 / uVar8;\n      uVar11 = uVar10 % uVar8;\n      uVar4 = *(uint *)(iVar7 + uVar6 * 4);\n      if (uVar4 != 0) goto LAB_000814a2;\n    }" ({ "{") (expression_statement "uVar6 = uVar10 / uVar8;" (assignment_expression "uVar6 = uVar10 / uVar8" (identifier "uVar6") (= "=") (binary_expression "uVar10 / uVar8" (identifier "uVar10") (/ "/") (identifier "uVar8"))) (; ";")) (expression_statement "uVar11 = uVar10 % uVar8;" (assignment_expression "uVar11 = uVar10 % uVar8" (identifier "uVar11") (= "=") (binary_expression "uVar10 % uVar8" (identifier "uVar10") (% "%") (identifier "uVar8"))) (; ";")) (expression_statement "uVar4 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar4 = *(uint *)(iVar7 + uVar6 * 4)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" (* "*") (cast_expression "(uint *)(iVar7 + uVar6 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + uVar6 * 4)" (( "(") (binary_expression "iVar7 + uVar6 * 4" (identifier "iVar7") (+ "+") (binary_expression "uVar6 * 4" (identifier "uVar6") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (uVar4 != 0) goto LAB_000814a2;" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000814a2;" (goto "goto") (statement_identifier "LAB_000814a2") (; ";"))) (} "}")))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" (if "if") (parenthesized_expression "(local_28 != 0)" (( "(") (binary_expression "local_28 != 0" (identifier "local_28") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar6 = 0;\n      uVar11 = uVar10;\n      uVar4 = local_28;\nLAB_000814a2:\n      local_28 = uVar4;\n      uVar10 = local_28;\nLAB_000814d6:\n      local_28 = uVar10;\n      uVar6 = uVar6 + 1;\n      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;\n      if (uVar8 <= uVar11) goto LAB_000814b8;\n      sVar9 = 0;\n      if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }\n      iVar7 = *piVar1;\n      if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }\n      if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }\n      goto LAB_000815e0;\n    }" ({ "{") (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar11 = uVar10;" (assignment_expression "uVar11 = uVar10" (identifier "uVar11") (= "=") (identifier "uVar10")) (; ";")) (expression_statement "uVar4 = local_28;" (assignment_expression "uVar4 = local_28" (identifier "uVar4") (= "=") (identifier "local_28")) (; ";")) (labeled_statement "LAB_000814a2:\n      local_28 = uVar4;" (statement_identifier "LAB_000814a2") (: ":") (expression_statement "local_28 = uVar4;" (assignment_expression "local_28 = uVar4" (identifier "local_28") (= "=") (identifier "uVar4")) (; ";"))) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" (identifier "uVar10") (= "=") (identifier "local_28")) (; ";")) (labeled_statement "LAB_000814d6:\n      local_28 = uVar10;" (statement_identifier "LAB_000814d6") (: ":") (expression_statement "local_28 = uVar10;" (assignment_expression "local_28 = uVar10" (identifier "local_28") (= "=") (identifier "uVar10")) (; ";"))) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;" (assignment_expression "*(uint *)(iVar7 + -4 + uVar6 * 4) = local_28" (pointer_expression "*(uint *)(iVar7 + -4 + uVar6 * 4)" (* "*") (cast_expression "(uint *)(iVar7 + -4 + uVar6 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + -4 + uVar6 * 4)" (( "(") (binary_expression "iVar7 + -4 + uVar6 * 4" (binary_expression "iVar7 + -4" (identifier "iVar7") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "uVar6 * 4" (identifier "uVar6") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "local_28")) (; ";")) (if_statement "if (uVar8 <= uVar11) goto LAB_000814b8;" (if "if") (parenthesized_expression "(uVar8 <= uVar11)" (( "(") (binary_expression "uVar8 <= uVar11" (identifier "uVar8") (<= "<=") (identifier "uVar11")) () ")")) (goto_statement "goto LAB_000814b8;" (goto "goto") (statement_identifier "LAB_000814b8") (; ";"))) (expression_statement "sVar9 = 0;" (assignment_expression "sVar9 = 0" (identifier "sVar9") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar8 < local_50 + uVar11) {\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" (if "if") (parenthesized_expression "(uVar8 < local_50 + uVar11)" (( "(") (binary_expression "uVar8 < local_50 + uVar11" (identifier "uVar8") (< "<") (binary_expression "local_50 + uVar11" (identifier "local_50") (+ "+") (identifier "uVar11"))) () ")")) (compound_statement "{\n        sVar9 = (uVar11 - uVar8) + local_50;\n        local_50 = uVar8 - uVar11;\n      }" ({ "{") (expression_statement "sVar9 = (uVar11 - uVar8) + local_50;" (assignment_expression "sVar9 = (uVar11 - uVar8) + local_50" (identifier "sVar9") (= "=") (binary_expression "(uVar11 - uVar8) + local_50" (parenthesized_expression "(uVar11 - uVar8)" (( "(") (binary_expression "uVar11 - uVar8" (identifier "uVar11") (- "-") (identifier "uVar8")) () ")")) (+ "+") (identifier "local_50"))) (; ";")) (expression_statement "local_50 = uVar8 - uVar11;" (assignment_expression "local_50 = uVar8 - uVar11" (identifier "local_50") (= "=") (binary_expression "uVar8 - uVar11" (identifier "uVar8") (- "-") (identifier "uVar11"))) (; ";")) (} "}"))) (expression_statement "iVar7 = *piVar1;" (assignment_expression "iVar7 = *piVar1" (identifier "iVar7") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (if_statement "if (param_2 == 0) {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }\n      else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);\n        if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }\n      }" ({ "{") (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" (identifier "iVar7") (= "=") (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2)" (parenthesized_expression "(**(code **)(iVar7 + 200))" (( "(") (pointer_expression "**(code **)(iVar7 + 200)" (* "*") (pointer_expression "*(code **)(iVar7 + 200)" (* "*") (cast_expression "(code **)(iVar7 + 200)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar7 + 200)" (( "(") (binary_expression "iVar7 + 200" (identifier "iVar7") (+ "+") (number_literal "200")) () ")"))))) () ")")) (argument_list "(iVar7,local_28,&local_24,2)" (( "(") (identifier "iVar7") (, ",") (identifier "local_28") (, ",") (pointer_expression "&local_24" (& "&") (identifier "local_24")) (, ",") (number_literal "2") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar10 = **(uint **)(local_24 + 4);\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);\nLAB_000816e0:\n          uVar11 = 0;\n          FUN_0001b1a0();\n        }" ({ "{") (expression_statement "uVar10 = **(uint **)(local_24 + 4);" (assignment_expression "uVar10 = **(uint **)(local_24 + 4)" (identifier "uVar10") (= "=") (pointer_expression "**(uint **)(local_24 + 4)" (* "*") (pointer_expression "*(uint **)(local_24 + 4)" (* "*") (cast_expression "(uint **)(local_24 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_24 + 4)" (( "(") (binary_expression "local_24 + 4" (identifier "local_24") (+ "+") (number_literal "4")) () ")")))))) (; ";")) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (identifier "local_28") (= "=") (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" (identifier "uVar10") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" (( "(") (binary_expression "uVar10 & 0xff0000" (identifier "uVar10") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" (( "(") (binary_expression "uVar10 & 0xff00" (identifier "uVar10") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar10 << 0x18" (identifier "uVar10") (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);" (call_expression "memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" (identifier "memcpy") (argument_list "(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50)" (( "(") (identifier "local_40") (, ",") (cast_expression "(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)*(uint **)(local_24 + 4) + uVar11 + 4)" (( "(") (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11 + 4" (binary_expression "(int)*(uint **)(local_24 + 4) + uVar11" (cast_expression "(int)*(uint **)(local_24 + 4)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(uint **)(local_24 + 4)" (* "*") (cast_expression "(uint **)(local_24 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_24 + 4)" (( "(") (binary_expression "local_24 + 4" (identifier "local_24") (+ "+") (number_literal "4")) () ")"))))) (+ "+") (identifier "uVar11")) (+ "+") (number_literal "4")) () ")"))) (, ",") (identifier "local_50") () ")"))) (; ";")) (labeled_statement "LAB_000816e0:\n          uVar11 = 0;" (statement_identifier "LAB_000816e0") (: ":") (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";"))) (expression_statement "FUN_0001b1a0();" (call_expression "FUN_0001b1a0()" (identifier "FUN_0001b1a0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" (else "else") (compound_statement "{\n        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);\n        if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }\n      }" ({ "{") (expression_statement "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);" (assignment_expression "iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" (identifier "iVar7") (= "=") (call_expression "(**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0)" (parenthesized_expression "(**(code **)(iVar7 + 200))" (( "(") (pointer_expression "**(code **)(iVar7 + 200)" (* "*") (pointer_expression "*(code **)(iVar7 + 200)" (* "*") (cast_expression "(code **)(iVar7 + 200)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar7 + 200)" (( "(") (binary_expression "iVar7 + 200" (identifier "iVar7") (+ "+") (number_literal "200")) () ")"))))) () ")")) (argument_list "(iVar7,local_28,&local_24,0)" (( "(") (identifier "iVar7") (, ",") (identifier "local_28") (, ",") (pointer_expression "&local_24" (& "&") (identifier "local_24")) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          puVar2 = *(uint **)(local_24 + 4);\n          uVar10 = *puVar2;\n          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;\n          iVar7 = FUN_00079770();\n          if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }\n          uVar11 = 0;\n          if (local_24 != 0) goto LAB_000816e0;\n        }" ({ "{") (expression_statement "puVar2 = *(uint **)(local_24 + 4);" (assignment_expression "puVar2 = *(uint **)(local_24 + 4)" (identifier "puVar2") (= "=") (pointer_expression "*(uint **)(local_24 + 4)" (* "*") (cast_expression "(uint **)(local_24 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_24 + 4)" (( "(") (binary_expression "local_24 + 4" (identifier "local_24") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar10 = *puVar2;" (assignment_expression "uVar10 = *puVar2" (identifier "uVar10") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18;" (assignment_expression "local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (identifier "local_28") (= "=") (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |\n                     uVar10 << 0x18" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8" (binary_expression "uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8" (binary_expression "uVar10 >> 0x18" (identifier "uVar10") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar10 & 0xff0000) >> 8" (parenthesized_expression "(uVar10 & 0xff0000)" (( "(") (binary_expression "uVar10 & 0xff0000" (identifier "uVar10") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar10 & 0xff00) << 8" (parenthesized_expression "(uVar10 & 0xff00)" (( "(") (binary_expression "uVar10 & 0xff00" (identifier "uVar10") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar10 << 0x18" (identifier "uVar10") (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "iVar7 = FUN_00079770();" (assignment_expression "iVar7 = FUN_00079770()" (identifier "iVar7") (= "=") (call_expression "FUN_00079770()" (identifier "FUN_00079770") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar7 == 0) {\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);\n          }" ({ "{") (expression_statement "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);" (call_expression "memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" (identifier "memcpy") (argument_list "((void *)((int)puVar2 + uVar11 + 4),local_40,local_50)" (( "(") (cast_expression "(void *)((int)puVar2 + uVar11 + 4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar2 + uVar11 + 4)" (( "(") (binary_expression "(int)puVar2 + uVar11 + 4" (binary_expression "(int)puVar2 + uVar11" (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2")) (+ "+") (identifier "uVar11")) (+ "+") (number_literal "4")) () ")"))) (, ",") (identifier "local_40") (, ",") (identifier "local_50") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if (local_24 != 0) goto LAB_000816e0;" (if "if") (parenthesized_expression "(local_24 != 0)" (( "(") (binary_expression "local_24 != 0" (identifier "local_24") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000816e0;" (goto "goto") (statement_identifier "LAB_000816e0") (; ";"))) (} "}"))) (} "}")))) (if_statement "if (sVar9 != 0) {\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" (if "if") (parenthesized_expression "(sVar9 != 0)" (( "(") (binary_expression "sVar9 != 0" (identifier "sVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        local_40 = (void *)((int)local_40 + local_50);\n        local_50 = sVar9;\n        goto joined_r0x0008171a;\n      }" ({ "{") (expression_statement "local_40 = (void *)((int)local_40 + local_50);" (assignment_expression "local_40 = (void *)((int)local_40 + local_50)" (identifier "local_40") (= "=") (cast_expression "(void *)((int)local_40 + local_50)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_40 + local_50)" (( "(") (binary_expression "(int)local_40 + local_50" (cast_expression "(int)local_40" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_40")) (+ "+") (identifier "local_50")) () ")")))) (; ";")) (expression_statement "local_50 = sVar9;" (assignment_expression "local_50 = sVar9" (identifier "local_50") (= "=") (identifier "sVar9")) (; ";")) (goto_statement "goto joined_r0x0008171a;" (goto "goto") (statement_identifier "joined_r0x0008171a") (; ";")) (} "}"))) (goto_statement "goto LAB_000815e0;" (goto "goto") (statement_identifier "LAB_000815e0") (; ";")) (} "}"))) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (if_statement "if (bVar12) {\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\nLAB_00081780:\n      iVar7 = FUN_00051360();\n    }" ({ "{") (labeled_statement "LAB_00081780:\n      iVar7 = FUN_00051360();" (statement_identifier "LAB_00081780") (: ":") (expression_statement "iVar7 = FUN_00051360();" (assignment_expression "iVar7 = FUN_00051360()" (identifier "iVar7") (= "=") (call_expression "FUN_00051360()" (identifier "FUN_00051360") (argument_list "()" (( "(") () ")")))) (; ";"))) (} "}"))) (} "}"))) (labeled_statement "LAB_000815e0:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }" (statement_identifier "LAB_000815e0") (: ":") (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000f4bf0();\n  }" (if "if") (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (!= "!=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n                    \n    FUN_000f4bf0();\n  }" ({ "{") (expression_statement "FUN_000f4bf0();" (call_expression "FUN_000f4bf0()" (identifier "FUN_000f4bf0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (labeled_statement "LAB_000814b8:\n  uVar11 = uVar11 - uVar8;" (statement_identifier "LAB_000814b8") (: ":") (expression_statement "uVar11 = uVar11 - uVar8;" (assignment_expression "uVar11 = uVar11 - uVar8" (identifier "uVar11") (= "=") (binary_expression "uVar11 - uVar8" (identifier "uVar11") (- "-") (identifier "uVar8"))) (; ";"))) (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar10 = *(uint *)(iVar7 + uVar6 * 4);" (assignment_expression "uVar10 = *(uint *)(iVar7 + uVar6 * 4)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(iVar7 + uVar6 * 4)" (* "*") (cast_expression "(uint *)(iVar7 + uVar6 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + uVar6 * 4)" (( "(") (binary_expression "iVar7 + uVar6 * 4" (identifier "iVar7") (+ "+") (binary_expression "uVar6 * 4" (identifier "uVar6") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (uVar10 == 0) {\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar7 = FUN_000519a0(&local_28);\njoined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;\n    if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }\n    goto LAB_00081780;\n  }" ({ "{") (expression_statement "iVar7 = FUN_000519a0(&local_28);" (assignment_expression "iVar7 = FUN_000519a0(&local_28)" (identifier "iVar7") (= "=") (call_expression "FUN_000519a0(&local_28)" (identifier "FUN_000519a0") (argument_list "(&local_28)" (( "(") (pointer_expression "&local_28" (& "&") (identifier "local_28")) () ")")))) (; ";")) (labeled_statement "joined_r0x0008171a:\n    if (iVar7 != 0) goto LAB_000815e0;" (statement_identifier "joined_r0x0008171a") (: ":") (if_statement "if (iVar7 != 0) goto LAB_000815e0;" (if "if") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000815e0;" (goto "goto") (statement_identifier "LAB_000815e0") (; ";")))) (if_statement "if (local_28 != 0) {\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" (if "if") (parenthesized_expression "(local_28 != 0)" (( "(") (binary_expression "local_28 != 0" (identifier "local_28") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar7 = *(int *)(iVar3 + 0xc);\n      uVar10 = local_28;\n      goto LAB_000814d6;\n    }" ({ "{") (expression_statement "iVar7 = *(int *)(iVar3 + 0xc);" (assignment_expression "iVar7 = *(int *)(iVar3 + 0xc)" (identifier "iVar7") (= "=") (pointer_expression "*(int *)(iVar3 + 0xc)" (* "*") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar10 = local_28;" (assignment_expression "uVar10 = local_28" (identifier "uVar10") (= "=") (identifier "local_28")) (; ";")) (goto_statement "goto LAB_000814d6;" (goto "goto") (statement_identifier "LAB_000814d6") (; ";")) (} "}"))) (goto_statement "goto LAB_00081780;" (goto "goto") (statement_identifier "LAB_00081780") (; ";")) (} "}"))) (goto_statement "goto LAB_000814d6;" (goto "goto") (statement_identifier "LAB_000814d6") (; ";")) (} "}")))

int function_1(type_1 *pCur,type_2 var_9,type_2 amt,type_3 *pBuf,int eOp)

{
  type_4 *pBt;
  type_5 *pMVar1;
  type_6 *var_11;
  type_7 *pPVar3;
  type_8 *puVar4;
  type_9 PVar5;
  type_1 *pCur_00;
  type_8 var_16;
  int var_20;
  int var_13;
  type_9 *var_17;
  size_t var_7;
  type_10 *pPg;
  type_8 var_4;
  type_8 var_15;
  size_t var_25;
  type_8 var_6;
  int var_19;
  int var_2;
  bool bVar14;
  type_11 uVar15;
  type_12 in_stack_ffffffa4;
  size_t var_14;
  size_t var_8;
  type_1 *local_40;
  type_9 var_22;
  type_10 *var_24;
  int var_26;
  
  uVar15 = var_1();
  var_6 = (type_8)((type_13)uVar15 >> 0x20);
  pCur_00 = (type_1 *)uVar15;
  pBt = pCur_00->pBt;
  pMVar1 = pCur_00->pPage;
  var_26 = *(int *)(var_2 + 0x14);
  var_3(pCur_00);
  var_11 = (pCur_00->info).pPayload;
  var_4 = (type_8)(pCur_00->info).nLocal;
  if (pBt->usableSize - var_4 < (type_8)((int)var_11 - (int)pMVar1->aData)) {
    var_13 = var_5(0x108be);
    goto LAB_000815e0;
  }
  var_14 = var_7;
  if (var_6 < var_4) {
    if (var_4 < var_6 + var_7) {
      var_8 = (var_6 - var_4) + var_7;
      bVar14 = var_8 != 0;
      var_14 = var_4 - var_6;
      if (var_9 != 0) goto LAB_00081592;
LAB_00081633:
      var_10(pCur,var_11 + var_6,var_14);
    }
    else {
      bVar14 = false;
      var_8 = 0;
      if (var_9 == 0) goto LAB_00081633;
LAB_00081592:
      var_13 = var_12(pMVar1->var_24);
      if (var_13 != 0) goto LAB_000815e0;
      var_10(var_11 + var_6,pCur,var_14);
    }
    local_40 = (type_1 *)((int)pCur->aiIdx + (var_14 - 0x40));
    var_6 = 0;
    var_14 = var_8;
  }
  else {
    var_6 = var_6 - var_4;
    bVar14 = var_7 != 0;
    local_40 = pCur;
  }
  var_13 = 0;
  if (!bVar14) goto LAB_000815e0;
  var_4 = pBt->usableSize - 4;
  var_15 = (type_8)(pCur_00->info).nLocal;
  var_17 = pCur_00->aOverflow;
  var_16 = *(type_8 *)(var_11 + var_15);
  var_22 = var_16 >> 0x18 | (var_16 & 0xff0000) >> 8 | (var_16 & 0xff00) << 8 | var_16 << 0x18;
  if ((pCur_00->curFlags & 4) == 0) {
    var_16 = (((pBt->usableSize - 5) + (pCur_00->info).nPayload) - var_15) / var_4;
    if (var_17 == (type_9 *)0x0) {
LAB_0008179f:
      var_17 = (type_9 *)var_18(var_17,in_stack_ffffffa4);
      if (var_17 == (type_9 *)0x0) {
        var_13 = 7;
        goto LAB_000815e0;
      }
      pCur_00->aOverflow = var_17;
    }
    else {
      var_20 = (**(type_14 **)(var_19 + 0xc7e31))(var_17);
      var_13 = var_16 * 4;
      if (var_13 - var_20 != 0 && var_20 <= var_13) {
        var_17 = pCur_00->aOverflow;
        goto LAB_0008179f;
      }
      var_17 = pCur_00->aOverflow;
    }
    var_21(var_17,0,var_16 << 2);
    pCur_00->curFlags = pCur_00->curFlags | 4;
  }
  else {
    var_16 = var_6 / var_4;
    var_15 = var_6 % var_4;
    PVar5 = var_17[var_16];
    if (var_17[var_16] != 0) goto LAB_000814a2;
  }
  if (var_22 != 0) {
    var_17 = pCur_00->aOverflow;
    var_16 = 0;
    var_15 = var_6;
    PVar5 = var_22;
LAB_000814a2:
    var_22 = PVar5;
    PVar5 = var_22;
LAB_000814d6:
    var_22 = PVar5;
    var_6 = var_16 + 1;
    var_17[var_16] = var_22;
    var_16 = var_6;
    if (var_4 <= var_15) goto LAB_000814b8;
    var_25 = 0;
    if (var_4 < var_14 + var_15) {
      var_25 = (var_15 - var_4) + var_14;
      var_14 = var_4 - var_15;
    }
    pPVar3 = pBt->pPager;
    if (var_9 == 0) {
      var_13 = (*pPVar3->xGet)(pPVar3,var_22,&var_24,2);
      pPg = var_24;
      if (var_13 == 0) {
                    /* WARNING: Load size is inaccurate */
        var_6 = *var_24->pData;
        var_22 = var_6 >> 0x18 | (var_6 & 0xff0000) >> 8 | (var_6 & 0xff00) << 8 |
                   var_6 << 0x18;
        var_10(local_40,(void *)((int)var_24->pData + var_15 + 4),var_14);
LAB_000816e0:
        var_15 = 0;
        var_23(pPg);
      }
    }
    else {
      var_13 = (*pPVar3->xGet)(pPVar3,var_22,&var_24,0);
      if (var_13 == 0) {
        puVar4 = (type_8 *)var_24->pData;
        var_6 = *puVar4;
        var_22 = var_6 >> 0x18 | (var_6 & 0xff0000) >> 8 | (var_6 & 0xff00) << 8 |
                   var_6 << 0x18;
        var_13 = var_12(var_24);
        if (var_13 == 0) {
          var_10((void *)((int)puVar4 + var_15 + 4),local_40,var_14);
        }
        var_15 = 0;
        pPg = var_24;
        if (var_24 != (type_10 *)0x0) goto LAB_000816e0;
      }
    }
    if (var_25 != 0) {
      local_40 = (type_1 *)((int)local_40->aiIdx + (var_14 - 0x40));
      var_14 = var_25;
      goto joined_r0x0008171a;
    }
    goto LAB_000815e0;
  }
  var_13 = 0;
  if (bVar14) {
LAB_00081780:
    var_13 = var_5(0x1094f);
  }
LAB_000815e0:
  if (var_26 != *(int *)(var_2 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_27();
  }
  return var_13;
LAB_000814b8:
  var_15 = var_15 - var_4;
  var_17 = pCur_00->aOverflow;
  PVar5 = var_17[var_6];
  if (var_17[var_6] == 0) {
    var_13 = var_28(pBt,var_22,(type_5 **)0x0,&var_22);
joined_r0x0008171a:
    if (var_13 != 0) goto LAB_000815e0;
    if (var_22 != 0) {
      var_17 = pCur_00->aOverflow;
      PVar5 = var_22;
      goto LAB_000814d6;
    }
    goto LAB_00081780;
  }
  goto LAB_000814d6;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (identifier) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier)))) right: (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (identifier)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)) right: (number_literal)))) (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)) right: (number_literal)))) (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))))

int MASKED(void *param_1,int param_2)

{
  int *piVar1;
  uint *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  void *__s;
  size_t extraout_ECX;
  uint uVar8;
  size_t sVar9;
  uint uVar10;
  uint uVar11;
  int unaff_EDI;
  int in_GS_OFFSET;
  bool bVar12;
  undefined8 uVar13;
  size_t local_50;
  size_t local_4c;
  void *local_40;
  uint local_28;
  int local_24;
  int local_20;
  
  uVar13 = FUN_000196fd();
  uVar10 = (uint)((ulonglong)uVar13 >> 0x20);
  iVar3 = (int)uVar13;
  piVar1 = *(int **)(iVar3 + 0x14);
  iVar7 = *(int *)(iVar3 + 0x6c);
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  FUN_00023170();
  iVar5 = *(int *)(iVar3 + 0x24);
  uVar8 = (uint)*(ushort *)(iVar3 + 0x2c);
  if (piVar1[9] - uVar8 < (uint)(iVar5 - *(int *)(iVar7 + 0x38))) {
    iVar7 = FUN_00051360();
    goto LAB_000815e0;
  }
  local_50 = extraout_ECX;
  if (uVar10 < uVar8) {
    if (uVar8 < uVar10 + extraout_ECX) {
      local_4c = (uVar10 - uVar8) + extraout_ECX;
      bVar12 = local_4c != 0;
      local_50 = uVar8 - uVar10;
      if (param_2 != 0) goto LAB_00081592;
LAB_00081633:
      memcpy(param_1,(void *)(uVar10 + iVar5),local_50);
    }
    else {
      bVar12 = false;
      local_4c = 0;
      if (param_2 == 0) goto LAB_00081633;
LAB_00081592:
      iVar7 = FUN_00079770();
      if (iVar7 != 0) goto LAB_000815e0;
      memcpy((void *)(uVar10 + iVar5),param_1,local_50);
    }
    local_40 = (void *)((int)param_1 + local_50);
    uVar10 = 0;
    local_50 = local_4c;
  }
  else {
    uVar10 = uVar10 - uVar8;
    bVar12 = extraout_ECX != 0;
    local_40 = param_1;
  }
  iVar7 = 0;
  if (bVar12) {
    uVar8 = piVar1[9] - 4;
    iVar7 = *(int *)(iVar3 + 0xc);
    uVar4 = *(uint *)(iVar5 + (uint)*(ushort *)(iVar3 + 0x2c));
    local_28 = uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
    if ((*(byte *)(iVar3 + 1) & 4) == 0) {
      uVar4 = ((piVar1[9] + -5 + *(int *)(iVar3 + 0x28)) - (uint)*(ushort *)(iVar3 + 0x2c)) / uVar8;
      if ((iVar7 == 0) ||
         (iVar5 = (**(code **)(unaff_EDI + 0xc7e31))(iVar7), iVar7 = uVar4 * 4,
         iVar7 - iVar5 != 0 && iVar5 <= iVar7)) {
        __s = (void *)FUN_00026820();
        if (__s == (void *)0x0) {
          iVar7 = 7;
          goto LAB_000815e0;
        }
        *(void **)(iVar3 + 0xc) = __s;
      }
      else {
        __s = *(void **)(iVar3 + 0xc);
      }
      memset(__s,0,uVar4 << 2);
      *(byte *)(iVar3 + 1) = *(byte *)(iVar3 + 1) | 4;
    }
    else {
      uVar6 = uVar10 / uVar8;
      uVar11 = uVar10 % uVar8;
      uVar4 = *(uint *)(iVar7 + uVar6 * 4);
      if (uVar4 != 0) goto LAB_000814a2;
    }
    if (local_28 != 0) {
      iVar7 = *(int *)(iVar3 + 0xc);
      uVar6 = 0;
      uVar11 = uVar10;
      uVar4 = local_28;
LAB_000814a2:
      local_28 = uVar4;
      uVar10 = local_28;
LAB_000814d6:
      local_28 = uVar10;
      uVar6 = uVar6 + 1;
      *(uint *)(iVar7 + -4 + uVar6 * 4) = local_28;
      if (uVar8 <= uVar11) goto LAB_000814b8;
      sVar9 = 0;
      if (uVar8 < local_50 + uVar11) {
        sVar9 = (uVar11 - uVar8) + local_50;
        local_50 = uVar8 - uVar11;
      }
      iVar7 = *piVar1;
      if (param_2 == 0) {
        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,2);
        if (iVar7 == 0) {
          uVar10 = **(uint **)(local_24 + 4);
          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |
                     uVar10 << 0x18;
          memcpy(local_40,(void *)((int)*(uint **)(local_24 + 4) + uVar11 + 4),local_50);
LAB_000816e0:
          uVar11 = 0;
          FUN_0001b1a0();
        }
      }
      else {
        iVar7 = (**(code **)(iVar7 + 200))(iVar7,local_28,&local_24,0);
        if (iVar7 == 0) {
          puVar2 = *(uint **)(local_24 + 4);
          uVar10 = *puVar2;
          local_28 = uVar10 >> 0x18 | (uVar10 & 0xff0000) >> 8 | (uVar10 & 0xff00) << 8 |
                     uVar10 << 0x18;
          iVar7 = FUN_00079770();
          if (iVar7 == 0) {
            memcpy((void *)((int)puVar2 + uVar11 + 4),local_40,local_50);
          }
          uVar11 = 0;
          if (local_24 != 0) goto LAB_000816e0;
        }
      }
      if (sVar9 != 0) {
        local_40 = (void *)((int)local_40 + local_50);
        local_50 = sVar9;
        goto joined_r0x0008171a;
      }
      goto LAB_000815e0;
    }
    iVar7 = 0;
    if (bVar12) {
LAB_00081780:
      iVar7 = FUN_00051360();
    }
  }
LAB_000815e0:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_000f4bf0();
  }
  return iVar7;
LAB_000814b8:
  uVar11 = uVar11 - uVar8;
  iVar7 = *(int *)(iVar3 + 0xc);
  uVar10 = *(uint *)(iVar7 + uVar6 * 4);
  if (uVar10 == 0) {
    iVar7 = FUN_000519a0(&local_28);
joined_r0x0008171a:
    if (iVar7 != 0) goto LAB_000815e0;
    if (local_28 != 0) {
      iVar7 = *(int *)(iVar3 + 0xc);
      uVar10 = local_28;
      goto LAB_000814d6;
    }
    goto LAB_00081780;
  }
  goto LAB_000814d6;
}

