
reg_errcode_t
get_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,
              Idx bkref_node,Idx bkref_str)

{
  int iVar1;
  int iVar2;
  re_match_context_t *mctx_00;
  reg_errcode_t rVar3;
  int iVar4;
  re_backref_cache_entry *prVar5;
  Idx *extraout_ECX;
  int *piVar6;
  undefined8 uVar7;
  re_backref_cache_entry *local_38;
  int local_28;
  
  uVar7 = __x86_get_pc_thunk_di();
  piVar6 = (int *)((ulonglong)uVar7 >> 0x20);
  mctx_00 = (re_match_context_t *)uVar7;
  rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],
                        (Idx)mctx,(Idx)sub_top,8);
  if (rVar3 != _REG_NOERROR) {
    return rVar3;
  }
  iVar1 = *piVar6;
  iVar2 = extraout_ECX[1];
  local_38 = mctx_00->bkref_ents;
  iVar4 = mctx_00->nbkref_ents;
  local_28 = iVar2;
  if (mctx_00->abkref_ents <= iVar4) {
    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);
    if (prVar5 == (re_backref_cache_entry *)0x0) {
      free(mctx_00->bkref_ents);
      return _REG_ESPACE;
    }
    mctx_00->bkref_ents = prVar5;
    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);
    local_38 = mctx_00->bkref_ents;
    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;
    iVar4 = mctx_00->nbkref_ents;
    local_28 = extraout_ECX[1];
  }
  if ((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)) {
    local_38[iVar4 + -1].more = '\x01';
  }
  local_38 = local_38 + iVar4;
  local_38->node = (Idx)mctx;
  local_38->str_idx = (Idx)sub_top;
  local_38->subexp_from = iVar1;
  local_38->subexp_to = iVar2;
  local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1);
  mctx_00->nbkref_ents = iVar4 + 1;
  local_38->more = '\0';
  if (mctx_00->max_mb_elem_len < iVar2 - iVar1) {
    mctx_00->max_mb_elem_len = iVar2 - iVar1;
  }
  rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6));
  return rVar3;
}



int FUN_00044710(undefined4 param_1,int param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  void *pvVar5;
  undefined4 *extraout_ECX;
  int iVar6;
  undefined4 *puVar7;
  undefined8 uVar8;
  void *local_38;
  
  uVar8 = FUN_0002e565();
  iVar4 = (int)uVar8;
  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);
  if (iVar2 != 0) {
    return iVar2;
  }
  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);
  iVar1 = extraout_ECX[1];
  local_38 = *(void **)(iVar4 + 0x74);
  iVar3 = *(int *)(iVar4 + 0x6c);
  if (*(int *)(iVar4 + 0x70) <= iVar3) {
    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);
    if (pvVar5 == (void *)0x0) {
      free(*(void **)(iVar4 + 0x74));
      return 0xc;
    }
    *(void **)(iVar4 + 0x74) = pvVar5;
    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);
    local_38 = *(void **)(iVar4 + 0x74);
    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;
    iVar3 = *(int *)(iVar4 + 0x6c);
  }
  iVar6 = iVar3 * 0x14;
  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {
    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;
  }
  puVar7 = (undefined4 *)((int)local_38 + iVar6);
  *puVar7 = param_1;
  puVar7[1] = param_2;
  puVar7[2] = iVar2;
  puVar7[3] = iVar1;
  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);
  *(int *)(iVar4 + 0x6c) = iVar3 + 1;
  *(undefined1 *)(puVar7 + 4) = 0;
  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {
    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;
  }
  iVar4 = FUN_0003e2d0();
  return iVar4;
}


PUSH EBP
PUSH EDI
CALL 0x0002e565
ADD EDI,0x264b9
PUSH ESI
MOV ESI,EAX
LEA EAX,[ECX + 0x8]
PUSH EBX
MOV EBX,EDX
SUB ESP,0x30
MOV EBP,dword ptr [ESP + 0x44]
MOV dword ptr [ESP + 0xc],EDX
MOV dword ptr [ESP + 0x10],EDI
MOV EDI,dword ptr [ESP + 0x48]
PUSH 0x8
PUSH EDI
PUSH EBP
PUSH dword ptr [ECX + 0x4]
PUSH dword ptr [ECX]
MOV dword ptr [ESP + 0x1c],ECX
PUSH EAX
PUSH ESI
CALL 0x00043890
ADD ESP,0x20
TEST EAX,EAX
JZ 0x00044760
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,dword ptr [EBX]
MOV ECX,dword ptr [ESP + 0x4]
MOV dword ptr [ESP + 0x1c],EBX
MOV EBX,dword ptr [ESI + 0x70]
MOV EAX,dword ptr [ECX + 0x4]
MOV dword ptr [ESP + 0x10],EBX
MOV EBX,dword ptr [ESI + 0x74]
MOV EDX,EAX
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESI + 0x6c]
MOV dword ptr [ESP + 0x4],EBX
MOV dword ptr [ESP + 0x14],EDX
CMP EAX,dword ptr [ESP + 0x10]
JGE 0x00044810
LEA ECX,[EAX + EAX*0x4]
SHL ECX,0x2
TEST EAX,EAX
JLE 0x000447a9
MOV EBX,dword ptr [ESP + 0x4]
LEA EBX,[EBX + ECX*0x1 + -0x14]
CMP EDI,dword ptr [EBX + 0x4]
JZ 0x00044800
MOV EDX,dword ptr [ESP + 0x4]
MOV EBX,dword ptr [ESP + 0x18]
ADD EDX,ECX
XOR ECX,ECX
MOV dword ptr [EDX],EBP
MOV EBP,dword ptr [ESP + 0x1c]
MOV dword ptr [EDX + 0x4],EDI
CMP EBX,EBP
MOV dword ptr [EDX + 0x8],EBP
SETZ CL
ADD EAX,0x1
MOV dword ptr [EDX + 0xc],EBX
NEG ECX
MOV word ptr [EDX + 0x12],CX
MOV dword ptr [ESI + 0x6c],EAX
MOV EAX,EBX
MOV byte ptr [EDX + 0x10],0x0
SUB EAX,EBP
CMP dword ptr [ESI + 0x78],EAX
JGE 0x000447e5
MOV dword ptr [ESI + 0x78],EAX
MOV EAX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ESP + 0x14]
ADD EDX,EDI
SUB EDX,dword ptr [EAX]
ADD ESP,0x2c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x0003e2d0
MOV byte ptr [EBX + 0x10],0x1
JMP 0x000447a9
MOV dword ptr [ESP + 0x14],ECX
SUB ESP,0x8
MOV EAX,dword ptr [ESP + 0x18]
LEA EAX,[EAX + EAX*0x4]
SHL EAX,0x3
PUSH EAX
PUSH dword ptr [ESP + 0x10]
MOV EBX,dword ptr [ESP + 0x1c]
CALL 0x00013540
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x14]
TEST EAX,EAX
JZ 0x00044888
MOV EDX,dword ptr [ESI + 0x70]
MOV EBX,dword ptr [ESI + 0x6c]
MOV dword ptr [ESP + 0x10],ECX
SUB ESP,0x4
MOV dword ptr [ESI + 0x74],EAX
LEA EBX,[EBX + EBX*0x4]
LEA EDX,[EDX + EDX*0x4]
SHL EDX,0x2
LEA EAX,[EAX + EBX*0x4]
PUSH EDX
PUSH 0x0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x1c]
CALL 0x000136b0
MOV ECX,dword ptr [ESP + 0x20]
MOV EBX,dword ptr [ESI + 0x74]
SHL dword ptr [ESI + 0x70],0x1
MOV EAX,dword ptr [ESI + 0x6c]
MOV EDX,dword ptr [ECX + 0x4]
MOV dword ptr [ESP + 0x14],EBX
MOV dword ptr [ESP + 0x24],EDX
ADD ESP,0x10
JMP 0x00044792
SUB ESP,0xc
PUSH dword ptr [ESI + 0x74]
MOV EBX,dword ptr [ESP + 0x1c]
CALL 0x00013200
ADD ESP,0x10
MOV EAX,0xc
JMP 0x00044754
(translation_unit "int FUN_00044710(undefined4 param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}\n\n" (function_definition "int FUN_00044710(undefined4 param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" primitive_type (function_declarator "FUN_00044710(undefined4 param_1,int param_2)" identifier (parameter_list "(undefined4 param_1,int param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "void *pvVar5;" primitive_type (pointer_declarator "*pvVar5" * identifier) ;) (declaration "undefined4 *extraout_ECX;" type_identifier (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "void *local_38;" primitive_type (pointer_declarator "*local_38" * identifier) ;) (expression_statement "uVar8 = FUN_0002e565();" (assignment_expression "uVar8 = FUN_0002e565()" identifier = (call_expression "FUN_0002e565()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar4 = (int)uVar8;" (assignment_expression "iVar4 = (int)uVar8" identifier = (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);" (assignment_expression "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" identifier = (call_expression "FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" identifier (argument_list "(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" ( identifier , (binary_expression "extraout_ECX + 2" identifier + number_literal) , (pointer_expression "*extraout_ECX" * identifier) , (subscript_expression "extraout_ECX[1]" identifier [ number_literal ]) , identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return iVar2;\n  }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);" (assignment_expression "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20)" identifier = (pointer_expression "*(int *)((ulonglong)uVar8 >> 0x20)" * (cast_expression "(int *)((ulonglong)uVar8 >> 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar8 >> 0x20)" ( (binary_expression "(ulonglong)uVar8 >> 0x20" (cast_expression "(ulonglong)uVar8" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) (expression_statement "iVar1 = extraout_ECX[1];" (assignment_expression "iVar1 = extraout_ECX[1]" identifier = (subscript_expression "extraout_ECX[1]" identifier [ number_literal ])) ;) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" identifier = (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x70) <= iVar3)" ( (binary_expression "*(int *)(iVar4 + 0x70) <= iVar3" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" { (expression_statement "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);" (assignment_expression "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" identifier = (call_expression "realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" identifier (argument_list "(local_38,*(int *)(iVar4 + 0x70) * 0x28)" ( identifier , (binary_expression "*(int *)(iVar4 + 0x70) * 0x28" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) * number_literal) )))) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" { (expression_statement "free(*(void **)(iVar4 + 0x74));" (call_expression "free(*(void **)(iVar4 + 0x74))" identifier (argument_list "(*(void **)(iVar4 + 0x74))" ( (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) )))) ))) ;) (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(void **)(iVar4 + 0x74) = pvVar5;" (assignment_expression "*(void **)(iVar4 + 0x74) = pvVar5" (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) )))) = identifier) ;) (expression_statement "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);" (call_expression "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" identifier (argument_list "((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" ( (cast_expression "(void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" ( (binary_expression "(int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14" (cast_expression "(int)pvVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "*(int *)(iVar4 + 0x6c) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) )))) * number_literal)) ))) , number_literal , (binary_expression "*(int *)(iVar4 + 0x70) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) * number_literal) ))) ;) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" identifier = (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;" (assignment_expression "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) = (binary_expression "*(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) ))))) ;) })) (expression_statement "iVar6 = iVar3 * 0x14;" (assignment_expression "iVar6 = iVar3 * 0x14" identifier = (binary_expression "iVar3 * 0x14" identifier * number_literal)) ;) (if_statement "if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" if (parenthesized_expression "((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10)))" ( (binary_expression "(0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" ( (binary_expression "param_2 == *(int *)((int)local_38 + iVar6 + -0x10)" identifier == (pointer_expression "*(int *)((int)local_38 + iVar6 + -0x10)" * (cast_expression "(int *)((int)local_38 + iVar6 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6 + -0x10)" ( (binary_expression "(int)local_38 + iVar6 + -0x10" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))))) ))) )) (compound_statement "{\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" { (expression_statement "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1;" (assignment_expression "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1" (pointer_expression "*(undefined1 *)((int)local_38 + iVar6 + -4)" * (cast_expression "(undefined1 *)((int)local_38 + iVar6 + -4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6 + -4)" ( (binary_expression "(int)local_38 + iVar6 + -4" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) })) (expression_statement "puVar7 = (undefined4 *)((int)local_38 + iVar6);" (assignment_expression "puVar7 = (undefined4 *)((int)local_38 + iVar6)" identifier = (cast_expression "(undefined4 *)((int)local_38 + iVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6)" ( (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "*puVar7 = param_1;" (assignment_expression "*puVar7 = param_1" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[2] = iVar2;" (assignment_expression "puVar7[2] = iVar2" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = iVar1;" (assignment_expression "puVar7[3] = iVar1" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);" (assignment_expression "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2)" (pointer_expression "*(ushort *)((int)puVar7 + 0x12)" * (cast_expression "(ushort *)((int)puVar7 + 0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar7 + 0x12)" ( (binary_expression "(int)puVar7 + 0x12" (cast_expression "(int)puVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (unary_expression "-(ushort)(iVar1 == iVar2)" - (call_expression "(ushort)(iVar1 == iVar2)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar1 == iVar2)" ( (binary_expression "iVar1 == iVar2" identifier == identifier) ))))) ;) (expression_statement "*(int *)(iVar4 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(iVar4 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(puVar7 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar7 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar7 + 4)" * (cast_expression "(undefined1 *)(puVar7 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 4)" ( (binary_expression "puVar7 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x78) < iVar1 - iVar2)" ( (binary_expression "*(int *)(iVar4 + 0x78) < iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" * (cast_expression "(int *)(iVar4 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x78)" ( (binary_expression "iVar4 + 0x78" identifier + number_literal) )))) < (binary_expression "iVar1 - iVar2" identifier - identifier)) )) (compound_statement "{\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" { (expression_statement "*(int *)(iVar4 + 0x78) = iVar1 - iVar2;" (assignment_expression "*(int *)(iVar4 + 0x78) = iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" * (cast_expression "(int *)(iVar4 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x78)" ( (binary_expression "iVar4 + 0x78" identifier + number_literal) )))) = (binary_expression "iVar1 - iVar2" identifier - identifier)) ;) })) (expression_statement "iVar4 = FUN_0003e2d0();" (assignment_expression "iVar4 = FUN_0003e2d0()" identifier = (call_expression "FUN_0003e2d0()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "reg_errcode_t\nget_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)\n\n{\n  int iVar1;\n  int iVar2;\n  re_match_context_t *mctx_00;\n  reg_errcode_t rVar3;\n  int iVar4;\n  re_backref_cache_entry *prVar5;\n  Idx *extraout_ECX;\n  int *piVar6;\n  undefined8 uVar7;\n  re_backref_cache_entry *local_38;\n  int local_28;\n  \n  uVar7 = __x86_get_pc_thunk_di();\n  piVar6 = (int *)((ulonglong)uVar7 >> 0x20);\n  mctx_00 = (re_match_context_t *)uVar7;\n  rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8);\n  if (rVar3 != _REG_NOERROR) {\n    return rVar3;\n  }\n  iVar1 = *piVar6;\n  iVar2 = extraout_ECX[1];\n  local_38 = mctx_00->bkref_ents;\n  iVar4 = mctx_00->nbkref_ents;\n  local_28 = iVar2;\n  if (mctx_00->abkref_ents <= iVar4) {\n    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);\n    if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx_00->bkref_ents = prVar5;\n    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);\n    local_38 = mctx_00->bkref_ents;\n    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;\n    iVar4 = mctx_00->nbkref_ents;\n    local_28 = extraout_ECX[1];\n  }\n  if ((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)) {\n    local_38[iVar4 + -1].more = '\x01';\n  }\n  local_38 = local_38 + iVar4;\n  local_38->node = (Idx)mctx;\n  local_38->str_idx = (Idx)sub_top;\n  local_38->subexp_from = iVar1;\n  local_38->subexp_to = iVar2;\n  local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1);\n  mctx_00->nbkref_ents = iVar4 + 1;\n  local_38->more = '\0';\n  if (mctx_00->max_mb_elem_len < iVar2 - iVar1) {\n    mctx_00->max_mb_elem_len = iVar2 - iVar1;\n  }\n  rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6));\n  return rVar3;\n}\n\n" (function_definition "reg_errcode_t\nget_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)\n\n{\n  int iVar1;\n  int iVar2;\n  re_match_context_t *mctx_00;\n  reg_errcode_t rVar3;\n  int iVar4;\n  re_backref_cache_entry *prVar5;\n  Idx *extraout_ECX;\n  int *piVar6;\n  undefined8 uVar7;\n  re_backref_cache_entry *local_38;\n  int local_28;\n  \n  uVar7 = __x86_get_pc_thunk_di();\n  piVar6 = (int *)((ulonglong)uVar7 >> 0x20);\n  mctx_00 = (re_match_context_t *)uVar7;\n  rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8);\n  if (rVar3 != _REG_NOERROR) {\n    return rVar3;\n  }\n  iVar1 = *piVar6;\n  iVar2 = extraout_ECX[1];\n  local_38 = mctx_00->bkref_ents;\n  iVar4 = mctx_00->nbkref_ents;\n  local_28 = iVar2;\n  if (mctx_00->abkref_ents <= iVar4) {\n    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);\n    if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx_00->bkref_ents = prVar5;\n    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);\n    local_38 = mctx_00->bkref_ents;\n    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;\n    iVar4 = mctx_00->nbkref_ents;\n    local_28 = extraout_ECX[1];\n  }\n  if ((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)) {\n    local_38[iVar4 + -1].more = '\x01';\n  }\n  local_38 = local_38 + iVar4;\n  local_38->node = (Idx)mctx;\n  local_38->str_idx = (Idx)sub_top;\n  local_38->subexp_from = iVar1;\n  local_38->subexp_to = iVar2;\n  local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1);\n  mctx_00->nbkref_ents = iVar4 + 1;\n  local_38->more = '\0';\n  if (mctx_00->max_mb_elem_len < iVar2 - iVar1) {\n    mctx_00->max_mb_elem_len = iVar2 - iVar1;\n  }\n  rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6));\n  return rVar3;\n}" type_identifier (function_declarator "get_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)" identifier (parameter_list "(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)" ( (parameter_declaration "re_match_context_t *mctx" type_identifier (pointer_declarator "*mctx" * identifier)) , (parameter_declaration "re_sub_match_top_t *sub_top" type_identifier (pointer_declarator "*sub_top" * identifier)) , (parameter_declaration "re_sub_match_last_t *sub_last" type_identifier (pointer_declarator "*sub_last" * identifier)) , (parameter_declaration "Idx bkref_node" type_identifier identifier) , (parameter_declaration "Idx bkref_str" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  re_match_context_t *mctx_00;\n  reg_errcode_t rVar3;\n  int iVar4;\n  re_backref_cache_entry *prVar5;\n  Idx *extraout_ECX;\n  int *piVar6;\n  undefined8 uVar7;\n  re_backref_cache_entry *local_38;\n  int local_28;\n  \n  uVar7 = __x86_get_pc_thunk_di();\n  piVar6 = (int *)((ulonglong)uVar7 >> 0x20);\n  mctx_00 = (re_match_context_t *)uVar7;\n  rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8);\n  if (rVar3 != _REG_NOERROR) {\n    return rVar3;\n  }\n  iVar1 = *piVar6;\n  iVar2 = extraout_ECX[1];\n  local_38 = mctx_00->bkref_ents;\n  iVar4 = mctx_00->nbkref_ents;\n  local_28 = iVar2;\n  if (mctx_00->abkref_ents <= iVar4) {\n    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);\n    if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx_00->bkref_ents = prVar5;\n    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);\n    local_38 = mctx_00->bkref_ents;\n    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;\n    iVar4 = mctx_00->nbkref_ents;\n    local_28 = extraout_ECX[1];\n  }\n  if ((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)) {\n    local_38[iVar4 + -1].more = '\x01';\n  }\n  local_38 = local_38 + iVar4;\n  local_38->node = (Idx)mctx;\n  local_38->str_idx = (Idx)sub_top;\n  local_38->subexp_from = iVar1;\n  local_38->subexp_to = iVar2;\n  local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1);\n  mctx_00->nbkref_ents = iVar4 + 1;\n  local_38->more = '\0';\n  if (mctx_00->max_mb_elem_len < iVar2 - iVar1) {\n    mctx_00->max_mb_elem_len = iVar2 - iVar1;\n  }\n  rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6));\n  return rVar3;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "re_match_context_t *mctx_00;" type_identifier (pointer_declarator "*mctx_00" * identifier) ;) (declaration "reg_errcode_t rVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "re_backref_cache_entry *prVar5;" type_identifier (pointer_declarator "*prVar5" * identifier) ;) (declaration "Idx *extraout_ECX;" type_identifier (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "re_backref_cache_entry *local_38;" type_identifier (pointer_declarator "*local_38" * identifier) ;) (declaration "int local_28;" primitive_type identifier ;) (expression_statement "uVar7 = __x86_get_pc_thunk_di();" (assignment_expression "uVar7 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "piVar6 = (int *)((ulonglong)uVar7 >> 0x20);" (assignment_expression "piVar6 = (int *)((ulonglong)uVar7 >> 0x20)" identifier = (cast_expression "(int *)((ulonglong)uVar7 >> 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar7 >> 0x20)" ( (binary_expression "(ulonglong)uVar7 >> 0x20" (cast_expression "(ulonglong)uVar7" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "mctx_00 = (re_match_context_t *)uVar7;" (assignment_expression "mctx_00 = (re_match_context_t *)uVar7" identifier = (cast_expression "(re_match_context_t *)uVar7" ( (type_descriptor "re_match_context_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8);" (assignment_expression "rVar3 = check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8)" identifier = (call_expression "check_arrival(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8)" identifier (argument_list "(mctx_00,(state_array_t *)(extraout_ECX + 2),*extraout_ECX,extraout_ECX[1],\n                        (Idx)mctx,(Idx)sub_top,8)" ( identifier , (cast_expression "(state_array_t *)(extraout_ECX + 2)" ( (type_descriptor "state_array_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(extraout_ECX + 2)" ( (binary_expression "extraout_ECX + 2" identifier + number_literal) ))) , (pointer_expression "*extraout_ECX" * identifier) , (subscript_expression "extraout_ECX[1]" identifier [ number_literal ]) , (cast_expression "(Idx)mctx" ( (type_descriptor "Idx" type_identifier) ) identifier) , (cast_expression "(Idx)sub_top" ( (type_descriptor "Idx" type_identifier) ) identifier) , number_literal )))) ;) (if_statement "if (rVar3 != _REG_NOERROR) {\n    return rVar3;\n  }" if (parenthesized_expression "(rVar3 != _REG_NOERROR)" ( (binary_expression "rVar3 != _REG_NOERROR" identifier != identifier) )) (compound_statement "{\n    return rVar3;\n  }" { (return_statement "return rVar3;" return identifier ;) })) (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar2 = extraout_ECX[1];" (assignment_expression "iVar2 = extraout_ECX[1]" identifier = (subscript_expression "extraout_ECX[1]" identifier [ number_literal ])) ;) (expression_statement "local_38 = mctx_00->bkref_ents;" (assignment_expression "local_38 = mctx_00->bkref_ents" identifier = (field_expression "mctx_00->bkref_ents" identifier -> field_identifier)) ;) (expression_statement "iVar4 = mctx_00->nbkref_ents;" (assignment_expression "iVar4 = mctx_00->nbkref_ents" identifier = (field_expression "mctx_00->nbkref_ents" identifier -> field_identifier)) ;) (expression_statement "local_28 = iVar2;" (assignment_expression "local_28 = iVar2" identifier = identifier) ;) (if_statement "if (mctx_00->abkref_ents <= iVar4) {\n    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);\n    if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx_00->bkref_ents = prVar5;\n    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);\n    local_38 = mctx_00->bkref_ents;\n    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;\n    iVar4 = mctx_00->nbkref_ents;\n    local_28 = extraout_ECX[1];\n  }" if (parenthesized_expression "(mctx_00->abkref_ents <= iVar4)" ( (binary_expression "mctx_00->abkref_ents <= iVar4" (field_expression "mctx_00->abkref_ents" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n    prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);\n    if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx_00->bkref_ents = prVar5;\n    memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);\n    local_38 = mctx_00->bkref_ents;\n    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;\n    iVar4 = mctx_00->nbkref_ents;\n    local_28 = extraout_ECX[1];\n  }" { (expression_statement "prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28);" (assignment_expression "prVar5 = (re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28)" identifier = (cast_expression "(re_backref_cache_entry *)realloc(local_38,mctx_00->abkref_ents * 0x28)" ( (type_descriptor "re_backref_cache_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "realloc(local_38,mctx_00->abkref_ents * 0x28)" identifier (argument_list "(local_38,mctx_00->abkref_ents * 0x28)" ( identifier , (binary_expression "mctx_00->abkref_ents * 0x28" (field_expression "mctx_00->abkref_ents" identifier -> field_identifier) * number_literal) ))))) ;) (if_statement "if (prVar5 == (re_backref_cache_entry *)0x0) {\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(prVar5 == (re_backref_cache_entry *)0x0)" ( (binary_expression "prVar5 == (re_backref_cache_entry *)0x0" identifier == (cast_expression "(re_backref_cache_entry *)0x0" ( (type_descriptor "re_backref_cache_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(mctx_00->bkref_ents);\n      return _REG_ESPACE;\n    }" { (expression_statement "free(mctx_00->bkref_ents);" (call_expression "free(mctx_00->bkref_ents)" identifier (argument_list "(mctx_00->bkref_ents)" ( (field_expression "mctx_00->bkref_ents" identifier -> field_identifier) ))) ;) (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "mctx_00->bkref_ents = prVar5;" (assignment_expression "mctx_00->bkref_ents = prVar5" (field_expression "mctx_00->bkref_ents" identifier -> field_identifier) = identifier) ;) (expression_statement "memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);" (call_expression "memset(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14)" identifier (argument_list "(prVar5 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14)" ( (binary_expression "prVar5 + mctx_00->nbkref_ents" identifier + (field_expression "mctx_00->nbkref_ents" identifier -> field_identifier)) , number_literal , (binary_expression "mctx_00->abkref_ents * 0x14" (field_expression "mctx_00->abkref_ents" identifier -> field_identifier) * number_literal) ))) ;) (expression_statement "local_38 = mctx_00->bkref_ents;" (assignment_expression "local_38 = mctx_00->bkref_ents" identifier = (field_expression "mctx_00->bkref_ents" identifier -> field_identifier)) ;) (expression_statement "mctx_00->abkref_ents = mctx_00->abkref_ents << 1;" (assignment_expression "mctx_00->abkref_ents = mctx_00->abkref_ents << 1" (field_expression "mctx_00->abkref_ents" identifier -> field_identifier) = (binary_expression "mctx_00->abkref_ents << 1" (field_expression "mctx_00->abkref_ents" identifier -> field_identifier) << number_literal)) ;) (expression_statement "iVar4 = mctx_00->nbkref_ents;" (assignment_expression "iVar4 = mctx_00->nbkref_ents" identifier = (field_expression "mctx_00->nbkref_ents" identifier -> field_identifier)) ;) (expression_statement "local_28 = extraout_ECX[1];" (assignment_expression "local_28 = extraout_ECX[1]" identifier = (subscript_expression "extraout_ECX[1]" identifier [ number_literal ])) ;) })) (if_statement "if ((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)) {\n    local_38[iVar4 + -1].more = '\x01';\n  }" if (parenthesized_expression "((0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx))" ( (binary_expression "(0 < iVar4) && (sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)" (parenthesized_expression "(0 < iVar4)" ( (binary_expression "0 < iVar4" number_literal < identifier) )) && (parenthesized_expression "(sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx)" ( (binary_expression "sub_top == (re_sub_match_top_t *)local_38[iVar4 + -1].str_idx" identifier == (cast_expression "(re_sub_match_top_t *)local_38[iVar4 + -1].str_idx" ( (type_descriptor "re_sub_match_top_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "local_38[iVar4 + -1].str_idx" (subscript_expression "local_38[iVar4 + -1]" identifier [ (binary_expression "iVar4 + -1" identifier + number_literal) ]) . field_identifier))) ))) )) (compound_statement "{\n    local_38[iVar4 + -1].more = '\x01';\n  }" { (expression_statement "local_38[iVar4 + -1].more = '\x01';" (assignment_expression "local_38[iVar4 + -1].more = '\x01'" (field_expression "local_38[iVar4 + -1].more" (subscript_expression "local_38[iVar4 + -1]" identifier [ (binary_expression "iVar4 + -1" identifier + number_literal) ]) . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) })) (expression_statement "local_38 = local_38 + iVar4;" (assignment_expression "local_38 = local_38 + iVar4" identifier = (binary_expression "local_38 + iVar4" identifier + identifier)) ;) (expression_statement "local_38->node = (Idx)mctx;" (assignment_expression "local_38->node = (Idx)mctx" (field_expression "local_38->node" identifier -> field_identifier) = (cast_expression "(Idx)mctx" ( (type_descriptor "Idx" type_identifier) ) identifier)) ;) (expression_statement "local_38->str_idx = (Idx)sub_top;" (assignment_expression "local_38->str_idx = (Idx)sub_top" (field_expression "local_38->str_idx" identifier -> field_identifier) = (cast_expression "(Idx)sub_top" ( (type_descriptor "Idx" type_identifier) ) identifier)) ;) (expression_statement "local_38->subexp_from = iVar1;" (assignment_expression "local_38->subexp_from = iVar1" (field_expression "local_38->subexp_from" identifier -> field_identifier) = identifier) ;) (expression_statement "local_38->subexp_to = iVar2;" (assignment_expression "local_38->subexp_to = iVar2" (field_expression "local_38->subexp_to" identifier -> field_identifier) = identifier) ;) (expression_statement "local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1);" (assignment_expression "local_38->eps_reachable_subexps_map = -(ushort)(iVar2 == iVar1)" (field_expression "local_38->eps_reachable_subexps_map" identifier -> field_identifier) = (unary_expression "-(ushort)(iVar2 == iVar1)" - (call_expression "(ushort)(iVar2 == iVar1)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar2 == iVar1)" ( (binary_expression "iVar2 == iVar1" identifier == identifier) ))))) ;) (expression_statement "mctx_00->nbkref_ents = iVar4 + 1;" (assignment_expression "mctx_00->nbkref_ents = iVar4 + 1" (field_expression "mctx_00->nbkref_ents" identifier -> field_identifier) = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "local_38->more = '\0';" (assignment_expression "local_38->more = '\0'" (field_expression "local_38->more" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (mctx_00->max_mb_elem_len < iVar2 - iVar1) {\n    mctx_00->max_mb_elem_len = iVar2 - iVar1;\n  }" if (parenthesized_expression "(mctx_00->max_mb_elem_len < iVar2 - iVar1)" ( (binary_expression "mctx_00->max_mb_elem_len < iVar2 - iVar1" (field_expression "mctx_00->max_mb_elem_len" identifier -> field_identifier) < (binary_expression "iVar2 - iVar1" identifier - identifier)) )) (compound_statement "{\n    mctx_00->max_mb_elem_len = iVar2 - iVar1;\n  }" { (expression_statement "mctx_00->max_mb_elem_len = iVar2 - iVar1;" (assignment_expression "mctx_00->max_mb_elem_len = iVar2 - iVar1" (field_expression "mctx_00->max_mb_elem_len" identifier -> field_identifier) = (binary_expression "iVar2 - iVar1" identifier - identifier)) ;) })) (expression_statement "rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6));" (assignment_expression "rVar3 = clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6))" identifier = (call_expression "clean_state_log_if_needed(mctx_00,(int)sub_top + (local_28 - *piVar6))" identifier (argument_list "(mctx_00,(int)sub_top + (local_28 - *piVar6))" ( identifier , (binary_expression "(int)sub_top + (local_28 - *piVar6)" (cast_expression "(int)sub_top" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(local_28 - *piVar6)" ( (binary_expression "local_28 - *piVar6" identifier - (pointer_expression "*piVar6" * identifier)) ))) )))) ;) (return_statement "return rVar3;" return identifier ;) })))
(translation_unit "int FUN_00044710(undefined4 param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}\n\n" (function_definition "int FUN_00044710(undefined4 param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" primitive_type (function_declarator "FUN_00044710(undefined4 param_1,int param_2)" identifier (parameter_list "(undefined4 param_1,int param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "void *pvVar5;" primitive_type (pointer_declarator "*pvVar5" * identifier) ;) (declaration "undefined4 *extraout_ECX;" type_identifier (pointer_declarator "*extraout_ECX" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "void *local_38;" primitive_type (pointer_declarator "*local_38" * identifier) ;) (expression_statement "uVar8 = FUN_0002e565();" (assignment_expression "uVar8 = FUN_0002e565()" identifier = (call_expression "FUN_0002e565()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar4 = (int)uVar8;" (assignment_expression "iVar4 = (int)uVar8" identifier = (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);" (assignment_expression "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" identifier = (call_expression "FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" identifier (argument_list "(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" ( identifier , (binary_expression "extraout_ECX + 2" identifier + number_literal) , (pointer_expression "*extraout_ECX" * identifier) , (subscript_expression "extraout_ECX[1]" identifier [ number_literal ]) , identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return iVar2;\n  }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);" (assignment_expression "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20)" identifier = (pointer_expression "*(int *)((ulonglong)uVar8 >> 0x20)" * (cast_expression "(int *)((ulonglong)uVar8 >> 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar8 >> 0x20)" ( (binary_expression "(ulonglong)uVar8 >> 0x20" (cast_expression "(ulonglong)uVar8" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))))) ;) (expression_statement "iVar1 = extraout_ECX[1];" (assignment_expression "iVar1 = extraout_ECX[1]" identifier = (subscript_expression "extraout_ECX[1]" identifier [ number_literal ])) ;) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" identifier = (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x70) <= iVar3)" ( (binary_expression "*(int *)(iVar4 + 0x70) <= iVar3" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" { (expression_statement "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);" (assignment_expression "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" identifier = (call_expression "realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" identifier (argument_list "(local_38,*(int *)(iVar4 + 0x70) * 0x28)" ( identifier , (binary_expression "*(int *)(iVar4 + 0x70) * 0x28" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) * number_literal) )))) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" { (expression_statement "free(*(void **)(iVar4 + 0x74));" (call_expression "free(*(void **)(iVar4 + 0x74))" identifier (argument_list "(*(void **)(iVar4 + 0x74))" ( (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) )))) ))) ;) (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(void **)(iVar4 + 0x74) = pvVar5;" (assignment_expression "*(void **)(iVar4 + 0x74) = pvVar5" (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) )))) = identifier) ;) (expression_statement "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);" (call_expression "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" identifier (argument_list "((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" ( (cast_expression "(void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" ( (binary_expression "(int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14" (cast_expression "(int)pvVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "*(int *)(iVar4 + 0x6c) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) )))) * number_literal)) ))) , number_literal , (binary_expression "*(int *)(iVar4 + 0x70) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) * number_literal) ))) ;) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" identifier = (pointer_expression "*(void **)(iVar4 + 0x74)" * (cast_expression "(void **)(iVar4 + 0x74)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x74)" ( (binary_expression "iVar4 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;" (assignment_expression "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) = (binary_expression "*(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" * (cast_expression "(int *)(iVar4 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x70)" ( (binary_expression "iVar4 + 0x70" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" identifier = (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) ))))) ;) })) (expression_statement "iVar6 = iVar3 * 0x14;" (assignment_expression "iVar6 = iVar3 * 0x14" identifier = (binary_expression "iVar3 * 0x14" identifier * number_literal)) ;) (if_statement "if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" if (parenthesized_expression "((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10)))" ( (binary_expression "(0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" ( (binary_expression "param_2 == *(int *)((int)local_38 + iVar6 + -0x10)" identifier == (pointer_expression "*(int *)((int)local_38 + iVar6 + -0x10)" * (cast_expression "(int *)((int)local_38 + iVar6 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6 + -0x10)" ( (binary_expression "(int)local_38 + iVar6 + -0x10" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) ))))) ))) )) (compound_statement "{\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" { (expression_statement "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1;" (assignment_expression "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1" (pointer_expression "*(undefined1 *)((int)local_38 + iVar6 + -4)" * (cast_expression "(undefined1 *)((int)local_38 + iVar6 + -4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6 + -4)" ( (binary_expression "(int)local_38 + iVar6 + -4" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) })) (expression_statement "puVar7 = (undefined4 *)((int)local_38 + iVar6);" (assignment_expression "puVar7 = (undefined4 *)((int)local_38 + iVar6)" identifier = (cast_expression "(undefined4 *)((int)local_38 + iVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_38 + iVar6)" ( (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "*puVar7 = param_1;" (assignment_expression "*puVar7 = param_1" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[2] = iVar2;" (assignment_expression "puVar7[2] = iVar2" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = iVar1;" (assignment_expression "puVar7[3] = iVar1" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);" (assignment_expression "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2)" (pointer_expression "*(ushort *)((int)puVar7 + 0x12)" * (cast_expression "(ushort *)((int)puVar7 + 0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar7 + 0x12)" ( (binary_expression "(int)puVar7 + 0x12" (cast_expression "(int)puVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (unary_expression "-(ushort)(iVar1 == iVar2)" - (call_expression "(ushort)(iVar1 == iVar2)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar1 == iVar2)" ( (binary_expression "iVar1 == iVar2" identifier == identifier) ))))) ;) (expression_statement "*(int *)(iVar4 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(iVar4 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(iVar4 + 0x6c)" * (cast_expression "(int *)(iVar4 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x6c)" ( (binary_expression "iVar4 + 0x6c" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(puVar7 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar7 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar7 + 4)" * (cast_expression "(undefined1 *)(puVar7 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 4)" ( (binary_expression "puVar7 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" if (parenthesized_expression "(*(int *)(iVar4 + 0x78) < iVar1 - iVar2)" ( (binary_expression "*(int *)(iVar4 + 0x78) < iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" * (cast_expression "(int *)(iVar4 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x78)" ( (binary_expression "iVar4 + 0x78" identifier + number_literal) )))) < (binary_expression "iVar1 - iVar2" identifier - identifier)) )) (compound_statement "{\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" { (expression_statement "*(int *)(iVar4 + 0x78) = iVar1 - iVar2;" (assignment_expression "*(int *)(iVar4 + 0x78) = iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" * (cast_expression "(int *)(iVar4 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x78)" ( (binary_expression "iVar4 + 0x78" identifier + number_literal) )))) = (binary_expression "iVar1 - iVar2" identifier - identifier)) ;) })) (expression_statement "iVar4 = FUN_0003e2d0();" (assignment_expression "iVar4 = FUN_0003e2d0()" identifier = (call_expression "FUN_0003e2d0()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (pointer_expression * IDENT) , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) ))) , LIT , (binary_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 * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == IDENT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression IDENT - IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return IDENT ;) })))
(function_definition "int FUN_00044710(undefined4 param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" (primitive_type "int") (function_declarator "FUN_00044710(undefined4 param_1,int param_2)" (identifier "FUN_00044710") (parameter_list "(undefined4 param_1,int param_2)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  void *pvVar5;\n  undefined4 *extraout_ECX;\n  int iVar6;\n  undefined4 *puVar7;\n  undefined8 uVar8;\n  void *local_38;\n  \n  uVar8 = FUN_0002e565();\n  iVar4 = (int)uVar8;\n  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);\n  iVar1 = extraout_ECX[1];\n  local_38 = *(void **)(iVar4 + 0x74);\n  iVar3 = *(int *)(iVar4 + 0x6c);\n  if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }\n  iVar6 = iVar3 * 0x14;\n  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }\n  puVar7 = (undefined4 *)((int)local_38 + iVar6);\n  *puVar7 = param_1;\n  puVar7[1] = param_2;\n  puVar7[2] = iVar2;\n  puVar7[3] = iVar1;\n  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);\n  *(int *)(iVar4 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar7 + 4) = 0;\n  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }\n  iVar4 = FUN_0003e2d0();\n  return iVar4;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "void *pvVar5;" (primitive_type "void") (pointer_declarator "*pvVar5" (* "*") (identifier "pvVar5")) (; ";")) (declaration "undefined4 *extraout_ECX;" (type_identifier "undefined4") (pointer_declarator "*extraout_ECX" (* "*") (identifier "extraout_ECX")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined8 uVar8;" (type_identifier "undefined8") (identifier "uVar8") (; ";")) (declaration "void *local_38;" (primitive_type "void") (pointer_declarator "*local_38" (* "*") (identifier "local_38")) (; ";")) (expression_statement "uVar8 = FUN_0002e565();" (assignment_expression "uVar8 = FUN_0002e565()" (identifier "uVar8") (= "=") (call_expression "FUN_0002e565()" (identifier "FUN_0002e565") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "iVar4 = (int)uVar8;" (assignment_expression "iVar4 = (int)uVar8" (identifier "iVar4") (= "=") (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8"))) (; ";")) (expression_statement "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);" (assignment_expression "iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" (identifier "iVar2") (= "=") (call_expression "FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" (identifier "FUN_00043890") (argument_list "(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8)" (( "(") (identifier "iVar4") (, ",") (binary_expression "extraout_ECX + 2" (identifier "extraout_ECX") (+ "+") (number_literal "2")) (, ",") (pointer_expression "*extraout_ECX" (* "*") (identifier "extraout_ECX")) (, ",") (subscript_expression "extraout_ECX[1]" (identifier "extraout_ECX") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "8") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return iVar2;\n  }" ({ "{") (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (expression_statement "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);" (assignment_expression "iVar2 = *(int *)((ulonglong)uVar8 >> 0x20)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)((ulonglong)uVar8 >> 0x20)" (* "*") (cast_expression "(int *)((ulonglong)uVar8 >> 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulonglong)uVar8 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar8 >> 0x20" (cast_expression "(ulonglong)uVar8" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar8")) (>> ">>") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "iVar1 = extraout_ECX[1];" (assignment_expression "iVar1 = extraout_ECX[1]" (identifier "iVar1") (= "=") (subscript_expression "extraout_ECX[1]" (identifier "extraout_ECX") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" (identifier "local_38") (= "=") (pointer_expression "*(void **)(iVar4 + 0x74)" (* "*") (cast_expression "(void **)(iVar4 + 0x74)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x74)" (( "(") (binary_expression "iVar4 + 0x74" (identifier "iVar4") (+ "+") (number_literal "0x74")) () ")"))))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar4 + 0x6c)" (* "*") (cast_expression "(int *)(iVar4 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x6c)" (( "(") (binary_expression "iVar4 + 0x6c" (identifier "iVar4") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (if_statement "if (*(int *)(iVar4 + 0x70) <= iVar3) {\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar4 + 0x70) <= iVar3)" (( "(") (binary_expression "*(int *)(iVar4 + 0x70) <= iVar3" (pointer_expression "*(int *)(iVar4 + 0x70)" (* "*") (cast_expression "(int *)(iVar4 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x70)" (( "(") (binary_expression "iVar4 + 0x70" (identifier "iVar4") (+ "+") (number_literal "0x70")) () ")")))) (<= "<=") (identifier "iVar3")) () ")")) (compound_statement "{\n    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);\n    if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }\n    *(void **)(iVar4 + 0x74) = pvVar5;\n    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);\n    local_38 = *(void **)(iVar4 + 0x74);\n    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;\n    iVar3 = *(int *)(iVar4 + 0x6c);\n  }" ({ "{") (expression_statement "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);" (assignment_expression "pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" (identifier "pvVar5") (= "=") (call_expression "realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28)" (identifier "realloc") (argument_list "(local_38,*(int *)(iVar4 + 0x70) * 0x28)" (( "(") (identifier "local_38") (, ",") (binary_expression "*(int *)(iVar4 + 0x70) * 0x28" (pointer_expression "*(int *)(iVar4 + 0x70)" (* "*") (cast_expression "(int *)(iVar4 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x70)" (( "(") (binary_expression "iVar4 + 0x70" (identifier "iVar4") (+ "+") (number_literal "0x70")) () ")")))) (* "*") (number_literal "0x28")) () ")")))) (; ";")) (if_statement "if (pvVar5 == (void *)0x0) {\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(pvVar5 == (void *)0x0)" (( "(") (binary_expression "pvVar5 == (void *)0x0" (identifier "pvVar5") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free(*(void **)(iVar4 + 0x74));\n      return 0xc;\n    }" ({ "{") (expression_statement "free(*(void **)(iVar4 + 0x74));" (call_expression "free(*(void **)(iVar4 + 0x74))" (identifier "free") (argument_list "(*(void **)(iVar4 + 0x74))" (( "(") (pointer_expression "*(void **)(iVar4 + 0x74)" (* "*") (cast_expression "(void **)(iVar4 + 0x74)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x74)" (( "(") (binary_expression "iVar4 + 0x74" (identifier "iVar4") (+ "+") (number_literal "0x74")) () ")")))) () ")"))) (; ";")) (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "*(void **)(iVar4 + 0x74) = pvVar5;" (assignment_expression "*(void **)(iVar4 + 0x74) = pvVar5" (pointer_expression "*(void **)(iVar4 + 0x74)" (* "*") (cast_expression "(void **)(iVar4 + 0x74)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x74)" (( "(") (binary_expression "iVar4 + 0x74" (identifier "iVar4") (+ "+") (number_literal "0x74")) () ")")))) (= "=") (identifier "pvVar5")) (; ";")) (expression_statement "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);" (call_expression "memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" (identifier "memset") (argument_list "((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14)" (( "(") (cast_expression "(void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14)" (( "(") (binary_expression "(int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14" (cast_expression "(int)pvVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar5")) (+ "+") (binary_expression "*(int *)(iVar4 + 0x6c) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x6c)" (* "*") (cast_expression "(int *)(iVar4 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x6c)" (( "(") (binary_expression "iVar4 + 0x6c" (identifier "iVar4") (+ "+") (number_literal "0x6c")) () ")")))) (* "*") (number_literal "0x14"))) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "*(int *)(iVar4 + 0x70) * 0x14" (pointer_expression "*(int *)(iVar4 + 0x70)" (* "*") (cast_expression "(int *)(iVar4 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x70)" (( "(") (binary_expression "iVar4 + 0x70" (identifier "iVar4") (+ "+") (number_literal "0x70")) () ")")))) (* "*") (number_literal "0x14")) () ")"))) (; ";")) (expression_statement "local_38 = *(void **)(iVar4 + 0x74);" (assignment_expression "local_38 = *(void **)(iVar4 + 0x74)" (identifier "local_38") (= "=") (pointer_expression "*(void **)(iVar4 + 0x74)" (* "*") (cast_expression "(void **)(iVar4 + 0x74)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x74)" (( "(") (binary_expression "iVar4 + 0x74" (identifier "iVar4") (+ "+") (number_literal "0x74")) () ")"))))) (; ";")) (expression_statement "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;" (assignment_expression "*(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" (* "*") (cast_expression "(int *)(iVar4 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x70)" (( "(") (binary_expression "iVar4 + 0x70" (identifier "iVar4") (+ "+") (number_literal "0x70")) () ")")))) (= "=") (binary_expression "*(int *)(iVar4 + 0x70) << 1" (pointer_expression "*(int *)(iVar4 + 0x70)" (* "*") (cast_expression "(int *)(iVar4 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x70)" (( "(") (binary_expression "iVar4 + 0x70" (identifier "iVar4") (+ "+") (number_literal "0x70")) () ")")))) (<< "<<") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar4 + 0x6c);" (assignment_expression "iVar3 = *(int *)(iVar4 + 0x6c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar4 + 0x6c)" (* "*") (cast_expression "(int *)(iVar4 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x6c)" (( "(") (binary_expression "iVar4 + 0x6c" (identifier "iVar4") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar6 = iVar3 * 0x14;" (assignment_expression "iVar6 = iVar3 * 0x14" (identifier "iVar6") (= "=") (binary_expression "iVar3 * 0x14" (identifier "iVar3") (* "*") (number_literal "0x14"))) (; ";")) (if_statement "if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" (if "if") (parenthesized_expression "((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10)))" (( "(") (binary_expression "(0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (&& "&&") (parenthesized_expression "(param_2 == *(int *)((int)local_38 + iVar6 + -0x10))" (( "(") (binary_expression "param_2 == *(int *)((int)local_38 + iVar6 + -0x10)" (identifier "param_2") (== "==") (pointer_expression "*(int *)((int)local_38 + iVar6 + -0x10)" (* "*") (cast_expression "(int *)((int)local_38 + iVar6 + -0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_38 + iVar6 + -0x10)" (( "(") (binary_expression "(int)local_38 + iVar6 + -0x10" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_38")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-0x10")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;\n  }" ({ "{") (expression_statement "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1;" (assignment_expression "*(undefined1 *)((int)local_38 + iVar6 + -4) = 1" (pointer_expression "*(undefined1 *)((int)local_38 + iVar6 + -4)" (* "*") (cast_expression "(undefined1 *)((int)local_38 + iVar6 + -4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_38 + iVar6 + -4)" (( "(") (binary_expression "(int)local_38 + iVar6 + -4" (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_38")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-4")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}"))) (expression_statement "puVar7 = (undefined4 *)((int)local_38 + iVar6);" (assignment_expression "puVar7 = (undefined4 *)((int)local_38 + iVar6)" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)((int)local_38 + iVar6)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_38 + iVar6)" (( "(") (binary_expression "(int)local_38 + iVar6" (cast_expression "(int)local_38" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_38")) (+ "+") (identifier "iVar6")) () ")")))) (; ";")) (expression_statement "*puVar7 = param_1;" (assignment_expression "*puVar7 = param_1" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "puVar7[2] = iVar2;" (assignment_expression "puVar7[2] = iVar2" (subscript_expression "puVar7[2]" (identifier "puVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "puVar7[3] = iVar1;" (assignment_expression "puVar7[3] = iVar1" (subscript_expression "puVar7[3]" (identifier "puVar7") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);" (assignment_expression "*(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2)" (pointer_expression "*(ushort *)((int)puVar7 + 0x12)" (* "*") (cast_expression "(ushort *)((int)puVar7 + 0x12)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar7 + 0x12)" (( "(") (binary_expression "(int)puVar7 + 0x12" (cast_expression "(int)puVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar7")) (+ "+") (number_literal "0x12")) () ")")))) (= "=") (unary_expression "-(ushort)(iVar1 == iVar2)" (- "-") (call_expression "(ushort)(iVar1 == iVar2)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(iVar1 == iVar2)" (( "(") (binary_expression "iVar1 == iVar2" (identifier "iVar1") (== "==") (identifier "iVar2")) () ")"))))) (; ";")) (expression_statement "*(int *)(iVar4 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(iVar4 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(iVar4 + 0x6c)" (* "*") (cast_expression "(int *)(iVar4 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x6c)" (( "(") (binary_expression "iVar4 + 0x6c" (identifier "iVar4") (+ "+") (number_literal "0x6c")) () ")")))) (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined1 *)(puVar7 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar7 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar7 + 4)" (* "*") (cast_expression "(undefined1 *)(puVar7 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 4)" (( "(") (binary_expression "puVar7 + 4" (identifier "puVar7") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar4 + 0x78) < iVar1 - iVar2)" (( "(") (binary_expression "*(int *)(iVar4 + 0x78) < iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" (* "*") (cast_expression "(int *)(iVar4 + 0x78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x78)" (( "(") (binary_expression "iVar4 + 0x78" (identifier "iVar4") (+ "+") (number_literal "0x78")) () ")")))) (< "<") (binary_expression "iVar1 - iVar2" (identifier "iVar1") (- "-") (identifier "iVar2"))) () ")")) (compound_statement "{\n    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;\n  }" ({ "{") (expression_statement "*(int *)(iVar4 + 0x78) = iVar1 - iVar2;" (assignment_expression "*(int *)(iVar4 + 0x78) = iVar1 - iVar2" (pointer_expression "*(int *)(iVar4 + 0x78)" (* "*") (cast_expression "(int *)(iVar4 + 0x78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x78)" (( "(") (binary_expression "iVar4 + 0x78" (identifier "iVar4") (+ "+") (number_literal "0x78")) () ")")))) (= "=") (binary_expression "iVar1 - iVar2" (identifier "iVar1") (- "-") (identifier "iVar2"))) (; ";")) (} "}"))) (expression_statement "iVar4 = FUN_0003e2d0();" (assignment_expression "iVar4 = FUN_0003e2d0()" (identifier "iVar4") (= "=") (call_expression "FUN_0003e2d0()" (identifier "FUN_0003e2d0") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}")))

type_1
function_1(type_2 *mctx,type_3 *var_11,type_4 *sub_last,
              type_5 bkref_node,type_5 bkref_str)

{
  int var_14;
  int var_13;
  type_2 *mctx_00;
  type_1 var_4;
  int var_6;
  type_6 *var_8;
  type_5 *var_3;
  int *piVar6;
  type_7 uVar7;
  type_6 *var_12;
  int var_16;
  
  uVar7 = var_1();
  piVar6 = (int *)((type_8)uVar7 >> 0x20);
  mctx_00 = (type_2 *)uVar7;
  var_4 = var_2(mctx_00,(type_9 *)(var_3 + 2),*var_3,var_3[1],
                        (type_5)mctx,(type_5)var_11,8);
  if (var_4 != var_5) {
    return var_4;
  }
  var_14 = *piVar6;
  var_13 = var_3[1];
  var_12 = mctx_00->bkref_ents;
  var_6 = mctx_00->nbkref_ents;
  var_16 = var_13;
  if (mctx_00->abkref_ents <= var_6) {
    var_8 = (type_6 *)var_7(var_12,mctx_00->abkref_ents * 0x28);
    if (var_8 == (type_6 *)0x0) {
      var_9(mctx_00->bkref_ents);
      return _REG_ESPACE;
    }
    mctx_00->bkref_ents = var_8;
    var_10(var_8 + mctx_00->nbkref_ents,0,mctx_00->abkref_ents * 0x14);
    var_12 = mctx_00->bkref_ents;
    mctx_00->abkref_ents = mctx_00->abkref_ents << 1;
    var_6 = mctx_00->nbkref_ents;
    var_16 = var_3[1];
  }
  if ((0 < var_6) && (var_11 == (type_3 *)var_12[var_6 + -1].str_idx)) {
    var_12[var_6 + -1].more = '\x01';
  }
  var_12 = var_12 + var_6;
  var_12->node = (type_5)mctx;
  var_12->str_idx = (type_5)var_11;
  var_12->subexp_from = var_14;
  var_12->subexp_to = var_13;
  var_12->eps_reachable_subexps_map = -(ushort)(var_13 == var_14);
  mctx_00->nbkref_ents = var_6 + 1;
  var_12->more = '\0';
  if (mctx_00->max_mb_elem_len < var_13 - var_14) {
    mctx_00->max_mb_elem_len = var_13 - var_14;
  }
  var_4 = var_15(mctx_00,(int)var_11 + (var_16 - *piVar6));
  return var_4;
}


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

int MASKED(undefined4 param_1,int param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  void *pvVar5;
  undefined4 *extraout_ECX;
  int iVar6;
  undefined4 *puVar7;
  undefined8 uVar8;
  void *local_38;
  
  uVar8 = FUN_0002e565();
  iVar4 = (int)uVar8;
  iVar2 = FUN_00043890(iVar4,extraout_ECX + 2,*extraout_ECX,extraout_ECX[1],param_1,param_2,8);
  if (iVar2 != 0) {
    return iVar2;
  }
  iVar2 = *(int *)((ulonglong)uVar8 >> 0x20);
  iVar1 = extraout_ECX[1];
  local_38 = *(void **)(iVar4 + 0x74);
  iVar3 = *(int *)(iVar4 + 0x6c);
  if (*(int *)(iVar4 + 0x70) <= iVar3) {
    pvVar5 = realloc(local_38,*(int *)(iVar4 + 0x70) * 0x28);
    if (pvVar5 == (void *)0x0) {
      free(*(void **)(iVar4 + 0x74));
      return 0xc;
    }
    *(void **)(iVar4 + 0x74) = pvVar5;
    memset((void *)((int)pvVar5 + *(int *)(iVar4 + 0x6c) * 0x14),0,*(int *)(iVar4 + 0x70) * 0x14);
    local_38 = *(void **)(iVar4 + 0x74);
    *(int *)(iVar4 + 0x70) = *(int *)(iVar4 + 0x70) << 1;
    iVar3 = *(int *)(iVar4 + 0x6c);
  }
  iVar6 = iVar3 * 0x14;
  if ((0 < iVar3) && (param_2 == *(int *)((int)local_38 + iVar6 + -0x10))) {
    *(undefined1 *)((int)local_38 + iVar6 + -4) = 1;
  }
  puVar7 = (undefined4 *)((int)local_38 + iVar6);
  *puVar7 = param_1;
  puVar7[1] = param_2;
  puVar7[2] = iVar2;
  puVar7[3] = iVar1;
  *(ushort *)((int)puVar7 + 0x12) = -(ushort)(iVar1 == iVar2);
  *(int *)(iVar4 + 0x6c) = iVar3 + 1;
  *(undefined1 *)(puVar7 + 4) = 0;
  if (*(int *)(iVar4 + 0x78) < iVar1 - iVar2) {
    *(int *)(iVar4 + 0x78) = iVar1 - iVar2;
  }
  iVar4 = FUN_0003e2d0();
  return iVar4;
}

