
int pagerUndoCallback(void *pCtx,Pgno iPg)

{
  int *piVar1;
  short sVar2;
  Pager *pPager;
  sqlite3_pcache_page *pPage;
  int iVar3;
  int iVar4;
  PgHdr *pPage_00;
  Pgno pgno;
  int unaff_EDI;
  undefined8 uVar5;
  
  uVar5 = __x86_get_pc_thunk_di();
  pgno = (Pgno)((ulonglong)uVar5 >> 0x20);
  iVar4 = (int)uVar5;
  pPage = (sqlite3_pcache_page *)
          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)
  ;
  if (pPage != (sqlite3_pcache_page *)0x0) {
    pPage_00 = (PgHdr *)pPage->pExtra;
    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {
      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);
      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;
      sVar2 = pPage_00->nRef;
    }
    else {
      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;
      *piVar1 = *piVar1 + 1;
      sVar2 = pPage_00->nRef + 1;
      pPage_00->nRef = sVar2;
    }
    if (sVar2 != 1) {
      iVar3 = readDbPage(pPage_00);
      if (iVar3 == 0) {
        (**(code **)(iVar4 + 0xc4))(pPage_00);
      }
      sqlite3PagerUnrefNotNull(pPage_00);
      iVar4 = *(int *)(iVar4 + 0x58);
      goto joined_r0x00098d6e;
    }
    if ((pPage_00->flags & 2) != 0) {
      pcacheManageDirtyList(pPage_00,'\x01');
    }
    piVar1 = &pPage_00->pCache->nRefSum;
    *piVar1 = *piVar1 + -1;
    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);
  }
LAB_00098d67:
  iVar4 = *(int *)(iVar4 + 0x58);
  iVar3 = 0;
joined_r0x00098d6e:
  if (iVar4 == 0) {
    return iVar3;
  }
  do {
    *(undefined4 *)(iVar4 + 0x10) = 1;
    iVar4 = *(int *)(iVar4 + 0x2c);
  } while (iVar4 != 0);
  return iVar3;
}



int FUN_00098ca0(void)

{
  int *piVar1;
  short sVar2;
  int iVar3;
  int iVar4;
  int *piVar5;
  int unaff_EDI;
  undefined8 uVar6;
  
  uVar6 = FUN_0003a401();
  iVar4 = (int)uVar6;
  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))
                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),
                     0);
  if (iVar3 != 0) {
    piVar5 = *(int **)(iVar3 + 4);
    if (*piVar5 == 0) {
      piVar5 = (int *)FUN_0004ac20();
      if (piVar5 == (int *)0x0) goto LAB_00098d67;
      sVar2 = *(short *)((int)piVar5 + 0x1e);
    }
    else {
      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);
      *piVar1 = *piVar1 + 1;
      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;
      *(short *)((int)piVar5 + 0x1e) = sVar2;
    }
    if (sVar2 != 1) {
      iVar3 = FUN_00098af0();
      if (iVar3 == 0) {
        (**(code **)(iVar4 + 0xc4))(piVar5);
      }
      FUN_0003be70();
      iVar4 = *(int *)(iVar4 + 0x58);
      goto joined_r0x00098d6e;
    }
    if ((*(byte *)(piVar5 + 7) & 2) != 0) {
      FUN_0003ba40();
    }
    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;
    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);
  }
LAB_00098d67:
  iVar4 = *(int *)(iVar4 + 0x58);
  iVar3 = 0;
joined_r0x00098d6e:
  if (iVar4 == 0) {
    return iVar3;
  }
  do {
    *(undefined4 *)(iVar4 + 0x10) = 1;
    iVar4 = *(int *)(iVar4 + 0x2c);
  } while (iVar4 != 0);
  return iVar3;
}


PUSH EBP
PUSH EDI
CALL 0x0003a401
ADD EDI,0x122181
PUSH ESI
MOV ESI,EAX
PUSH EBX
SUB ESP,0x20
PUSH 0x0
PUSH EDX
MOV EAX,dword ptr [EAX + 0xd0]
MOV dword ptr [ESP + 0x18],EDX
PUSH dword ptr [EAX + 0x2c]
CALL dword ptr [EDI + 0x644]
MOV EDX,dword ptr [ESP + 0x1c]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00098d67
MOV EBX,dword ptr [EAX + 0x4]
MOV EBP,dword ptr [ESI + 0xd0]
MOV ECX,dword ptr [EBX]
TEST ECX,ECX
JZ 0x00098d88
ADD dword ptr [EBP + 0xc],0x1
MOVZX EAX,word ptr [EBX + 0x1e]
ADD EAX,0x1
MOV word ptr [EBX + 0x1e],AX
CMP AX,0x1
JZ 0x00098d38
MOV EAX,EBX
CALL 0x00098af0
MOV EDI,EAX
TEST EAX,EAX
JNZ 0x00098d1b
SUB ESP,0xc
PUSH EBX
CALL dword ptr [ESI + 0xc4]
ADD ESP,0x10
MOV EAX,EBX
CALL 0x0003be70
MOV EAX,dword ptr [ESI + 0x58]
TEST EAX,EAX
JNZ 0x00098d70
ADD ESP,0x1c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
TEST byte ptr [EBX + 0x1c],0x2
JZ 0x00098d4a
MOV EDX,0x1
MOV EAX,EBX
CALL 0x0003ba40
MOV EAX,dword ptr [EBX + 0xc]
SUB ESP,0x4
SUB dword ptr [EAX + 0xc],0x1
PUSH 0x1
PUSH dword ptr [EBX]
MOV EAX,dword ptr [EBX + 0xc]
PUSH dword ptr [EAX + 0x2c]
CALL dword ptr [EDI + 0x648]
ADD ESP,0x10
MOV EAX,dword ptr [ESI + 0x58]
XOR EDI,EDI
TEST EAX,EAX
JZ 0x00098d29
MOV dword ptr [EAX + 0x10],0x1
MOV EAX,dword ptr [EAX + 0x2c]
TEST EAX,EAX
JNZ 0x00098d70
ADD ESP,0x1c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,EAX
MOV EAX,EBP
CALL 0x0004ac20
MOV EBX,EAX
TEST EAX,EAX
JZ 0x00098d67
MOVZX EAX,word ptr [EAX + 0x1e]
JMP 0x00098cfb
(translation_unit "int FUN_00098ca0(void)\n\n{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}\n\n" (function_definition "int FUN_00098ca0(void)\n\n{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" primitive_type (function_declarator "FUN_00098ca0(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) ))) (compound_statement "{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "short sVar2;" (sized_type_specifier "short" short) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "uVar6 = FUN_0003a401();" (assignment_expression "uVar6 = FUN_0003a401()" identifier = (call_expression "FUN_0003a401()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar4 = (int)uVar6;" (assignment_expression "iVar4 = (int)uVar6" identifier = (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);" (assignment_expression "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" identifier = (call_expression "(**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c5))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c5)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c5)" * (cast_expression "(code **)(unaff_EDI + 0x1227c5)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c5)" ( (binary_expression "unaff_EDI + 0x1227c5" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" ( (pointer_expression "*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" * (cast_expression "(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (binary_expression "*(int *)(iVar4 + 0xd0) + 0x2c" (pointer_expression "*(int *)(iVar4 + 0xd0)" * (cast_expression "(int *)(iVar4 + 0xd0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) , (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , number_literal )))) ;) (if_statement "if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" { (expression_statement "piVar5 = *(int **)(iVar3 + 4);" (assignment_expression "piVar5 = *(int **)(iVar3 + 4)" identifier = (pointer_expression "*(int **)(iVar3 + 4)" * (cast_expression "(int **)(iVar3 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" if (parenthesized_expression "(*piVar5 == 0)" ( (binary_expression "*piVar5 == 0" (pointer_expression "*piVar5" * identifier) == number_literal) )) (compound_statement "{\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }" { (expression_statement "piVar5 = (int *)FUN_0004ac20();" (assignment_expression "piVar5 = (int *)FUN_0004ac20()" identifier = (cast_expression "(int *)FUN_0004ac20()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004ac20()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00098d67;" if (parenthesized_expression "(piVar5 == (int *)0x0)" ( (binary_expression "piVar5 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00098d67;" goto statement_identifier ;)) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e);" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e)" identifier = (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }) (else_clause "else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" else (compound_statement "{\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" { (expression_statement "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc)" identifier = (cast_expression "(int *)(*(int *)(iVar4 + 0xd0) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0xc)" ( (binary_expression "*(int *)(iVar4 + 0xd0) + 0xc" (pointer_expression "*(int *)(iVar4 + 0xd0)" * (cast_expression "(int *)(iVar4 + 0xd0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "*piVar1 = *piVar1 + 1;" (assignment_expression "*piVar1 = *piVar1 + 1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + 1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1" identifier = (binary_expression "*(short *)((int)piVar5 + 0x1e) + 1" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal)) ;) (expression_statement "*(short *)((int)piVar5 + 0x1e) = sVar2;" (assignment_expression "*(short *)((int)piVar5 + 0x1e) = sVar2" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) }))) (if_statement "if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" if (parenthesized_expression "(sVar2 != 1)" ( (binary_expression "sVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" { (expression_statement "iVar3 = FUN_00098af0();" (assignment_expression "iVar3 = FUN_00098af0()" identifier = (call_expression "FUN_00098af0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" { (expression_statement "(**(code **)(iVar4 + 0xc4))(piVar5);" (call_expression "(**(code **)(iVar4 + 0xc4))(piVar5)" (parenthesized_expression "(**(code **)(iVar4 + 0xc4))" ( (pointer_expression "**(code **)(iVar4 + 0xc4)" * (pointer_expression "*(code **)(iVar4 + 0xc4)" * (cast_expression "(code **)(iVar4 + 0xc4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xc4)" ( (binary_expression "iVar4 + 0xc4" identifier + number_literal) ))))) )) (argument_list "(piVar5)" ( identifier ))) ;) })) (expression_statement "FUN_0003be70();" (call_expression "FUN_0003be70()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;) (goto_statement "goto joined_r0x00098d6e;" goto statement_identifier ;) })) (if_statement "if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }" if (parenthesized_expression "((*(byte *)(piVar5 + 7) & 2) != 0)" ( (binary_expression "(*(byte *)(piVar5 + 7) & 2) != 0" (parenthesized_expression "(*(byte *)(piVar5 + 7) & 2)" ( (binary_expression "*(byte *)(piVar5 + 7) & 2" (pointer_expression "*(byte *)(piVar5 + 7)" * (cast_expression "(byte *)(piVar5 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5 + 7)" ( (binary_expression "piVar5 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_0003ba40();\n    }" { (expression_statement "FUN_0003ba40();" (call_expression "FUN_0003ba40()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;" (assignment_expression "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" * (cast_expression "(int *)(piVar5[3] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0xc)" ( (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "*(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" * (cast_expression "(int *)(piVar5[3] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0xc)" ( (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) + number_literal)) ;) (expression_statement "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);" (call_expression "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c9))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c9)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c9)" * (cast_expression "(code **)(unaff_EDI + 0x1227c9)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c9)" ( (binary_expression "unaff_EDI + 0x1227c9" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" ( (pointer_expression "*(undefined4 *)(piVar5[3] + 0x2c)" * (cast_expression "(undefined4 *)(piVar5[3] + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0x2c)" ( (binary_expression "piVar5[3] + 0x2c" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "*piVar5" * identifier) , number_literal ))) ;) })) (labeled_statement "LAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);" statement_identifier : (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "joined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }" statement_identifier : (if_statement "if (iVar4 == 0) {\n    return iVar3;\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return iVar3;\n  }" { (return_statement "return iVar3;" return identifier ;) }))) (do_statement "do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);" do (compound_statement "{\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  }" { (expression_statement "*(undefined4 *)(iVar4 + 0x10) = 1;" (assignment_expression "*(undefined4 *)(iVar4 + 0x10) = 1" (pointer_expression "*(undefined4 *)(iVar4 + 0x10)" * (cast_expression "(undefined4 *)(iVar4 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x2c);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x2c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x2c)" * (cast_expression "(int *)(iVar4 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x2c)" ( (binary_expression "iVar4 + 0x2c" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) ;) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit "int pagerUndoCallback(void *pCtx,Pgno iPg)\n\n{\n  int *piVar1;\n  short sVar2;\n  Pager *pPager;\n  sqlite3_pcache_page *pPage;\n  int iVar3;\n  int iVar4;\n  PgHdr *pPage_00;\n  Pgno pgno;\n  int unaff_EDI;\n  undefined8 uVar5;\n  \n  uVar5 = __x86_get_pc_thunk_di();\n  pgno = (Pgno)((ulonglong)uVar5 >> 0x20);\n  iVar4 = (int)uVar5;\n  pPage = (sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)\n  ;\n  if (pPage != (sqlite3_pcache_page *)0x0) {\n    pPage_00 = (PgHdr *)pPage->pExtra;\n    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }\n    piVar1 = &pPage_00->pCache->nRefSum;\n    *piVar1 = *piVar1 + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}\n\n" (function_definition "int pagerUndoCallback(void *pCtx,Pgno iPg)\n\n{\n  int *piVar1;\n  short sVar2;\n  Pager *pPager;\n  sqlite3_pcache_page *pPage;\n  int iVar3;\n  int iVar4;\n  PgHdr *pPage_00;\n  Pgno pgno;\n  int unaff_EDI;\n  undefined8 uVar5;\n  \n  uVar5 = __x86_get_pc_thunk_di();\n  pgno = (Pgno)((ulonglong)uVar5 >> 0x20);\n  iVar4 = (int)uVar5;\n  pPage = (sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)\n  ;\n  if (pPage != (sqlite3_pcache_page *)0x0) {\n    pPage_00 = (PgHdr *)pPage->pExtra;\n    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }\n    piVar1 = &pPage_00->pCache->nRefSum;\n    *piVar1 = *piVar1 + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" primitive_type (function_declarator "pagerUndoCallback(void *pCtx,Pgno iPg)" identifier (parameter_list "(void *pCtx,Pgno iPg)" ( (parameter_declaration "void *pCtx" primitive_type (pointer_declarator "*pCtx" * identifier)) , (parameter_declaration "Pgno iPg" type_identifier identifier) ))) (compound_statement "{\n  int *piVar1;\n  short sVar2;\n  Pager *pPager;\n  sqlite3_pcache_page *pPage;\n  int iVar3;\n  int iVar4;\n  PgHdr *pPage_00;\n  Pgno pgno;\n  int unaff_EDI;\n  undefined8 uVar5;\n  \n  uVar5 = __x86_get_pc_thunk_di();\n  pgno = (Pgno)((ulonglong)uVar5 >> 0x20);\n  iVar4 = (int)uVar5;\n  pPage = (sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)\n  ;\n  if (pPage != (sqlite3_pcache_page *)0x0) {\n    pPage_00 = (PgHdr *)pPage->pExtra;\n    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }\n    piVar1 = &pPage_00->pCache->nRefSum;\n    *piVar1 = *piVar1 + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "short sVar2;" (sized_type_specifier "short" short) identifier ;) (declaration "Pager *pPager;" type_identifier (pointer_declarator "*pPager" * identifier) ;) (declaration "sqlite3_pcache_page *pPage;" type_identifier (pointer_declarator "*pPage" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "PgHdr *pPage_00;" type_identifier (pointer_declarator "*pPage_00" * identifier) ;) (declaration "Pgno pgno;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "uVar5 = __x86_get_pc_thunk_di();" (assignment_expression "uVar5 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "pgno = (Pgno)((ulonglong)uVar5 >> 0x20);" (assignment_expression "pgno = (Pgno)((ulonglong)uVar5 >> 0x20)" identifier = (call_expression "(Pgno)((ulonglong)uVar5 >> 0x20)" (parenthesized_expression "(Pgno)" ( identifier )) (argument_list "((ulonglong)uVar5 >> 0x20)" ( (binary_expression "(ulonglong)uVar5 >> 0x20" (cast_expression "(ulonglong)uVar5" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar4 = (int)uVar5;" (assignment_expression "iVar4 = (int)uVar5" identifier = (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "pPage = (sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)\n  ;" (assignment_expression "pPage = (sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)" identifier = (cast_expression "(sqlite3_pcache_page *)\n          (**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)" ( (type_descriptor "sqlite3_pcache_page *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(unaff_EDI + 0x1227c5))(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c5))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c5)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c5)" * (cast_expression "(code **)(unaff_EDI + 0x1227c5)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c5)" ( (binary_expression "unaff_EDI + 0x1227c5" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),pgno,0)" ( (pointer_expression "*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" * (cast_expression "(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (binary_expression "*(int *)(iVar4 + 0xd0) + 0x2c" (pointer_expression "*(int *)(iVar4 + 0xd0)" * (cast_expression "(int *)(iVar4 + 0xd0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) , identifier , number_literal ))))) ;) (if_statement "if (pPage != (sqlite3_pcache_page *)0x0) {\n    pPage_00 = (PgHdr *)pPage->pExtra;\n    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }\n    piVar1 = &pPage_00->pCache->nRefSum;\n    *piVar1 = *piVar1 + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);\n  }" if (parenthesized_expression "(pPage != (sqlite3_pcache_page *)0x0)" ( (binary_expression "pPage != (sqlite3_pcache_page *)0x0" identifier != (cast_expression "(sqlite3_pcache_page *)0x0" ( (type_descriptor "sqlite3_pcache_page *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pPage_00 = (PgHdr *)pPage->pExtra;\n    if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }\n    piVar1 = &pPage_00->pCache->nRefSum;\n    *piVar1 = *piVar1 + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);\n  }" { (expression_statement "pPage_00 = (PgHdr *)pPage->pExtra;" (assignment_expression "pPage_00 = (PgHdr *)pPage->pExtra" identifier = (cast_expression "(PgHdr *)pPage->pExtra" ( (type_descriptor "PgHdr *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pPage->pExtra" identifier -> field_identifier))) ;) (if_statement "if (pPage_00->pPage == (sqlite3_pcache_page *)0x0) {\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }\n    else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }" if (parenthesized_expression "(pPage_00->pPage == (sqlite3_pcache_page *)0x0)" ( (binary_expression "pPage_00->pPage == (sqlite3_pcache_page *)0x0" (field_expression "pPage_00->pPage" identifier -> field_identifier) == (cast_expression "(sqlite3_pcache_page *)0x0" ( (type_descriptor "sqlite3_pcache_page *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);\n      if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;\n      sVar2 = pPage_00->nRef;\n    }" { (expression_statement "pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage);" (assignment_expression "pPage_00 = pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage)" identifier = (call_expression "pcacheFetchFinishWithInit(*(PCache **)(iVar4 + 0xd0),pgno,pPage)" identifier (argument_list "(*(PCache **)(iVar4 + 0xd0),pgno,pPage)" ( (pointer_expression "*(PCache **)(iVar4 + 0xd0)" * (cast_expression "(PCache **)(iVar4 + 0xd0)" ( (type_descriptor "PCache **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) , identifier , identifier )))) ;) (if_statement "if (pPage_00 == (PgHdr *)0x0) goto LAB_00098d67;" if (parenthesized_expression "(pPage_00 == (PgHdr *)0x0)" ( (binary_expression "pPage_00 == (PgHdr *)0x0" identifier == (cast_expression "(PgHdr *)0x0" ( (type_descriptor "PgHdr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00098d67;" goto statement_identifier ;)) (expression_statement "sVar2 = pPage_00->nRef;" (assignment_expression "sVar2 = pPage_00->nRef" identifier = (field_expression "pPage_00->nRef" identifier -> field_identifier)) ;) }) (else_clause "else {\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }" else (compound_statement "{\n      piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;\n      *piVar1 = *piVar1 + 1;\n      sVar2 = pPage_00->nRef + 1;\n      pPage_00->nRef = sVar2;\n    }" { (expression_statement "piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum;" (assignment_expression "piVar1 = &(*(PCache **)(iVar4 + 0xd0))->nRefSum" identifier = (pointer_expression "&(*(PCache **)(iVar4 + 0xd0))->nRefSum" & (field_expression "(*(PCache **)(iVar4 + 0xd0))->nRefSum" (parenthesized_expression "(*(PCache **)(iVar4 + 0xd0))" ( (pointer_expression "*(PCache **)(iVar4 + 0xd0)" * (cast_expression "(PCache **)(iVar4 + 0xd0)" ( (type_descriptor "PCache **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) )) -> field_identifier))) ;) (expression_statement "*piVar1 = *piVar1 + 1;" (assignment_expression "*piVar1 = *piVar1 + 1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + 1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "sVar2 = pPage_00->nRef + 1;" (assignment_expression "sVar2 = pPage_00->nRef + 1" identifier = (binary_expression "pPage_00->nRef + 1" (field_expression "pPage_00->nRef" identifier -> field_identifier) + number_literal)) ;) (expression_statement "pPage_00->nRef = sVar2;" (assignment_expression "pPage_00->nRef = sVar2" (field_expression "pPage_00->nRef" identifier -> field_identifier) = identifier) ;) }))) (if_statement "if (sVar2 != 1) {\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" if (parenthesized_expression "(sVar2 != 1)" ( (binary_expression "sVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      iVar3 = readDbPage(pPage_00);\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }\n      sqlite3PagerUnrefNotNull(pPage_00);\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" { (expression_statement "iVar3 = readDbPage(pPage_00);" (assignment_expression "iVar3 = readDbPage(pPage_00)" identifier = (call_expression "readDbPage(pPage_00)" identifier (argument_list "(pPage_00)" ( identifier )))) ;) (if_statement "if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        (**(code **)(iVar4 + 0xc4))(pPage_00);\n      }" { (expression_statement "(**(code **)(iVar4 + 0xc4))(pPage_00);" (call_expression "(**(code **)(iVar4 + 0xc4))(pPage_00)" (parenthesized_expression "(**(code **)(iVar4 + 0xc4))" ( (pointer_expression "**(code **)(iVar4 + 0xc4)" * (pointer_expression "*(code **)(iVar4 + 0xc4)" * (cast_expression "(code **)(iVar4 + 0xc4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xc4)" ( (binary_expression "iVar4 + 0xc4" identifier + number_literal) ))))) )) (argument_list "(pPage_00)" ( identifier ))) ;) })) (expression_statement "sqlite3PagerUnrefNotNull(pPage_00);" (call_expression "sqlite3PagerUnrefNotNull(pPage_00)" identifier (argument_list "(pPage_00)" ( identifier ))) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;) (goto_statement "goto joined_r0x00098d6e;" goto statement_identifier ;) })) (if_statement "if ((pPage_00->flags & 2) != 0) {\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }" if (parenthesized_expression "((pPage_00->flags & 2) != 0)" ( (binary_expression "(pPage_00->flags & 2) != 0" (parenthesized_expression "(pPage_00->flags & 2)" ( (binary_expression "pPage_00->flags & 2" (field_expression "pPage_00->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n      pcacheManageDirtyList(pPage_00,'\x01');\n    }" { (expression_statement "pcacheManageDirtyList(pPage_00,'\x01');" (call_expression "pcacheManageDirtyList(pPage_00,'\x01')" identifier (argument_list "(pPage_00,'\x01')" ( identifier , (char_literal "'\x01'" ' escape_sequence ') ))) ;) })) (expression_statement "piVar1 = &pPage_00->pCache->nRefSum;" (assignment_expression "piVar1 = &pPage_00->pCache->nRefSum" identifier = (pointer_expression "&pPage_00->pCache->nRefSum" & (field_expression "pPage_00->pCache->nRefSum" (field_expression "pPage_00->pCache" identifier -> field_identifier) -> field_identifier))) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "(**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1);" (call_expression "(**(code **)(unaff_EDI + 0x1227c9))(pPage_00->pCache->pCache,pPage_00->pPage,1)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c9))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c9)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c9)" * (cast_expression "(code **)(unaff_EDI + 0x1227c9)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c9)" ( (binary_expression "unaff_EDI + 0x1227c9" identifier + number_literal) ))))) )) (argument_list "(pPage_00->pCache->pCache,pPage_00->pPage,1)" ( (field_expression "pPage_00->pCache->pCache" (field_expression "pPage_00->pCache" identifier -> field_identifier) -> field_identifier) , (field_expression "pPage_00->pPage" identifier -> field_identifier) , number_literal ))) ;) })) (labeled_statement "LAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);" statement_identifier : (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "joined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }" statement_identifier : (if_statement "if (iVar4 == 0) {\n    return iVar3;\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return iVar3;\n  }" { (return_statement "return iVar3;" return identifier ;) }))) (do_statement "do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);" do (compound_statement "{\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  }" { (expression_statement "*(undefined4 *)(iVar4 + 0x10) = 1;" (assignment_expression "*(undefined4 *)(iVar4 + 0x10) = 1" (pointer_expression "*(undefined4 *)(iVar4 + 0x10)" * (cast_expression "(undefined4 *)(iVar4 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x2c);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x2c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x2c)" * (cast_expression "(int *)(iVar4 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x2c)" ( (binary_expression "iVar4 + 0x2c" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) ;) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit "int FUN_00098ca0(void)\n\n{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}\n\n" (function_definition "int FUN_00098ca0(void)\n\n{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" primitive_type (function_declarator "FUN_00098ca0(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) ))) (compound_statement "{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "short sVar2;" (sized_type_specifier "short" short) identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "uVar6 = FUN_0003a401();" (assignment_expression "uVar6 = FUN_0003a401()" identifier = (call_expression "FUN_0003a401()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar4 = (int)uVar6;" (assignment_expression "iVar4 = (int)uVar6" identifier = (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);" (assignment_expression "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" identifier = (call_expression "(**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c5))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c5)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c5)" * (cast_expression "(code **)(unaff_EDI + 0x1227c5)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c5)" ( (binary_expression "unaff_EDI + 0x1227c5" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" ( (pointer_expression "*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" * (cast_expression "(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0x2c)" ( (binary_expression "*(int *)(iVar4 + 0xd0) + 0x2c" (pointer_expression "*(int *)(iVar4 + 0xd0)" * (cast_expression "(int *)(iVar4 + 0xd0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) , (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , number_literal )))) ;) (if_statement "if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" { (expression_statement "piVar5 = *(int **)(iVar3 + 4);" (assignment_expression "piVar5 = *(int **)(iVar3 + 4)" identifier = (pointer_expression "*(int **)(iVar3 + 4)" * (cast_expression "(int **)(iVar3 + 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" if (parenthesized_expression "(*piVar5 == 0)" ( (binary_expression "*piVar5 == 0" (pointer_expression "*piVar5" * identifier) == number_literal) )) (compound_statement "{\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }" { (expression_statement "piVar5 = (int *)FUN_0004ac20();" (assignment_expression "piVar5 = (int *)FUN_0004ac20()" identifier = (cast_expression "(int *)FUN_0004ac20()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004ac20()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00098d67;" if (parenthesized_expression "(piVar5 == (int *)0x0)" ( (binary_expression "piVar5 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00098d67;" goto statement_identifier ;)) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e);" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e)" identifier = (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) }) (else_clause "else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" else (compound_statement "{\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" { (expression_statement "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc)" identifier = (cast_expression "(int *)(*(int *)(iVar4 + 0xd0) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0xc)" ( (binary_expression "*(int *)(iVar4 + 0xd0) + 0xc" (pointer_expression "*(int *)(iVar4 + 0xd0)" * (cast_expression "(int *)(iVar4 + 0xd0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0xd0)" ( (binary_expression "iVar4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) ;) (expression_statement "*piVar1 = *piVar1 + 1;" (assignment_expression "*piVar1 = *piVar1 + 1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + 1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1" identifier = (binary_expression "*(short *)((int)piVar5 + 0x1e) + 1" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal)) ;) (expression_statement "*(short *)((int)piVar5 + 0x1e) = sVar2;" (assignment_expression "*(short *)((int)piVar5 + 0x1e) = sVar2" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" * (cast_expression "(short *)((int)piVar5 + 0x1e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)piVar5 + 0x1e)" ( (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) }))) (if_statement "if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" if (parenthesized_expression "(sVar2 != 1)" ( (binary_expression "sVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" { (expression_statement "iVar3 = FUN_00098af0();" (assignment_expression "iVar3 = FUN_00098af0()" identifier = (call_expression "FUN_00098af0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" { (expression_statement "(**(code **)(iVar4 + 0xc4))(piVar5);" (call_expression "(**(code **)(iVar4 + 0xc4))(piVar5)" (parenthesized_expression "(**(code **)(iVar4 + 0xc4))" ( (pointer_expression "**(code **)(iVar4 + 0xc4)" * (pointer_expression "*(code **)(iVar4 + 0xc4)" * (cast_expression "(code **)(iVar4 + 0xc4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0xc4)" ( (binary_expression "iVar4 + 0xc4" identifier + number_literal) ))))) )) (argument_list "(piVar5)" ( identifier ))) ;) })) (expression_statement "FUN_0003be70();" (call_expression "FUN_0003be70()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;) (goto_statement "goto joined_r0x00098d6e;" goto statement_identifier ;) })) (if_statement "if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }" if (parenthesized_expression "((*(byte *)(piVar5 + 7) & 2) != 0)" ( (binary_expression "(*(byte *)(piVar5 + 7) & 2) != 0" (parenthesized_expression "(*(byte *)(piVar5 + 7) & 2)" ( (binary_expression "*(byte *)(piVar5 + 7) & 2" (pointer_expression "*(byte *)(piVar5 + 7)" * (cast_expression "(byte *)(piVar5 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5 + 7)" ( (binary_expression "piVar5 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      FUN_0003ba40();\n    }" { (expression_statement "FUN_0003ba40();" (call_expression "FUN_0003ba40()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;" (assignment_expression "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" * (cast_expression "(int *)(piVar5[3] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0xc)" ( (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "*(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" * (cast_expression "(int *)(piVar5[3] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0xc)" ( (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) + number_literal)) ;) (expression_statement "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);" (call_expression "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c9))" ( (pointer_expression "**(code **)(unaff_EDI + 0x1227c9)" * (pointer_expression "*(code **)(unaff_EDI + 0x1227c9)" * (cast_expression "(code **)(unaff_EDI + 0x1227c9)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x1227c9)" ( (binary_expression "unaff_EDI + 0x1227c9" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" ( (pointer_expression "*(undefined4 *)(piVar5[3] + 0x2c)" * (cast_expression "(undefined4 *)(piVar5[3] + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar5[3] + 0x2c)" ( (binary_expression "piVar5[3] + 0x2c" (subscript_expression "piVar5[3]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "*piVar5" * identifier) , number_literal ))) ;) })) (labeled_statement "LAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);" statement_identifier : (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" identifier = (pointer_expression "*(int *)(iVar4 + 0x58)" * (cast_expression "(int *)(iVar4 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x58)" ( (binary_expression "iVar4 + 0x58" identifier + number_literal) ))))) ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "joined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }" statement_identifier : (if_statement "if (iVar4 == 0) {\n    return iVar3;\n  }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return iVar3;\n  }" { (return_statement "return iVar3;" return identifier ;) }))) (do_statement "do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);" do (compound_statement "{\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  }" { (expression_statement "*(undefined4 *)(iVar4 + 0x10) = 1;" (assignment_expression "*(undefined4 *)(iVar4 + 0x10) = 1" (pointer_expression "*(undefined4 *)(iVar4 + 0x10)" * (cast_expression "(undefined4 *)(iVar4 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x10)" ( (binary_expression "iVar4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar4 = *(int *)(iVar4 + 0x2c);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x2c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x2c)" * (cast_expression "(int *)(iVar4 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x2c)" ( (binary_expression "iVar4 + 0x2c" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) ;) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) , (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) , 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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (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)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (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 (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 ))) ;) })) (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) ))))) ;) (goto_statement goto statement_identifier ;) })) (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 (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) + LIT)) ;) (expression_statement (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) , (pointer_expression * IDENT) , LIT ))) ;) })) (labeled_statement statement_identifier : (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) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) }))) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return IDENT ;) })))
(function_definition "int FUN_00098ca0(void)\n\n{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" (primitive_type "int") (function_declarator "FUN_00098ca0(void)" (identifier "FUN_00098ca0") (parameter_list "(void)" (( "(") (parameter_declaration "void" (primitive_type "void")) () ")"))) (compound_statement "{\n  int *piVar1;\n  short sVar2;\n  int iVar3;\n  int iVar4;\n  int *piVar5;\n  int unaff_EDI;\n  undefined8 uVar6;\n  \n  uVar6 = FUN_0003a401();\n  iVar4 = (int)uVar6;\n  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);\n  if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }\nLAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);\n  iVar3 = 0;\njoined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }\n  do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);\n  return iVar3;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "short sVar2;" (sized_type_specifier "short" (short "short")) (identifier "sVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (expression_statement "uVar6 = FUN_0003a401();" (assignment_expression "uVar6 = FUN_0003a401()" (identifier "uVar6") (= "=") (call_expression "FUN_0003a401()" (identifier "FUN_0003a401") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "iVar4 = (int)uVar6;" (assignment_expression "iVar4 = (int)uVar6" (identifier "iVar4") (= "=") (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6"))) (; ";")) (expression_statement "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0);" (assignment_expression "iVar3 = (**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(unaff_EDI + 0x1227c5))\n                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c5))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0x1227c5)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0x1227c5)" (* "*") (cast_expression "(code **)(unaff_EDI + 0x1227c5)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x1227c5)" (( "(") (binary_expression "unaff_EDI + 0x1227c5" (identifier "unaff_EDI") (+ "+") (number_literal "0x1227c5")) () ")"))))) () ")")) (argument_list "(*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),\n                     0)" (( "(") (pointer_expression "*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" (* "*") (cast_expression "(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0x2c)" (( "(") (binary_expression "*(int *)(iVar4 + 0xd0) + 0x2c" (pointer_expression "*(int *)(iVar4 + 0xd0)" (* "*") (cast_expression "(int *)(iVar4 + 0xd0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0xd0)" (( "(") (binary_expression "iVar4 + 0xd0" (identifier "iVar4") (+ "+") (number_literal "0xd0")) () ")")))) (+ "+") (number_literal "0x2c")) () ")")))) (, ",") (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (>> ">>") (number_literal "0x20")) () ")"))) (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    piVar5 = *(int **)(iVar3 + 4);\n    if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }\n    if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }\n    if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }\n    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;\n    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);\n  }" ({ "{") (expression_statement "piVar5 = *(int **)(iVar3 + 4);" (assignment_expression "piVar5 = *(int **)(iVar3 + 4)" (identifier "piVar5") (= "=") (pointer_expression "*(int **)(iVar3 + 4)" (* "*") (cast_expression "(int **)(iVar3 + 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (*piVar5 == 0) {\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }\n    else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" (if "if") (parenthesized_expression "(*piVar5 == 0)" (( "(") (binary_expression "*piVar5 == 0" (pointer_expression "*piVar5" (* "*") (identifier "piVar5")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      piVar5 = (int *)FUN_0004ac20();\n      if (piVar5 == (int *)0x0) goto LAB_00098d67;\n      sVar2 = *(short *)((int)piVar5 + 0x1e);\n    }" ({ "{") (expression_statement "piVar5 = (int *)FUN_0004ac20();" (assignment_expression "piVar5 = (int *)FUN_0004ac20()" (identifier "piVar5") (= "=") (cast_expression "(int *)FUN_0004ac20()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004ac20()" (identifier "FUN_0004ac20") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00098d67;" (if "if") (parenthesized_expression "(piVar5 == (int *)0x0)" (( "(") (binary_expression "piVar5 == (int *)0x0" (identifier "piVar5") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00098d67;" (goto "goto") (statement_identifier "LAB_00098d67") (; ";"))) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e);" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e)" (identifier "sVar2") (= "=") (pointer_expression "*(short *)((int)piVar5 + 0x1e)" (* "*") (cast_expression "(short *)((int)piVar5 + 0x1e)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar5 + 0x1e)" (( "(") (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar5")) (+ "+") (number_literal "0x1e")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" (else "else") (compound_statement "{\n      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);\n      *piVar1 = *piVar1 + 1;\n      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;\n      *(short *)((int)piVar5 + 0x1e) = sVar2;\n    }" ({ "{") (expression_statement "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*(int *)(iVar4 + 0xd0) + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar4 + 0xd0) + 0xc)" (( "(") (binary_expression "*(int *)(iVar4 + 0xd0) + 0xc" (pointer_expression "*(int *)(iVar4 + 0xd0)" (* "*") (cast_expression "(int *)(iVar4 + 0xd0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0xd0)" (( "(") (binary_expression "iVar4 + 0xd0" (identifier "iVar4") (+ "+") (number_literal "0xd0")) () ")")))) (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (expression_statement "*piVar1 = *piVar1 + 1;" (assignment_expression "*piVar1 = *piVar1 + 1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + 1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;" (assignment_expression "sVar2 = *(short *)((int)piVar5 + 0x1e) + 1" (identifier "sVar2") (= "=") (binary_expression "*(short *)((int)piVar5 + 0x1e) + 1" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" (* "*") (cast_expression "(short *)((int)piVar5 + 0x1e)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar5 + 0x1e)" (( "(") (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar5")) (+ "+") (number_literal "0x1e")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(short *)((int)piVar5 + 0x1e) = sVar2;" (assignment_expression "*(short *)((int)piVar5 + 0x1e) = sVar2" (pointer_expression "*(short *)((int)piVar5 + 0x1e)" (* "*") (cast_expression "(short *)((int)piVar5 + 0x1e)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)piVar5 + 0x1e)" (( "(") (binary_expression "(int)piVar5 + 0x1e" (cast_expression "(int)piVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar5")) (+ "+") (number_literal "0x1e")) () ")")))) (= "=") (identifier "sVar2")) (; ";")) (} "}")))) (if_statement "if (sVar2 != 1) {\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" (if "if") (parenthesized_expression "(sVar2 != 1)" (( "(") (binary_expression "sVar2 != 1" (identifier "sVar2") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      iVar3 = FUN_00098af0();\n      if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }\n      FUN_0003be70();\n      iVar4 = *(int *)(iVar4 + 0x58);\n      goto joined_r0x00098d6e;\n    }" ({ "{") (expression_statement "iVar3 = FUN_00098af0();" (assignment_expression "iVar3 = FUN_00098af0()" (identifier "iVar3") (= "=") (call_expression "FUN_00098af0()" (identifier "FUN_00098af0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        (**(code **)(iVar4 + 0xc4))(piVar5);\n      }" ({ "{") (expression_statement "(**(code **)(iVar4 + 0xc4))(piVar5);" (call_expression "(**(code **)(iVar4 + 0xc4))(piVar5)" (parenthesized_expression "(**(code **)(iVar4 + 0xc4))" (( "(") (pointer_expression "**(code **)(iVar4 + 0xc4)" (* "*") (pointer_expression "*(code **)(iVar4 + 0xc4)" (* "*") (cast_expression "(code **)(iVar4 + 0xc4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0xc4)" (( "(") (binary_expression "iVar4 + 0xc4" (identifier "iVar4") (+ "+") (number_literal "0xc4")) () ")"))))) () ")")) (argument_list "(piVar5)" (( "(") (identifier "piVar5") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_0003be70();" (call_expression "FUN_0003be70()" (identifier "FUN_0003be70") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(iVar4 + 0x58)" (* "*") (cast_expression "(int *)(iVar4 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x58)" (( "(") (binary_expression "iVar4 + 0x58" (identifier "iVar4") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (goto_statement "goto joined_r0x00098d6e;" (goto "goto") (statement_identifier "joined_r0x00098d6e") (; ";")) (} "}"))) (if_statement "if ((*(byte *)(piVar5 + 7) & 2) != 0) {\n      FUN_0003ba40();\n    }" (if "if") (parenthesized_expression "((*(byte *)(piVar5 + 7) & 2) != 0)" (( "(") (binary_expression "(*(byte *)(piVar5 + 7) & 2) != 0" (parenthesized_expression "(*(byte *)(piVar5 + 7) & 2)" (( "(") (binary_expression "*(byte *)(piVar5 + 7) & 2" (pointer_expression "*(byte *)(piVar5 + 7)" (* "*") (cast_expression "(byte *)(piVar5 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar5 + 7)" (( "(") (binary_expression "piVar5 + 7" (identifier "piVar5") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0003ba40();\n    }" ({ "{") (expression_statement "FUN_0003ba40();" (call_expression "FUN_0003ba40()" (identifier "FUN_0003ba40") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;" (assignment_expression "*(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" (* "*") (cast_expression "(int *)(piVar5[3] + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar5[3] + 0xc)" (( "(") (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "*(int *)(piVar5[3] + 0xc) + -1" (pointer_expression "*(int *)(piVar5[3] + 0xc)" (* "*") (cast_expression "(int *)(piVar5[3] + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar5[3] + 0xc)" (( "(") (binary_expression "piVar5[3] + 0xc" (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);" (call_expression "(**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" (parenthesized_expression "(**(code **)(unaff_EDI + 0x1227c9))" (( "(") (pointer_expression "**(code **)(unaff_EDI + 0x1227c9)" (* "*") (pointer_expression "*(code **)(unaff_EDI + 0x1227c9)" (* "*") (cast_expression "(code **)(unaff_EDI + 0x1227c9)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x1227c9)" (( "(") (binary_expression "unaff_EDI + 0x1227c9" (identifier "unaff_EDI") (+ "+") (number_literal "0x1227c9")) () ")"))))) () ")")) (argument_list "(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1)" (( "(") (pointer_expression "*(undefined4 *)(piVar5[3] + 0x2c)" (* "*") (cast_expression "(undefined4 *)(piVar5[3] + 0x2c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar5[3] + 0x2c)" (( "(") (binary_expression "piVar5[3] + 0x2c" (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")) (+ "+") (number_literal "0x2c")) () ")")))) (, ",") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")) (, ",") (number_literal "1") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00098d67:\n  iVar4 = *(int *)(iVar4 + 0x58);" (statement_identifier "LAB_00098d67") (: ":") (expression_statement "iVar4 = *(int *)(iVar4 + 0x58);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x58)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(iVar4 + 0x58)" (* "*") (cast_expression "(int *)(iVar4 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x58)" (( "(") (binary_expression "iVar4 + 0x58" (identifier "iVar4") (+ "+") (number_literal "0x58")) () ")"))))) (; ";"))) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (labeled_statement "joined_r0x00098d6e:\n  if (iVar4 == 0) {\n    return iVar3;\n  }" (statement_identifier "joined_r0x00098d6e") (: ":") (if_statement "if (iVar4 == 0) {\n    return iVar3;\n  }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return iVar3;\n  }" ({ "{") (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}")))) (do_statement "do {\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  } while (iVar4 != 0);" (do "do") (compound_statement "{\n    *(undefined4 *)(iVar4 + 0x10) = 1;\n    iVar4 = *(int *)(iVar4 + 0x2c);\n  }" ({ "{") (expression_statement "*(undefined4 *)(iVar4 + 0x10) = 1;" (assignment_expression "*(undefined4 *)(iVar4 + 0x10) = 1" (pointer_expression "*(undefined4 *)(iVar4 + 0x10)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x10)" (( "(") (binary_expression "iVar4 + 0x10" (identifier "iVar4") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar4 = *(int *)(iVar4 + 0x2c);" (assignment_expression "iVar4 = *(int *)(iVar4 + 0x2c)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(iVar4 + 0x2c)" (* "*") (cast_expression "(int *)(iVar4 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x2c)" (( "(") (binary_expression "iVar4 + 0x2c" (identifier "iVar4") (+ "+") (number_literal "0x2c")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (; ";")) (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}")))

int function_1(void *pCtx,type_1 iPg)

{
  int *piVar1;
  short var_7;
  type_2 *pPager;
  type_3 *var_4;
  int var_9;
  int var_3;
  type_4 *var_6;
  type_1 pgno;
  int var_2;
  type_5 uVar5;
  
  uVar5 = var_1();
  pgno = (type_1)((type_6)uVar5 >> 0x20);
  var_3 = (int)uVar5;
  var_4 = (type_3 *)
          (**(type_7 **)(var_2 + 0x1227c5))(*(type_8 *)(*(int *)(var_3 + 0xd0) + 0x2c),pgno,0)
  ;
  if (var_4 != (type_3 *)0x0) {
    var_6 = (type_4 *)var_4->pExtra;
    if (var_6->var_4 == (type_3 *)0x0) {
      var_6 = var_5(*(type_9 **)(var_3 + 0xd0),pgno,var_4);
      if (var_6 == (type_4 *)0x0) goto LAB_00098d67;
      var_7 = var_6->nRef;
    }
    else {
      piVar1 = &(*(type_9 **)(var_3 + 0xd0))->nRefSum;
      *piVar1 = *piVar1 + 1;
      var_7 = var_6->nRef + 1;
      var_6->nRef = var_7;
    }
    if (var_7 != 1) {
      var_9 = var_8(var_6);
      if (var_9 == 0) {
        (**(type_7 **)(var_3 + 0xc4))(var_6);
      }
      var_10(var_6);
      var_3 = *(int *)(var_3 + 0x58);
      goto joined_r0x00098d6e;
    }
    if ((var_6->flags & 2) != 0) {
      var_11(var_6,'\x01');
    }
    piVar1 = &var_6->pCache->nRefSum;
    *piVar1 = *piVar1 + -1;
    (**(type_7 **)(var_2 + 0x1227c9))(var_6->pCache->pCache,var_6->var_4,1);
  }
LAB_00098d67:
  var_3 = *(int *)(var_3 + 0x58);
  var_9 = 0;
joined_r0x00098d6e:
  if (var_3 == 0) {
    return var_9;
  }
  do {
    *(type_8 *)(var_3 + 0x10) = 1;
    var_3 = *(int *)(var_3 + 0x2c);
  } while (var_3 != 0);
  return var_9;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) 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: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (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 (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (number_literal))))) (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) (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: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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: (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: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))))) alternative: (else_clause (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: (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: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (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: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (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)))))) (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))))))) (goto_statement label: (statement_identifier)))) (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 (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal)))) (expression_statement (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 (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) (pointer_expression argument: (identifier)) (number_literal)))))) (labeled_statement label: (statement_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: (number_literal))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier))))) (do_statement body: (compound_statement (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: (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)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement (identifier)))))

int MASKED(void)

{
  int *piVar1;
  short sVar2;
  int iVar3;
  int iVar4;
  int *piVar5;
  int unaff_EDI;
  undefined8 uVar6;
  
  uVar6 = FUN_0003a401();
  iVar4 = (int)uVar6;
  iVar3 = (**(code **)(unaff_EDI + 0x1227c5))
                    (*(undefined4 *)(*(int *)(iVar4 + 0xd0) + 0x2c),(int)((ulonglong)uVar6 >> 0x20),
                     0);
  if (iVar3 != 0) {
    piVar5 = *(int **)(iVar3 + 4);
    if (*piVar5 == 0) {
      piVar5 = (int *)FUN_0004ac20();
      if (piVar5 == (int *)0x0) goto LAB_00098d67;
      sVar2 = *(short *)((int)piVar5 + 0x1e);
    }
    else {
      piVar1 = (int *)(*(int *)(iVar4 + 0xd0) + 0xc);
      *piVar1 = *piVar1 + 1;
      sVar2 = *(short *)((int)piVar5 + 0x1e) + 1;
      *(short *)((int)piVar5 + 0x1e) = sVar2;
    }
    if (sVar2 != 1) {
      iVar3 = FUN_00098af0();
      if (iVar3 == 0) {
        (**(code **)(iVar4 + 0xc4))(piVar5);
      }
      FUN_0003be70();
      iVar4 = *(int *)(iVar4 + 0x58);
      goto joined_r0x00098d6e;
    }
    if ((*(byte *)(piVar5 + 7) & 2) != 0) {
      FUN_0003ba40();
    }
    *(int *)(piVar5[3] + 0xc) = *(int *)(piVar5[3] + 0xc) + -1;
    (**(code **)(unaff_EDI + 0x1227c9))(*(undefined4 *)(piVar5[3] + 0x2c),*piVar5,1);
  }
LAB_00098d67:
  iVar4 = *(int *)(iVar4 + 0x58);
  iVar3 = 0;
joined_r0x00098d6e:
  if (iVar4 == 0) {
    return iVar3;
  }
  do {
    *(undefined4 *)(iVar4 + 0x10) = 1;
    iVar4 = *(int *)(iVar4 + 0x2c);
  } while (iVar4 != 0);
  return iVar3;
}

