
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void close_all(Descriptors * this) */

void __thiscall gold::Descriptors::close_all(Descriptors *this)

{
  Lock *pLVar1;
  char *pcVar2;
  int iVar3;
  int *piVar4;
  char *pcVar5;
  char *format;
  pointer pOVar6;
  pointer pOVar7;
  ulong uVar8;
  
  pLVar1 = this->lock_;
  if (pLVar1 == (Lock *)0x0) {
    pOVar6 = (this->open_descriptors_).
             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
             ._M_impl._M_start;
    if (pOVar6 == (this->open_descriptors_).
                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                  ._M_impl._M_finish) {
      this->stack_top_ = -1;
      return;
    }
  }
  else {
    (*pLVar1->lock_->_vptr_Lock_impl[2])();
    pOVar6 = (this->open_descriptors_).
             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
             ._M_impl._M_start;
    if (pOVar6 == (this->open_descriptors_).
                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                  ._M_impl._M_finish) {
      this->stack_top_ = -1;
      goto LAB_00298a6e;
    }
  }
  uVar8 = 0;
  do {
    pOVar7 = pOVar6 + uVar8;
    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))
    {
                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */
      iVar3 = close((int)uVar8);
      if (iVar3 < 0) {
        piVar4 = __errno_location();
        pcVar5 = strerror(*piVar4);
        pcVar2 = pOVar7->name;
        format = (char *)gettext("while closing %s: %s");
        gold_warning(format,pcVar2,pcVar5);
      }
      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */
        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",
                      uVar8 & 0xffffffff,pOVar7->name);
      }
      pOVar7->name = (char *)0x0;
      pOVar6 = (this->open_descriptors_).
               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
               ._M_impl._M_start;
      pOVar7->stack_next = -1;
      pOVar7->is_on_stack = false;
    }
    uVar8 = uVar8 + 1;
  } while (uVar8 < (ulong)((long)(this->open_descriptors_).
                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                                 ._M_impl._M_finish - (long)pOVar6 >> 4));
  this->stack_top_ = -1;
  if (pLVar1 == (Lock *)0x0) {
    return;
  }
LAB_00298a6e:
                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*pLVar1->lock_->_vptr_Lock_impl[3])();
  return;
}



void FUN_002989a0(long *param_1)

{
  undefined8 *puVar1;
  int iVar2;
  int *piVar3;
  char *pcVar4;
  undefined8 uVar5;
  long lVar6;
  long *plVar7;
  ulong uVar8;
  
  puVar1 = (undefined8 *)*param_1;
  if (puVar1 == (undefined8 *)0x0) {
    lVar6 = param_1[5];
    if (lVar6 == param_1[6]) {
      *(undefined4 *)(param_1 + 8) = 0xffffffff;
      return;
    }
  }
  else {
    (**(code **)(*(long *)*puVar1 + 0x10))();
    lVar6 = param_1[5];
    if (lVar6 == param_1[6]) {
      *(undefined4 *)(param_1 + 8) = 0xffffffff;
      goto LAB_00298a6e;
    }
  }
  uVar8 = 0;
  do {
    plVar7 = (long *)(uVar8 * 0x10 + lVar6);
    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&
       (*(char *)((long)plVar7 + 0xd) == '\0')) {
                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */
      iVar2 = close((int)uVar8);
      if (iVar2 < 0) {
        piVar3 = __errno_location();
        pcVar4 = strerror(*piVar3);
        lVar6 = *plVar7;
        uVar5 = gettext("while closing %s: %s");
        FUN_001783d0(uVar5,lVar6,pcVar4);
      }
      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {
                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */
        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",
                     uVar8 & 0xffffffff,*plVar7);
      }
      *plVar7 = 0;
      lVar6 = param_1[5];
      *(undefined4 *)(plVar7 + 1) = 0xffffffff;
      *(undefined1 *)((long)plVar7 + 0xe) = 0;
    }
    uVar8 = uVar8 + 1;
  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));
  *(undefined4 *)(param_1 + 8) = 0xffffffff;
  if (puVar1 == (undefined8 *)0x0) {
    return;
  }
LAB_00298a6e:
                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(long *)*puVar1 + 0x18))();
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDI
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV R13,qword ptr [RDI]
TEST R13,R13
JZ 0x00298ab0
MOV RDI,qword ptr [R13]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
MOV RDX,qword ptr [R12 + 0x28]
CMP RDX,qword ptr [R12 + 0x30]
JZ 0x00298b18
XOR EBP,EBP
LEA R15,[0x38b18c]
JMP 0x002989fd
MOV RAX,qword ptr [R12 + 0x30]
ADD RBP,0x1
SUB RAX,RDX
SAR RAX,0x4
CMP RBP,RAX
JNC 0x00298a60
MOV RBX,RBP
SHL RBX,0x4
ADD RBX,RDX
CMP qword ptr [RBX],0x0
JZ 0x002989e8
CMP byte ptr [RBX + 0xc],0x0
JNZ 0x002989e8
CMP byte ptr [RBX + 0xd],0x0
JNZ 0x002989e8
MOV EDI,EBP
MOV R14D,EBP
CALL 0x00147160
TEST EAX,EAX
JS 0x00298ae0
MOV RAX,qword ptr [0x0043e6b0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x00298a3f
TEST byte ptr [RAX + 0x24],0x4
JNZ 0x00298a90
MOV qword ptr [RBX],0x0
MOV RDX,qword ptr [R12 + 0x28]
MOV dword ptr [RBX + 0x8],0xffffffff
MOV byte ptr [RBX + 0xe],0x0
JMP 0x002989e8
MOV dword ptr [R12 + 0x40],0xffffffff
TEST R13,R13
JZ 0x00298ac7
MOV RDI,qword ptr [R13]
MOV RAX,qword ptr [RDI]
MOV RAX,qword ptr [RAX + 0x18]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP RAX
MOV RDI,qword ptr [RAX]
MOV RCX,qword ptr [RBX]
MOV EDX,R14D
LEA RSI,[0x38b1e0]
XOR EAX,EAX
CALL 0x00178100
JMP 0x00298a3f
MOV RDX,qword ptr [RDI + 0x28]
CMP RDX,qword ptr [RDI + 0x30]
JNZ 0x002989d7
MOV dword ptr [R12 + 0x40],0xffffffff
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x00147770
MOV EDI,dword ptr [RAX]
CALL 0x00147610
MOV RSI,qword ptr [RBX]
MOV RDI,R15
MOV qword ptr [RSP + 0x8],RAX
MOV qword ptr [RSP],RSI
CALL 0x00147320
MOV RDX,qword ptr [RSP + 0x8]
MOV RSI,qword ptr [RSP]
MOV RDI,RAX
XOR EAX,EAX
CALL 0x001783d0
JMP 0x00298a2b
MOV dword ptr [R12 + 0x40],0xffffffff
JMP 0x00298a6e
(translation_unit "void FUN_002989a0(long *param_1)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}\n\n" (function_definition "void FUN_002989a0(long *param_1)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" primitive_type (function_declarator "FUN_002989a0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (expression_statement "puVar1 = (undefined8 *)*param_1;" (assignment_expression "puVar1 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" if (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" ( (binary_expression "puVar1 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }" { (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" if (parenthesized_expression "(lVar6 == param_1[6])" ( (binary_expression "lVar6 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" else (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" { (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x10)" ( (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" if (parenthesized_expression "(lVar6 == param_1[6])" ( (binary_expression "lVar6 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_00298a6e;" goto statement_identifier ;) })) }))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));" do (compound_statement "{\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  }" { (expression_statement "plVar7 = (long *)(uVar8 * 0x10 + lVar6);" (assignment_expression "plVar7 = (long *)(uVar8 * 0x10 + lVar6)" identifier = (cast_expression "(long *)(uVar8 * 0x10 + lVar6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 * 0x10 + lVar6)" ( (binary_expression "uVar8 * 0x10 + lVar6" (binary_expression "uVar8 * 0x10" identifier * number_literal) + identifier) )))) ;) (if_statement "if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" if (parenthesized_expression "(((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0'))" ( (binary_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')" (parenthesized_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0'))" ( (binary_expression "(*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')" (parenthesized_expression "(*plVar7 != 0)" ( (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" * identifier) != number_literal) )) && (parenthesized_expression "(*(char *)((long)plVar7 + 0xc) == '\0')" ( (binary_expression "*(char *)((long)plVar7 + 0xc) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xc)" * (cast_expression "(char *)((long)plVar7 + 0xc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xc)" ( (binary_expression "(long)plVar7 + 0xc" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(*(char *)((long)plVar7 + 0xd) == '\0')" ( (binary_expression "*(char *)((long)plVar7 + 0xd) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xd)" * (cast_expression "(char *)((long)plVar7 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xd)" ( (binary_expression "(long)plVar7 + 0xd" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" { comment (expression_statement "iVar2 = close((int)uVar8);" (assignment_expression "iVar2 = close((int)uVar8)" identifier = (call_expression "close((int)uVar8)" identifier (argument_list "((int)uVar8)" ( (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (if_statement "if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" if (parenthesized_expression "(iVar2 < 0)" ( (binary_expression "iVar2 < 0" identifier < number_literal) )) (compound_statement "{\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" { (expression_statement "piVar3 = __errno_location();" (assignment_expression "piVar3 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar4 = strerror(*piVar3);" (assignment_expression "pcVar4 = strerror(*piVar3)" identifier = (call_expression "strerror(*piVar3)" identifier (argument_list "(*piVar3)" ( (pointer_expression "*piVar3" * identifier) )))) ;) (expression_statement "lVar6 = *plVar7;" (assignment_expression "lVar6 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "uVar5 = gettext("while closing %s: %s");" (assignment_expression "uVar5 = gettext("while closing %s: %s")" identifier = (call_expression "gettext("while closing %s: %s")" identifier (argument_list "("while closing %s: %s")" ( (string_literal ""while closing %s: %s"" " string_content ") )))) ;) (expression_statement "FUN_001783d0(uVar5,lVar6,pcVar4);" (call_expression "FUN_001783d0(uVar5,lVar6,pcVar4)" identifier (argument_list "(uVar5,lVar6,pcVar4)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" if (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_0043e6b0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 4)" ( (binary_expression "PTR_DAT_0043e6b0[0x24] & 4" (subscript_expression "PTR_DAT_0043e6b0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" { comment (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" identifier (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" ( (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" * (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Closed descriptor %d for \"%s\" (close_all)"" " string_content escape_sequence string_content escape_sequence string_content ") , (binary_expression "uVar8 & 0xffffffff" identifier & number_literal) , (pointer_expression "*plVar7" * identifier) ))) ;) })) (expression_statement "*plVar7 = 0;" (assignment_expression "*plVar7 = 0" (pointer_expression "*plVar7" * identifier) = number_literal) ;) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "*(undefined4 *)(plVar7 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(plVar7 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(plVar7 + 1)" * (cast_expression "(undefined4 *)(plVar7 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 1)" ( (binary_expression "plVar7 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)plVar7 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0xe)" * (cast_expression "(undefined1 *)((long)plVar7 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xe)" ( (binary_expression "(long)plVar7 + 0xe" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) })) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar8 < (ulong)(param_1[6] - lVar6 >> 4))" ( (binary_expression "uVar8 < (ulong)(param_1[6] - lVar6 >> 4)" identifier < (call_expression "(ulong)(param_1[6] - lVar6 >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[6] - lVar6 >> 4)" ( (binary_expression "param_1[6] - lVar6 >> 4" (binary_expression "param_1[6] - lVar6" (subscript_expression "param_1[6]" identifier [ number_literal ]) - identifier) >> number_literal) )))) )) ;) (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }" if (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" ( (binary_expression "puVar1 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (**(code **)(*(long *)*puVar1 + 0x18))();" statement_identifier : comment comment (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;)) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void close_all(Descriptors * this) */\n\nvoid __thiscall gold::Descriptors::close_all(Descriptors *this)\n\n{\n  Lock *pLVar1;\n  char *pcVar2;\n  int iVar3;\n  int *piVar4;\n  char *pcVar5;\n  char *format;\n  pointer pOVar6;\n  pointer pOVar7;\n  ulong uVar8;\n  \n  pLVar1 = this->lock_;\n  if (pLVar1 == (Lock *)0x0) {\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }\n  }\n  else {\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    pOVar7 = pOVar6 + uVar8;\n    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4));\n  this->stack_top_ = -1;\n  if (pLVar1 == (Lock *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  return;\n}\n\n" comment comment (function_definition "void __thiscall gold::Descriptors::close_all(Descriptors *this)\n\n{\n  Lock *pLVar1;\n  char *pcVar2;\n  int iVar3;\n  int *piVar4;\n  char *pcVar5;\n  char *format;\n  pointer pOVar6;\n  pointer pOVar7;\n  ulong uVar8;\n  \n  pLVar1 = this->lock_;\n  if (pLVar1 == (Lock *)0x0) {\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }\n  }\n  else {\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    pOVar7 = pOVar6 + uVar8;\n    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4));\n  this->stack_top_ = -1;\n  if (pLVar1 == (Lock *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Descriptors::" identifier : : identifier : :) (function_declarator "close_all(Descriptors *this)" identifier (parameter_list "(Descriptors *this)" ( (parameter_declaration "Descriptors *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  Lock *pLVar1;\n  char *pcVar2;\n  int iVar3;\n  int *piVar4;\n  char *pcVar5;\n  char *format;\n  pointer pOVar6;\n  pointer pOVar7;\n  ulong uVar8;\n  \n  pLVar1 = this->lock_;\n  if (pLVar1 == (Lock *)0x0) {\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }\n  }\n  else {\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    pOVar7 = pOVar6 + uVar8;\n    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4));\n  this->stack_top_ = -1;\n  if (pLVar1 == (Lock *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  return;\n}" { (declaration "Lock *pLVar1;" type_identifier (pointer_declarator "*pLVar1" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "char *format;" primitive_type (pointer_declarator "*format" * identifier) ;) (declaration "pointer pOVar6;" type_identifier identifier ;) (declaration "pointer pOVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (pLVar1 == (Lock *)0x0) {\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }\n  }\n  else {\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }" if (parenthesized_expression "(pLVar1 == (Lock *)0x0)" ( (binary_expression "pLVar1 == (Lock *)0x0" identifier == (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }\n  }" { (ERROR "pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::" (assignment_expression "pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n             super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n             super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n             ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n             ._M_impl._M_start" (field_expression "Open_descriptor>_>\n             ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      return;\n    }" if (parenthesized_expression "(pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish)" ( (ERROR "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::" (comma_expression "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std" (binary_expression "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold" identifier == (binary_expression "(this->open_descriptors_).\n                  super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n                  super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Descriptors::Open_descriptor" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (field_expression "Open_descriptor>_>\n                  ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n                  ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n      this->stack_top_ = -1;\n      return;\n    }" { (expression_statement "this->stack_top_ = -1;" (assignment_expression "this->stack_top_ = -1" (field_expression "this->stack_top_" identifier -> field_identifier) = number_literal) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }" else (compound_statement "{\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;\n    if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }\n  }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (ERROR "pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold::" (assignment_expression "pOVar6 = (this->open_descriptors_).\n             super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n             super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n             super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n             ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n             ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n             ._M_impl._M_start" (field_expression "Open_descriptor>_>\n             ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if (pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish) {\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }" if (parenthesized_expression "(pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                  ._M_impl._M_finish)" ( (ERROR "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::" (comma_expression "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold::Descriptors::Open_descriptor,_std" (binary_expression "pOVar6 == (this->open_descriptors_).\n                  super__Vector_base<gold" identifier == (binary_expression "(this->open_descriptors_).\n                  super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n                  super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Descriptors::Open_descriptor" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (field_expression "Open_descriptor>_>\n                  ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n                  ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n      this->stack_top_ = -1;\n      goto LAB_00298a6e;\n    }" { (expression_statement "this->stack_top_ = -1;" (assignment_expression "this->stack_top_ = -1" (field_expression "this->stack_top_" identifier -> field_identifier) = number_literal) ;) (goto_statement "goto LAB_00298a6e;" goto statement_identifier ;) })) }))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n    pOVar7 = pOVar6 + uVar8;\n    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4));" do (compound_statement "{\n    pOVar7 = pOVar6 + uVar8;\n    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }\n    uVar8 = uVar8 + 1;\n  }" { (expression_statement "pOVar7 = pOVar6 + uVar8;" (assignment_expression "pOVar7 = pOVar6 + uVar8" identifier = (binary_expression "pOVar6 + uVar8" identifier + identifier)) ;) (if_statement "if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))\n    {\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }" if (parenthesized_expression "(((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))" ( (binary_expression "((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false)" (parenthesized_expression "((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false))" ( (binary_expression "(pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)" (parenthesized_expression "(pOVar7->name != (char *)0x0)" ( (binary_expression "pOVar7->name != (char *)0x0" (field_expression "pOVar7->name" identifier -> field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pOVar7->inuse == false)" ( (binary_expression "pOVar7->inuse == false" (field_expression "pOVar7->inuse" identifier -> field_identifier) == false) ))) )) && (parenthesized_expression "(pOVar7->is_write == false)" ( (binary_expression "pOVar7->is_write == false" (field_expression "pOVar7->is_write" identifier -> field_identifier) == false) ))) )) (compound_statement "{\n                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */\n      iVar3 = close((int)uVar8);\n      if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }\n      pOVar7->name = (char *)0x0;\n      pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;\n      pOVar7->stack_next = -1;\n      pOVar7->is_on_stack = false;\n    }" { comment (expression_statement "iVar3 = close((int)uVar8);" (assignment_expression "iVar3 = close((int)uVar8)" identifier = (call_expression "close((int)uVar8)" identifier (argument_list "((int)uVar8)" ( (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (if_statement "if (iVar3 < 0) {\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n        piVar4 = __errno_location();\n        pcVar5 = strerror(*piVar4);\n        pcVar2 = pOVar7->name;\n        format = (char *)gettext("while closing %s: %s");\n        gold_warning(format,pcVar2,pcVar5);\n      }" { (expression_statement "piVar4 = __errno_location();" (assignment_expression "piVar4 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar5 = strerror(*piVar4);" (assignment_expression "pcVar5 = strerror(*piVar4)" identifier = (call_expression "strerror(*piVar4)" identifier (argument_list "(*piVar4)" ( (pointer_expression "*piVar4" * identifier) )))) ;) (expression_statement "pcVar2 = pOVar7->name;" (assignment_expression "pcVar2 = pOVar7->name" identifier = (field_expression "pOVar7->name" identifier -> field_identifier)) ;) (expression_statement "format = (char *)gettext("while closing %s: %s");" (assignment_expression "format = (char *)gettext("while closing %s: %s")" identifier = (cast_expression "(char *)gettext("while closing %s: %s")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("while closing %s: %s")" identifier (argument_list "("while closing %s: %s")" ( (string_literal ""while closing %s: %s"" " string_content ") ))))) ;) (expression_statement "gold_warning(format,pcVar2,pcVar5);" (call_expression "gold_warning(format,pcVar2,pcVar5)" identifier (argument_list "(format,pcVar2,pcVar5)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }" if (parenthesized_expression "((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0))" ( (binary_expression "(parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)" (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((parameters->debug_ & 4) != 0)" ( (binary_expression "(parameters->debug_ & 4) != 0" (parenthesized_expression "(parameters->debug_ & 4)" ( (binary_expression "parameters->debug_ & 4" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */\n        Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);\n      }" { comment (labeled_statement "Errors::debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name);" (call_expression "debug(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name)" identifier (argument_list "(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",\n                      uVar8 & 0xffffffff,pOVar7->name)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Closed descriptor %d for \"%s\" (close_all)"" " string_content escape_sequence string_content escape_sequence string_content ") , (binary_expression "uVar8 & 0xffffffff" identifier & number_literal) , (field_expression "pOVar7->name" identifier -> field_identifier) ))) ;)) })) (expression_statement "pOVar7->name = (char *)0x0;" (assignment_expression "pOVar7->name = (char *)0x0" (field_expression "pOVar7->name" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (ERROR "pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold::" (assignment_expression "pOVar6 = (this->open_descriptors_).\n               super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n               super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n               super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n               ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n               ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n               ._M_impl._M_start" (field_expression "Open_descriptor>_>\n               ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (expression_statement "pOVar7->stack_next = -1;" (assignment_expression "pOVar7->stack_next = -1" (field_expression "pOVar7->stack_next" identifier -> field_identifier) = number_literal) ;) (expression_statement "pOVar7->is_on_stack = false;" (assignment_expression "pOVar7->is_on_stack = false" (field_expression "pOVar7->is_on_stack" identifier -> field_identifier) = false) ;) })) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4))" ( (binary_expression "uVar8 < (ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4)" identifier < (call_expression "(ulong)((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(this->open_descriptors_).\n                                 super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4)" ( (binary_expression "(long)(this->open_descriptors_).\n                                 super__Vector_base<gold" (cast_expression "(long)(this->open_descriptors_).\n                                 super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->open_descriptors_).\n                                 super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier)) < identifier) (ERROR "::Descriptors::Open_descriptor" : : identifier : : identifier) , (ERROR "_std::allocator<gold::Descriptors::" identifier : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6 >> 4" (binary_expression "Open_descriptor>_>\n                                 ._M_impl._M_finish - (long)pOVar6" (field_expression "Open_descriptor>_>\n                                 ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n                                 ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(long)pOVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) )))) )) ;) (expression_statement "this->stack_top_ = -1;" (assignment_expression "this->stack_top_ = -1" (field_expression "this->stack_top_" identifier -> field_identifier) = number_literal) ;) (if_statement "if (pLVar1 == (Lock *)0x0) {\n    return;\n  }" if (parenthesized_expression "(pLVar1 == (Lock *)0x0)" ( (binary_expression "pLVar1 == (Lock *)0x0" identifier == (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00298a6e:\n                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();" statement_identifier : comment comment (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;)) (return_statement "return;" return ;) })))
(translation_unit "void FUN_002989a0(long *param_1)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}\n\n" (function_definition "void FUN_002989a0(long *param_1)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" primitive_type (function_declarator "FUN_002989a0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (expression_statement "puVar1 = (undefined8 *)*param_1;" (assignment_expression "puVar1 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" if (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" ( (binary_expression "puVar1 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }" { (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" if (parenthesized_expression "(lVar6 == param_1[6])" ( (binary_expression "lVar6 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" else (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" { (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x10)" ( (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" if (parenthesized_expression "(lVar6 == param_1[6])" ( (binary_expression "lVar6 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_00298a6e;" goto statement_identifier ;) })) }))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));" do (compound_statement "{\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  }" { (expression_statement "plVar7 = (long *)(uVar8 * 0x10 + lVar6);" (assignment_expression "plVar7 = (long *)(uVar8 * 0x10 + lVar6)" identifier = (cast_expression "(long *)(uVar8 * 0x10 + lVar6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 * 0x10 + lVar6)" ( (binary_expression "uVar8 * 0x10 + lVar6" (binary_expression "uVar8 * 0x10" identifier * number_literal) + identifier) )))) ;) (if_statement "if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" if (parenthesized_expression "(((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0'))" ( (binary_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')" (parenthesized_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0'))" ( (binary_expression "(*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')" (parenthesized_expression "(*plVar7 != 0)" ( (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" * identifier) != number_literal) )) && (parenthesized_expression "(*(char *)((long)plVar7 + 0xc) == '\0')" ( (binary_expression "*(char *)((long)plVar7 + 0xc) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xc)" * (cast_expression "(char *)((long)plVar7 + 0xc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xc)" ( (binary_expression "(long)plVar7 + 0xc" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(*(char *)((long)plVar7 + 0xd) == '\0')" ( (binary_expression "*(char *)((long)plVar7 + 0xd) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xd)" * (cast_expression "(char *)((long)plVar7 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xd)" ( (binary_expression "(long)plVar7 + 0xd" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" { (expression_statement "iVar2 = close((int)uVar8);" (assignment_expression "iVar2 = close((int)uVar8)" identifier = (call_expression "close((int)uVar8)" identifier (argument_list "((int)uVar8)" ( (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) (if_statement "if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" if (parenthesized_expression "(iVar2 < 0)" ( (binary_expression "iVar2 < 0" identifier < number_literal) )) (compound_statement "{\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" { (expression_statement "piVar3 = __errno_location();" (assignment_expression "piVar3 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (expression_statement "pcVar4 = strerror(*piVar3);" (assignment_expression "pcVar4 = strerror(*piVar3)" identifier = (call_expression "strerror(*piVar3)" identifier (argument_list "(*piVar3)" ( (pointer_expression "*piVar3" * identifier) )))) ;) (expression_statement "lVar6 = *plVar7;" (assignment_expression "lVar6 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "uVar5 = gettext("while closing %s: %s");" (assignment_expression "uVar5 = gettext("while closing %s: %s")" identifier = (call_expression "gettext("while closing %s: %s")" identifier (argument_list "("while closing %s: %s")" ( (string_literal ""while closing %s: %s"" " string_content ") )))) ;) (expression_statement "FUN_001783d0(uVar5,lVar6,pcVar4);" (call_expression "FUN_001783d0(uVar5,lVar6,pcVar4)" identifier (argument_list "(uVar5,lVar6,pcVar4)" ( identifier , identifier , identifier ))) ;) })) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" if (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_0043e6b0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 4)" ( (binary_expression "PTR_DAT_0043e6b0[0x24] & 4" (subscript_expression "PTR_DAT_0043e6b0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" { (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" identifier (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" ( (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" * (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Closed descriptor %d for \"%s\" (close_all)"" " string_content escape_sequence string_content escape_sequence string_content ") , (binary_expression "uVar8 & 0xffffffff" identifier & number_literal) , (pointer_expression "*plVar7" * identifier) ))) ;) })) (expression_statement "*plVar7 = 0;" (assignment_expression "*plVar7 = 0" (pointer_expression "*plVar7" * identifier) = number_literal) ;) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "*(undefined4 *)(plVar7 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(plVar7 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(plVar7 + 1)" * (cast_expression "(undefined4 *)(plVar7 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 1)" ( (binary_expression "plVar7 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)plVar7 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0xe)" * (cast_expression "(undefined1 *)((long)plVar7 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0xe)" ( (binary_expression "(long)plVar7 + 0xe" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) })) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar8 < (ulong)(param_1[6] - lVar6 >> 4))" ( (binary_expression "uVar8 < (ulong)(param_1[6] - lVar6 >> 4)" identifier < (call_expression "(ulong)(param_1[6] - lVar6 >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[6] - lVar6 >> 4)" ( (binary_expression "param_1[6] - lVar6 >> 4" (binary_expression "param_1[6] - lVar6" (subscript_expression "param_1[6]" identifier [ number_literal ]) - identifier) >> number_literal) )))) )) ;) (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }" if (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" ( (binary_expression "puVar1 == (undefined8 *)0x0" identifier == (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();" statement_identifier : (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;)) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (return_statement return ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (string_literal " string_content escape_sequence string_content escape_sequence string_content ") , (binary_expression IDENT & LIT) , (pointer_expression * IDENT) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - 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 IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;)) (return_statement return ;) })))
(function_definition "void FUN_002989a0(long *param_1)\n\n{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" (primitive_type "void") (function_declarator "FUN_002989a0(long *param_1)" (identifier "FUN_002989a0") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  int iVar2;\n  int *piVar3;\n  char *pcVar4;\n  undefined8 uVar5;\n  long lVar6;\n  long *plVar7;\n  ulong uVar8;\n  \n  puVar1 = (undefined8 *)*param_1;\n  if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }\n  uVar8 = 0;\n  do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));\n  *(undefined4 *)(param_1 + 8) = 0xffffffff;\n  if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }\nLAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  return;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "char *pcVar4;" (primitive_type "char") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (expression_statement "puVar1 = (undefined8 *)*param_1;" (assignment_expression "puVar1 = (undefined8 *)*param_1" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }\n  else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" (if "if") (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" (( "(") (binary_expression "puVar1 == (undefined8 *)0x0" (identifier "puVar1") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }\n  }" ({ "{") (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" (identifier "lVar6") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" (if "if") (parenthesized_expression "(lVar6 == param_1[6])" (( "(") (binary_expression "lVar6 == param_1[6]" (identifier "lVar6") (== "==") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      return;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" (else "else") (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x10))();\n    lVar6 = param_1[5];\n    if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }\n  }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar1 + 0x10)" (( "(") (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" (* "*") (cast_expression "(long *)*puVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" (identifier "lVar6") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (if_statement "if (lVar6 == param_1[6]) {\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" (if "if") (parenthesized_expression "(lVar6 == param_1[6])" (( "(") (binary_expression "lVar6 == param_1[6]" (identifier "lVar6") (== "==") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 8) = 0xffffffff;\n      goto LAB_00298a6e;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (goto_statement "goto LAB_00298a6e;" (goto "goto") (statement_identifier "LAB_00298a6e") (; ";")) (} "}"))) (} "}")))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));" (do "do") (compound_statement "{\n    plVar7 = (long *)(uVar8 * 0x10 + lVar6);\n    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }\n    uVar8 = uVar8 + 1;\n  }" ({ "{") (expression_statement "plVar7 = (long *)(uVar8 * 0x10 + lVar6);" (assignment_expression "plVar7 = (long *)(uVar8 * 0x10 + lVar6)" (identifier "plVar7") (= "=") (cast_expression "(long *)(uVar8 * 0x10 + lVar6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar8 * 0x10 + lVar6)" (( "(") (binary_expression "uVar8 * 0x10 + lVar6" (binary_expression "uVar8 * 0x10" (identifier "uVar8") (* "*") (number_literal "0x10")) (+ "+") (identifier "lVar6")) () ")")))) (; ";")) (if_statement "if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')) {\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" (if "if") (parenthesized_expression "(((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0'))" (( "(") (binary_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&\n       (*(char *)((long)plVar7 + 0xd) == '\0')" (parenthesized_expression "((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0'))" (( "(") (binary_expression "(*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')" (parenthesized_expression "(*plVar7 != 0)" (( "(") (binary_expression "*plVar7 != 0" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)((long)plVar7 + 0xc) == '\0')" (( "(") (binary_expression "*(char *)((long)plVar7 + 0xc) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xc)" (* "*") (cast_expression "(char *)((long)plVar7 + 0xc)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + 0xc)" (( "(") (binary_expression "(long)plVar7 + 0xc" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (number_literal "0xc")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(char *)((long)plVar7 + 0xd) == '\0')" (( "(") (binary_expression "*(char *)((long)plVar7 + 0xd) == '\0'" (pointer_expression "*(char *)((long)plVar7 + 0xd)" (* "*") (cast_expression "(char *)((long)plVar7 + 0xd)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + 0xd)" (( "(") (binary_expression "(long)plVar7 + 0xd" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (number_literal "0xd")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n                    \n      iVar2 = close((int)uVar8);\n      if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }\n      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }\n      *plVar7 = 0;\n      lVar6 = param_1[5];\n      *(undefined4 *)(plVar7 + 1) = 0xffffffff;\n      *(undefined1 *)((long)plVar7 + 0xe) = 0;\n    }" ({ "{") (expression_statement "iVar2 = close((int)uVar8);" (assignment_expression "iVar2 = close((int)uVar8)" (identifier "iVar2") (= "=") (call_expression "close((int)uVar8)" (identifier "close") (argument_list "((int)uVar8)" (( "(") (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8")) () ")")))) (; ";")) (if_statement "if (iVar2 < 0) {\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" (if "if") (parenthesized_expression "(iVar2 < 0)" (( "(") (binary_expression "iVar2 < 0" (identifier "iVar2") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        piVar3 = __errno_location();\n        pcVar4 = strerror(*piVar3);\n        lVar6 = *plVar7;\n        uVar5 = gettext("while closing %s: %s");\n        FUN_001783d0(uVar5,lVar6,pcVar4);\n      }" ({ "{") (expression_statement "piVar3 = __errno_location();" (assignment_expression "piVar3 = __errno_location()" (identifier "piVar3") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "pcVar4 = strerror(*piVar3);" (assignment_expression "pcVar4 = strerror(*piVar3)" (identifier "pcVar4") (= "=") (call_expression "strerror(*piVar3)" (identifier "strerror") (argument_list "(*piVar3)" (( "(") (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) () ")")))) (; ";")) (expression_statement "lVar6 = *plVar7;" (assignment_expression "lVar6 = *plVar7" (identifier "lVar6") (= "=") (pointer_expression "*plVar7" (* "*") (identifier "plVar7"))) (; ";")) (expression_statement "uVar5 = gettext("while closing %s: %s");" (assignment_expression "uVar5 = gettext("while closing %s: %s")" (identifier "uVar5") (= "=") (call_expression "gettext("while closing %s: %s")" (identifier "gettext") (argument_list "("while closing %s: %s")" (( "(") (string_literal ""while closing %s: %s"" (" """) (string_content "while closing %s: %s") (" """)) () ")")))) (; ";")) (expression_statement "FUN_001783d0(uVar5,lVar6,pcVar4);" (call_expression "FUN_001783d0(uVar5,lVar6,pcVar4)" (identifier "FUN_001783d0") (argument_list "(uVar5,lVar6,pcVar4)" (( "(") (identifier "uVar5") (, ",") (identifier "lVar6") (, ",") (identifier "pcVar4") () ")"))) (; ";")) (} "}"))) (if_statement "if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" (if "if") (parenthesized_expression "((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0))" (( "(") (binary_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x10" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((PTR_DAT_0043e6b0[0x24] & 4) != 0)" (( "(") (binary_expression "(PTR_DAT_0043e6b0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_0043e6b0[0x24] & 4)" (( "(") (binary_expression "PTR_DAT_0043e6b0[0x24] & 4" (subscript_expression "PTR_DAT_0043e6b0[0x24]" (identifier "PTR_DAT_0043e6b0") ([ "[") (number_literal "0x24") (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);\n      }" ({ "{") (expression_statement "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7);" (call_expression "FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" (identifier "FUN_00178100") (argument_list "(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",\n                     uVar8 & 0xffffffff,*plVar7)" (( "(") (pointer_expression "*(undefined8 *)PTR_DAT_0043e6b0" (* "*") (cast_expression "(undefined8 *)PTR_DAT_0043e6b0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_0043e6b0"))) (, ",") (string_literal ""Closed descriptor %d for \"%s\" (close_all)"" (" """) (string_content "Closed descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (string_content " (close_all)") (" """)) (, ",") (binary_expression "uVar8 & 0xffffffff" (identifier "uVar8") (& "&") (number_literal "0xffffffff")) (, ",") (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) () ")"))) (; ";")) (} "}"))) (expression_statement "*plVar7 = 0;" (assignment_expression "*plVar7 = 0" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar6 = param_1[5];" (assignment_expression "lVar6 = param_1[5]" (identifier "lVar6") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "*(undefined4 *)(plVar7 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(plVar7 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(plVar7 + 1)" (* "*") (cast_expression "(undefined4 *)(plVar7 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar7 + 1)" (( "(") (binary_expression "plVar7 + 1" (identifier "plVar7") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)((long)plVar7 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0xe)" (* "*") (cast_expression "(undefined1 *)((long)plVar7 + 0xe)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + 0xe)" (( "(") (binary_expression "(long)plVar7 + 0xe" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (number_literal "0xe")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar8 < (ulong)(param_1[6] - lVar6 >> 4))" (( "(") (binary_expression "uVar8 < (ulong)(param_1[6] - lVar6 >> 4)" (identifier "uVar8") (< "<") (call_expression "(ulong)(param_1[6] - lVar6 >> 4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[6] - lVar6 >> 4)" (( "(") (binary_expression "param_1[6] - lVar6 >> 4" (binary_expression "param_1[6] - lVar6" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (- "-") (identifier "lVar6")) (>> ">>") (number_literal "4")) () ")")))) () ")")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 8) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 8) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (if_statement "if (puVar1 == (undefined8 *)0x0) {\n    return;\n  }" (if "if") (parenthesized_expression "(puVar1 == (undefined8 *)0x0)" (( "(") (binary_expression "puVar1 == (undefined8 *)0x0" (identifier "puVar1") (== "==") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_00298a6e:\n                    \n                    \n  (**(code **)(*(long *)*puVar1 + 0x18))();" (statement_identifier "LAB_00298a6e") (: ":") (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar1 + 0x18)" (( "(") (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" (* "*") (cast_expression "(long *)*puVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void close_all(Descriptors * this) */

void __thiscall var_13::type_1::function_1(type_1 *this)

{
  type_2 *var_1;
  char *pcVar2;
  int var_7;
  int *piVar4;
  char *pcVar5;
  char *format;
  type_3 var_4;
  type_3 pOVar7;
  type_4 var_5;
  
  var_1 = this->lock_;
  if (var_1 == (type_2 *)0x0) {
    var_4 = (this->open_descriptors_).
             super__Vector_base<var_13::Descriptors::var_2,_std::allocator<var_13::Descriptors::var_2>var_3>
             ._M_impl._M_start;
    if (var_4 == (this->open_descriptors_).
                  super__Vector_base<var_13::type_1::var_2,_std::allocator<var_13::type_1::var_2>var_3>
                  ._M_impl._M_finish) {
      this->stack_top_ = -1;
      return;
    }
  }
  else {
    (*var_1->lock_->_vptr_Lock_impl[2])();
    var_4 = (this->open_descriptors_).
             super__Vector_base<var_13::Descriptors::var_2,_std::allocator<var_13::Descriptors::var_2>var_3>
             ._M_impl._M_start;
    if (var_4 == (this->open_descriptors_).
                  super__Vector_base<var_13::type_1::var_2,_std::allocator<var_13::type_1::var_2>var_3>
                  ._M_impl._M_finish) {
      this->stack_top_ = -1;
      goto LAB_00298a6e;
    }
  }
  var_5 = 0;
  do {
    pOVar7 = var_4 + var_5;
    if (((pOVar7->name != (char *)0x0) && (pOVar7->inuse == false)) && (pOVar7->is_write == false))
    {
                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */
      var_7 = var_6((int)var_5);
      if (var_7 < 0) {
        piVar4 = var_8();
        pcVar5 = var_9(*piVar4);
        pcVar2 = pOVar7->name;
        format = (char *)var_10("while closing %s: %s");
        var_11(format,pcVar2,pcVar5);
      }
      if ((parameters->options_ != (type_5 *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */
        Errors::var_12(parameters->errors_,"Closed descriptor %d for \"%s\" (close_all)",
                      var_5 & 0xffffffff,pOVar7->name);
      }
      pOVar7->name = (char *)0x0;
      var_4 = (this->open_descriptors_).
               super__Vector_base<var_13::Descriptors::var_2,_std::allocator<var_13::Descriptors::var_2>var_3>
               ._M_impl._M_start;
      pOVar7->stack_next = -1;
      pOVar7->is_on_stack = false;
    }
    var_5 = var_5 + 1;
  } while (var_5 < (type_4)((long)(this->open_descriptors_).
                                 super__Vector_base<var_13::type_1::var_2,_std::allocator<var_13::type_1::var_2>var_3>
                                 ._M_impl._M_finish - (long)var_4 >> 4));
  this->stack_top_ = -1;
  if (var_1 == (type_2 *)0x0) {
    return;
  }
LAB_00298a6e:
                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*var_1->lock_->_vptr_Lock_impl[3])();
  return;
}


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

void MASKED(long *param_1)

{
  undefined8 *puVar1;
  int iVar2;
  int *piVar3;
  char *pcVar4;
  undefined8 uVar5;
  long lVar6;
  long *plVar7;
  ulong uVar8;
  
  puVar1 = (undefined8 *)*param_1;
  if (puVar1 == (undefined8 *)0x0) {
    lVar6 = param_1[5];
    if (lVar6 == param_1[6]) {
      *(undefined4 *)(param_1 + 8) = 0xffffffff;
      return;
    }
  }
  else {
    (**(code **)(*(long *)*puVar1 + 0x10))();
    lVar6 = param_1[5];
    if (lVar6 == param_1[6]) {
      *(undefined4 *)(param_1 + 8) = 0xffffffff;
      goto LAB_00298a6e;
    }
  }
  uVar8 = 0;
  do {
    plVar7 = (long *)(uVar8 * 0x10 + lVar6);
    if (((*plVar7 != 0) && (*(char *)((long)plVar7 + 0xc) == '\0')) &&
       (*(char *)((long)plVar7 + 0xd) == '\0')) {
                    /* try { // try from 00298a1e to 00298a22 has its CatchHandler @ 00298b26 */
      iVar2 = close((int)uVar8);
      if (iVar2 < 0) {
        piVar3 = __errno_location();
        pcVar4 = strerror(*piVar3);
        lVar6 = *plVar7;
        uVar5 = gettext("while closing %s: %s");
        FUN_001783d0(uVar5,lVar6,pcVar4);
      }
      if ((*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0) && ((PTR_DAT_0043e6b0[0x24] & 4) != 0)) {
                    /* try { // try from 00298aa2 to 00298b12 has its CatchHandler @ 00298b26 */
        FUN_00178100(*(undefined8 *)PTR_DAT_0043e6b0,"Closed descriptor %d for \"%s\" (close_all)",
                     uVar8 & 0xffffffff,*plVar7);
      }
      *plVar7 = 0;
      lVar6 = param_1[5];
      *(undefined4 *)(plVar7 + 1) = 0xffffffff;
      *(undefined1 *)((long)plVar7 + 0xe) = 0;
    }
    uVar8 = uVar8 + 1;
  } while (uVar8 < (ulong)(param_1[6] - lVar6 >> 4));
  *(undefined4 *)(param_1 + 8) = 0xffffffff;
  if (puVar1 == (undefined8 *)0x0) {
    return;
  }
LAB_00298a6e:
                    /* WARNING: Could not recover jumptable at 0x00298a87. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(long *)*puVar1 + 0x18))();
  return;
}

