
/* DWARF original prototype: bool read_section(Dwarf_pubnames_table * this, Relobj * object, uchar *
   symtab, off_t symtab_size) */

bool __thiscall
gold::Dwarf_pubnames_table::read_section
          (Dwarf_pubnames_table *this,Relobj *object,uchar *symtab,off_t symtab_size)

{
  _func_int_varargs *p_Var1;
  _func_int_varargs **pp_Var2;
  char *pcVar3;
  section_size_type sVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  char *__s2;
  uchar *puVar8;
  Elf_reloc_mapper *pEVar9;
  long lVar10;
  uint uVar11;
  ulong uVar12;
  byte *pbVar13;
  byte *pbVar14;
  uint uVar15;
  char *__s1;
  undefined1 uVar16;
  bool bVar17;
  undefined1 uVar18;
  bool bVar19;
  byte bVar20;
  section_size_type buffer_size;
  undefined1 local_48 [24];
  
  bVar20 = 0;
  pcVar3 = "gnu_pubtypes";
  uVar12 = 1;
  bVar17 = this->is_pubtypes_ == false;
  if (bVar17) {
    pcVar3 = "gnu_pubnames";
  }
  __s2 = "gnu_pubnames";
  if (!bVar17) {
    __s2 = "gnu_pubtypes";
  }
  uVar11 = (object->super_Object).shnum_;
  uVar16 = uVar11 == 0;
  uVar18 = uVar11 == 1;
  if (1 < uVar11) {
    do {
      uVar11 = (uint)uVar12;
      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);
      sVar4 = buffer_size;
      lVar10 = 7;
      __s1 = (char *)(buffer_size + 7);
      pbVar13 = (byte *)".debug_";
      pbVar14 = (byte *)buffer_size;
      do {
        if (lVar10 == 0) break;
        lVar10 = lVar10 + -1;
        uVar16 = *pbVar13 < *pbVar14;
        uVar18 = *pbVar13 == *pbVar14;
        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;
        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;
      } while ((bool)uVar18);
      bVar17 = false;
      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;
      if (bVar19) {
LAB_003018e2:
        iVar5 = strcmp(__s1,pcVar3 + 4);
        if (iVar5 != 0) {
          iVar5 = strcmp(__s1,__s2);
          if (iVar5 != 0) goto LAB_00301901;
          this->is_gnu_style_ = true;
        }
        if ((undefined1 *)sVar4 != local_48) {
          operator_delete((void *)sVar4);
        }
        if (uVar11 == 0) {
          return false;
        }
        puVar8 = Object::decompressed_section_contents
                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,
                            (uint64_t *)0x0);
        this->buffer_ = puVar8;
        if (puVar8 == (uchar *)0x0) {
          return false;
        }
        this->buffer_end_ = puVar8 + buffer_size;
        p_Var1 = (object->super_Object)._vptr_Object[6];
        if (p_Var1 != Object::do_is_incremental) {
          iVar5 = (*p_Var1)(object);
          if ((char)iVar5 != '\0') {
            return (bool)(char)iVar5;
          }
        }
        uVar15 = (object->super_Object).shnum_;
        uVar6 = 0;
        if (uVar15 == 0) goto LAB_003019e1;
        uVar15 = 0;
        goto LAB_003019b7;
      }
      lVar10 = 8;
      __s1 = (char *)(buffer_size + 8);
      pbVar13 = (byte *)".zdebug_";
      pbVar14 = (byte *)buffer_size;
      do {
        if (lVar10 == 0) break;
        lVar10 = lVar10 + -1;
        bVar17 = *pbVar13 < *pbVar14;
        bVar19 = *pbVar13 == *pbVar14;
        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;
        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;
      } while (bVar19);
      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;
LAB_00301901:
      if ((undefined1 *)sVar4 != local_48) {
        operator_delete((void *)sVar4);
      }
      uVar11 = uVar11 + 1;
      uVar12 = (ulong)uVar11;
      uVar15 = (object->super_Object).shnum_;
      uVar16 = uVar11 < uVar15;
      uVar18 = uVar11 == uVar15;
    } while ((bool)uVar16);
  }
  return false;
  while (uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_) {
LAB_003019b7:
    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);
    if (((uVar6 == 9) || (uVar6 == 4)) &&
       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)
       ) goto LAB_003019e1;
  }
  uVar15 = 0;
LAB_003019e1:
  pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);
  pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;
  this->reloc_mapper_ = pEVar9;
  (*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6);
  this->reloc_type_ = uVar6;
  return true;
}



undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)

{
  char *pcVar1;
  byte *pbVar2;
  int iVar3;
  uint uVar4;
  char *__s2;
  long *plVar5;
  undefined8 uVar6;
  long lVar7;
  uint uVar8;
  byte *pbVar9;
  byte *pbVar10;
  uint uVar11;
  byte *__s1;
  undefined1 uVar12;
  bool bVar13;
  undefined1 uVar14;
  bool bVar15;
  byte bVar16;
  byte *local_58 [2];
  byte local_48 [24];
  
  bVar16 = 0;
  pcVar1 = "gnu_pubtypes";
  uVar8 = 1;
  bVar13 = *(char *)(param_1 + 0x30) == '\0';
  if (bVar13) {
    pcVar1 = "gnu_pubnames";
  }
  __s2 = "gnu_pubnames";
  if (!bVar13) {
    __s2 = "gnu_pubtypes";
  }
  uVar11 = *(uint *)(param_2 + 7);
  uVar12 = uVar11 == 0;
  uVar14 = uVar11 == 1;
  if (1 < uVar11) {
    do {
      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);
      pbVar2 = local_58[0];
      lVar7 = 7;
      __s1 = local_58[0] + 7;
      pbVar9 = (byte *)".debug_";
      pbVar10 = local_58[0];
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        uVar12 = *pbVar9 < *pbVar10;
        uVar14 = *pbVar9 == *pbVar10;
        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;
        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;
      } while ((bool)uVar14);
      bVar13 = false;
      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;
      if (bVar15) {
LAB_003018e2:
        iVar3 = strcmp((char *)__s1,pcVar1 + 4);
        if (iVar3 != 0) {
          iVar3 = strcmp((char *)__s1,__s2);
          if (iVar3 != 0) goto LAB_00301901;
          *(undefined1 *)(param_1 + 0x31) = 1;
        }
        if (pbVar2 != local_48) {
          FUN_00338a40(pbVar2);
        }
        if (uVar8 == 0) {
          return 0;
        }
        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);
        *(long *)(param_1 + 8) = lVar7;
        if (lVar7 == 0) {
          return 0;
        }
        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;
        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&
           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {
          return uVar6;
        }
        uVar11 = *(uint *)(param_2 + 7);
        iVar3 = 0;
        if (uVar11 == 0) goto LAB_003019e1;
        uVar11 = 0;
        goto LAB_003019b7;
      }
      lVar7 = 8;
      __s1 = local_58[0] + 8;
      pbVar9 = (byte *)".zdebug_";
      pbVar10 = local_58[0];
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        bVar13 = *pbVar9 < *pbVar10;
        bVar15 = *pbVar9 == *pbVar10;
        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;
        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;
      } while (bVar15);
      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;
LAB_00301901:
      if (pbVar2 != local_48) {
        FUN_00338a40(pbVar2);
      }
      uVar8 = uVar8 + 1;
      uVar12 = uVar8 < *(uint *)(param_2 + 7);
      uVar14 = uVar8 == *(uint *)(param_2 + 7);
    } while ((bool)uVar12);
  }
  return 0;
  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {
LAB_003019b7:
    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);
    if (((iVar3 == 9) || (iVar3 == 4)) &&
       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;
  }
  uVar11 = 0;
LAB_003019e1:
  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);
  lVar7 = *plVar5;
  *(long **)(param_1 + 0x48) = plVar5;
  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);
  *(int *)(param_1 + 0x50) = iVar3;
  return 1;
}


PUSH R15
LEA RAX,[0x3e5732]
LEA R15,[0x3e573b]
PUSH R14
PUSH R13
LEA R13,[0x3e573f]
PUSH R12
PUSH RBP
MOV EBP,0x1
PUSH RBX
MOV RBX,RSI
SUB RSP,0x48
CMP byte ptr [RDI + 0x30],0x0
CMOVZ R13,RAX
MOV qword ptr [RSP + 0x8],RDI
LEA R12,[RSP + 0x20]
LEA RAX,[0x3e572e]
CMOVNZ RAX,R15
CMP dword ptr [RSI + 0x38],0x1
MOV qword ptr [RSP + 0x10],RDX
MOV qword ptr [RSP + 0x18],RCX
MOV qword ptr [RSP],RAX
JBE 0x0030191f
MOV RAX,qword ptr [RBX]
MOV RSI,RBX
MOV RDI,R12
MOV EDX,EBP
CALL qword ptr [RAX + 0x80]
MOV R14,qword ptr [RSP + 0x20]
MOV ECX,0x7
LEA RSI,[0x3e5e1a]
MOV RDI,R14
LEA R15,[R14 + 0x7]
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x003018e2
MOV ECX,0x8
LEA RSI,[0x3e0bf3]
LEA R15,[R14 + 0x8]
MOV RDI,R14
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00301901
MOV RSI,R13
MOV RDI,R15
CALL 0x00150790
TEST EAX,EAX
JZ 0x00301939
MOV RSI,qword ptr [RSP]
MOV RDI,R15
CALL 0x00150790
TEST EAX,EAX
JZ 0x00301930
LEA RAX,[R12 + 0x10]
CMP R14,RAX
JZ 0x00301913
MOV RDI,R14
CALL 0x00338a40
ADD EBP,0x1
CMP EBP,dword ptr [RBX + 0x38]
JC 0x00301890
XOR EAX,EAX
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [RAX + 0x31],0x1
LEA RAX,[R12 + 0x10]
CMP R14,RAX
JZ 0x0030194b
MOV RDI,R14
CALL 0x00338a40
TEST EBP,EBP
JZ 0x0030191f
MOV R15,qword ptr [RSP + 0x8]
XOR R8D,R8D
MOV RDX,R12
MOV ESI,EBP
MOV RDI,RBX
LEA RCX,[R15 + 0x18]
CALL 0x0022a660
MOV qword ptr [R15 + 0x8],RAX
TEST RAX,RAX
JZ 0x0030191f
ADD RAX,qword ptr [RSP + 0x20]
LEA RDX,[0x1b8c90]
MOV qword ptr [R15 + 0x10],RAX
MOV RAX,qword ptr [RBX]
MOV RAX,qword ptr [RAX + 0x30]
CMP RAX,RDX
JNZ 0x00301a2d
MOV R12D,dword ptr [RBX + 0x38]
XOR R13D,R13D
TEST R12D,R12D
JZ 0x003019e1
XOR R12D,R12D
JMP 0x003019b7
CMP EAX,0x4
JZ 0x003019ce
ADD R12D,0x1
CMP R12D,dword ptr [RBX + 0x38]
JNC 0x00301a28
MOV RAX,qword ptr [RBX]
MOV ESI,R12D
MOV RDI,RBX
CALL qword ptr [RAX + 0xa0]
MOV R13D,EAX
CMP EAX,0x9
JNZ 0x003019a8
MOV RAX,qword ptr [RBX]
MOV ESI,R12D
MOV RDI,RBX
CALL qword ptr [RAX + 0xb0]
CMP EBP,EAX
JNZ 0x003019ad
MOV RDX,qword ptr [RSP + 0x18]
MOV RSI,qword ptr [RSP + 0x10]
MOV RDI,RBX
CALL 0x00301200
MOV RBX,qword ptr [RSP + 0x8]
MOV EDX,R13D
MOV ESI,R12D
MOV RCX,qword ptr [RAX]
MOV RDI,RAX
MOV qword ptr [RBX + 0x48],RAX
CALL qword ptr [RCX + 0x10]
MOV dword ptr [RBX + 0x50],R13D
ADD RSP,0x48
MOV EAX,0x1
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
XOR R12D,R12D
JMP 0x003019e1
MOV RDI,RBX
CALL RAX
TEST AL,AL
JNZ 0x00301921
JMP 0x00301991
(translation_unit "undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" type_identifier (function_declarator "FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "byte *__s1;" type_identifier (pointer_declarator "*__s1" * identifier) ;) (declaration "undefined1 uVar12;" type_identifier identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "undefined1 uVar14;" type_identifier identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (declaration "byte bVar16;" type_identifier identifier ;) (declaration "byte *local_58 [2];" type_identifier (pointer_declarator "*local_58 [2]" * (array_declarator "local_58 [2]" identifier [ number_literal ])) ;) (declaration "byte local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" identifier = number_literal) ;) (expression_statement "pcVar1 = "gnu_pubtypes";" (assignment_expression "pcVar1 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "bVar13 = *(char *)(param_1 + 0x30) == '\0';" (assignment_expression "bVar13 = *(char *)(param_1 + 0x30) == '\0'" identifier = (binary_expression "*(char *)(param_1 + 0x30) == '\0'" (pointer_expression "*(char *)(param_1 + 0x30)" * (cast_expression "(char *)(param_1 + 0x30)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence '))) ;) (if_statement "if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }" if (parenthesized_expression "(bVar13)" ( identifier )) (compound_statement "{\n    pcVar1 = "gnu_pubnames";\n  }" { (expression_statement "pcVar1 = "gnu_pubnames";" (assignment_expression "pcVar1 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) })) (expression_statement "__s2 = "gnu_pubnames";" (assignment_expression "__s2 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) (if_statement "if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }" if (parenthesized_expression "(!bVar13)" ( (unary_expression "!bVar13" ! identifier) )) (compound_statement "{\n    __s2 = "gnu_pubtypes";\n  }" { (expression_statement "__s2 = "gnu_pubtypes";" (assignment_expression "__s2 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) })) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" identifier = (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar11 == 0;" (assignment_expression "uVar12 = uVar11 == 0" identifier = (binary_expression "uVar11 == 0" identifier == number_literal)) ;) (expression_statement "uVar14 = uVar11 == 1;" (assignment_expression "uVar14 = uVar11 == 1" identifier = (binary_expression "uVar11 == 1" identifier == number_literal)) ;) (if_statement "if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" if (parenthesized_expression "(1 < uVar11)" ( (binary_expression "1 < uVar11" number_literal < identifier) )) (compound_statement "{\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" { (do_statement "do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);" do (compound_statement "{\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    }" { (expression_statement "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);" (call_expression "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8)" (parenthesized_expression "(**(code **)(*param_2 + 0x80))" ( (pointer_expression "**(code **)(*param_2 + 0x80)" * (pointer_expression "*(code **)(*param_2 + 0x80)" * (cast_expression "(code **)(*param_2 + 0x80)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x80)" ( (binary_expression "*param_2 + 0x80" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(local_58,param_2,uVar8)" ( identifier , identifier , identifier ))) ;) (expression_statement "pbVar2 = local_58[0];" (assignment_expression "pbVar2 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" identifier = number_literal) ;) (expression_statement "__s1 = local_58[0] + 7;" (assignment_expression "__s1 = local_58[0] + 7" identifier = (binary_expression "local_58[0] + 7" (subscript_expression "local_58[0]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "pbVar9 = (byte *)".debug_";" (assignment_expression "pbVar9 = (byte *)".debug_"" identifier = (cast_expression "(byte *)".debug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".debug_"" " string_content "))) ;) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);" do (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" { (if_statement "if (lVar7 == 0) break;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar12 = *pbVar9 < *pbVar10;" (assignment_expression "uVar12 = *pbVar9 < *pbVar10" identifier = (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" * identifier) < (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "uVar14 = *pbVar9 == *pbVar10;" (assignment_expression "uVar14 = *pbVar9 == *pbVar10" identifier = (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" * identifier) == (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar14)" ( (cast_expression "(bool)uVar14" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar13 = false;" (assignment_expression "bVar13 = false" identifier = false) ;) (expression_statement "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;" (assignment_expression "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" identifier = (binary_expression "(!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" (parenthesized_expression "(!(bool)uVar12 && !(bool)uVar14)" ( (binary_expression "!(bool)uVar12 && !(bool)uVar14" (unary_expression "!(bool)uVar12" ! (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar14" ! (cast_expression "(bool)uVar14" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" if (parenthesized_expression "(bVar15)" ( identifier )) (compound_statement "{\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" { (labeled_statement "LAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);" statement_identifier : (expression_statement "iVar3 = strcmp((char *)__s1,pcVar1 + 4);" (assignment_expression "iVar3 = strcmp((char *)__s1,pcVar1 + 4)" identifier = (call_expression "strcmp((char *)__s1,pcVar1 + 4)" identifier (argument_list "((char *)__s1,pcVar1 + 4)" ( (cast_expression "(char *)__s1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "pcVar1 + 4" identifier + number_literal) )))) ;)) (if_statement "if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" { (expression_statement "iVar3 = strcmp((char *)__s1,__s2);" (assignment_expression "iVar3 = strcmp((char *)__s1,__s2)" identifier = (call_expression "strcmp((char *)__s1,__s2)" identifier (argument_list "((char *)__s1,__s2)" ( (cast_expression "(char *)__s1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar3 != 0) goto LAB_00301901;" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00301901;" goto statement_identifier ;)) (expression_statement "*(undefined1 *)(param_1 + 0x31) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x31) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x31)" * (cast_expression "(undefined1 *)(param_1 + 0x31)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x31)" ( (binary_expression "param_1 + 0x31" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }" if (parenthesized_expression "(pbVar2 != local_48)" ( (binary_expression "pbVar2 != local_48" identifier != identifier) )) (compound_statement "{\n          FUN_00338a40(pbVar2);\n        }" { (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" identifier (argument_list "(pbVar2)" ( identifier ))) ;) })) (if_statement "if (uVar8 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);" (assignment_expression "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" identifier = (call_expression "FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" identifier (argument_list "(param_2,uVar8,local_58,param_1 + 0x18,0)" ( identifier , identifier , identifier , (binary_expression "param_1 + 0x18" identifier + number_literal) , number_literal )))) ;) (expression_statement "*(long *)(param_1 + 8) = lVar7;" (assignment_expression "*(long *)(param_1 + 8) = lVar7" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = identifier) ;) (if_statement "if (lVar7 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7;" (assignment_expression "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7" (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "local_58[0] + lVar7" (subscript_expression "local_58[0]" identifier [ number_literal ]) + identifier)) ;) (if_statement "if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }" if (parenthesized_expression "((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'))" ( (binary_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" (parenthesized_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90)" ( (binary_expression "*(code **)(*param_2 + 0x30) != FUN_001b8c90" (pointer_expression "*(code **)(*param_2 + 0x30)" * (cast_expression "(code **)(*param_2 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x30)" ( (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" * identifier) + number_literal) )))) != identifier) )) && (parenthesized_expression "(uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" ( (comma_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'" (assignment_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2)" identifier = (call_expression "(**(code **)(*param_2 + 0x30))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x30))" ( (pointer_expression "**(code **)(*param_2 + 0x30)" * (pointer_expression "*(code **)(*param_2 + 0x30)" * (cast_expression "(code **)(*param_2 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x30)" ( (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier )))) , (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n          return uVar6;\n        }" { (return_statement "return uVar6;" return identifier ;) })) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" identifier = (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (if_statement "if (uVar11 == 0) goto LAB_003019e1;" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_003019b7;" goto statement_identifier ;) })) (expression_statement "lVar7 = 8;" (assignment_expression "lVar7 = 8" identifier = number_literal) ;) (expression_statement "__s1 = local_58[0] + 8;" (assignment_expression "__s1 = local_58[0] + 8" identifier = (binary_expression "local_58[0] + 8" (subscript_expression "local_58[0]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "pbVar9 = (byte *)".zdebug_";" (assignment_expression "pbVar9 = (byte *)".zdebug_"" identifier = (cast_expression "(byte *)".zdebug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".zdebug_"" " string_content "))) ;) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);" do (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" { (if_statement "if (lVar7 == 0) break;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ;) (expression_statement "bVar13 = *pbVar9 < *pbVar10;" (assignment_expression "bVar13 = *pbVar9 < *pbVar10" identifier = (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" * identifier) < (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "bVar15 = *pbVar9 == *pbVar10;" (assignment_expression "bVar15 = *pbVar9 == *pbVar10" identifier = (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" * identifier) == (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar15)" ( identifier )) ;) (if_statement "if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;" if (parenthesized_expression "((!bVar13 && !bVar15) == bVar13)" ( (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" ( (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" ! identifier) && (unary_expression "!bVar15" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_003018e2;" goto statement_identifier ;)) (labeled_statement "LAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" statement_identifier : (if_statement "if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" if (parenthesized_expression "(pbVar2 != local_48)" ( (binary_expression "pbVar2 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_00338a40(pbVar2);\n      }" { (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" identifier (argument_list "(pbVar2)" ( identifier ))) ;) }))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar12 = uVar8 < *(uint *)(param_2 + 7);" (assignment_expression "uVar12 = uVar8 < *(uint *)(param_2 + 7)" identifier = (binary_expression "uVar8 < *(uint *)(param_2 + 7)" identifier < (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) ;) (expression_statement "uVar14 = uVar8 == *(uint *)(param_2 + 7);" (assignment_expression "uVar14 = uVar8 == *(uint *)(param_2 + 7)" identifier = (binary_expression "uVar8 == *(uint *)(param_2 + 7)" identifier == (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) ;) }) while (parenthesized_expression "((bool)uVar12)" ( (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) (while_statement "while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" while (parenthesized_expression "(uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7))" ( (comma_expression "uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) , (binary_expression "uVar11 < *(uint *)(param_2 + 7)" identifier < (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) )) (compound_statement "{\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" { (labeled_statement "LAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" statement_identifier : (expression_statement "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" (assignment_expression "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11)" identifier = (call_expression "(**(code **)(*param_2 + 0xa0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xa0))" ( (pointer_expression "**(code **)(*param_2 + 0xa0)" * (pointer_expression "*(code **)(*param_2 + 0xa0)" * (cast_expression "(code **)(*param_2 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xa0)" ( (binary_expression "*param_2 + 0xa0" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,uVar11)" ( identifier , identifier )))) ;)) (if_statement "if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;" if (parenthesized_expression "(((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4))" ( (binary_expression "((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" (parenthesized_expression "((iVar3 == 9) || (iVar3 == 4))" ( (binary_expression "(iVar3 == 9) || (iVar3 == 4)" (parenthesized_expression "(iVar3 == 9)" ( (binary_expression "iVar3 == 9" identifier == number_literal) )) || (parenthesized_expression "(iVar3 == 4)" ( (binary_expression "iVar3 == 4" identifier == number_literal) ))) )) && (parenthesized_expression "(uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" ( (comma_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11)" identifier = (call_expression "(**(code **)(*param_2 + 0xb0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xb0))" ( (pointer_expression "**(code **)(*param_2 + 0xb0)" * (pointer_expression "*(code **)(*param_2 + 0xb0)" * (cast_expression "(code **)(*param_2 + 0xb0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xb0)" ( (binary_expression "*param_2 + 0xb0" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,uVar11)" ( identifier , identifier )))) , (binary_expression "uVar8 == uVar4" identifier == identifier)) ))) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (labeled_statement "LAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" statement_identifier : (expression_statement "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" (assignment_expression "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4)" identifier = (cast_expression "(long *)FUN_00301200(param_2,param_3,param_4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00301200(param_2,param_3,param_4)" identifier (argument_list "(param_2,param_3,param_4)" ( identifier , identifier , identifier ))))) ;)) (expression_statement "lVar7 = *plVar5;" (assignment_expression "lVar7 = *plVar5" identifier = (pointer_expression "*plVar5" * identifier)) ;) (expression_statement "*(long **)(param_1 + 0x48) = plVar5;" (assignment_expression "*(long **)(param_1 + 0x48) = plVar5" (pointer_expression "*(long **)(param_1 + 0x48)" * (cast_expression "(long **)(param_1 + 0x48)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);" (call_expression "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3)" (parenthesized_expression "(**(code **)(lVar7 + 0x10))" ( (pointer_expression "**(code **)(lVar7 + 0x10)" * (pointer_expression "*(code **)(lVar7 + 0x10)" * (cast_expression "(code **)(lVar7 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) ))))) )) (argument_list "(plVar5,uVar11,iVar3)" ( identifier , identifier , identifier ))) ;) (expression_statement "*(int *)(param_1 + 0x50) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x50) = iVar3" (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: bool read_section(Dwarf_pubnames_table * this, Relobj * object, uchar *\n   symtab, off_t symtab_size) */\n\nbool __thiscall\ngold::Dwarf_pubnames_table::read_section\n          (Dwarf_pubnames_table *this,Relobj *object,uchar *symtab,off_t symtab_size)\n\n{\n  _func_int_varargs *p_Var1;\n  _func_int_varargs **pp_Var2;\n  char *pcVar3;\n  section_size_type sVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  char *__s2;\n  uchar *puVar8;\n  Elf_reloc_mapper *pEVar9;\n  long lVar10;\n  uint uVar11;\n  ulong uVar12;\n  byte *pbVar13;\n  byte *pbVar14;\n  uint uVar15;\n  char *__s1;\n  undefined1 uVar16;\n  bool bVar17;\n  undefined1 uVar18;\n  bool bVar19;\n  byte bVar20;\n  section_size_type buffer_size;\n  undefined1 local_48 [24];\n  \n  bVar20 = 0;\n  pcVar3 = "gnu_pubtypes";\n  uVar12 = 1;\n  bVar17 = this->is_pubtypes_ == false;\n  if (bVar17) {\n    pcVar3 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar17) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = (object->super_Object).shnum_;\n  uVar16 = uVar11 == 0;\n  uVar18 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);\n  }\n  return false;\n  while (uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_) {\nLAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);\n    if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;\n  }\n  uVar15 = 0;\nLAB_003019e1:\n  pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);\n  pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;\n  this->reloc_mapper_ = pEVar9;\n  (*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6);\n  this->reloc_type_ = uVar6;\n  return true;\n}\n\n" comment (function_definition "bool __thiscall\ngold::Dwarf_pubnames_table::read_section\n          (Dwarf_pubnames_table *this,Relobj *object,uchar *symtab,off_t symtab_size)\n\n{\n  _func_int_varargs *p_Var1;\n  _func_int_varargs **pp_Var2;\n  char *pcVar3;\n  section_size_type sVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  char *__s2;\n  uchar *puVar8;\n  Elf_reloc_mapper *pEVar9;\n  long lVar10;\n  uint uVar11;\n  ulong uVar12;\n  byte *pbVar13;\n  byte *pbVar14;\n  uint uVar15;\n  char *__s1;\n  undefined1 uVar16;\n  bool bVar17;\n  undefined1 uVar18;\n  bool bVar19;\n  byte bVar20;\n  section_size_type buffer_size;\n  undefined1 local_48 [24];\n  \n  bVar20 = 0;\n  pcVar3 = "gnu_pubtypes";\n  uVar12 = 1;\n  bVar17 = this->is_pubtypes_ == false;\n  if (bVar17) {\n    pcVar3 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar17) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = (object->super_Object).shnum_;\n  uVar16 = uVar11 == 0;\n  uVar18 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);\n  }\n  return false;\n  while (uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_) {\nLAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);\n    if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;\n  }\n  uVar15 = 0;\nLAB_003019e1:\n  pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);\n  pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;\n  this->reloc_mapper_ = pEVar9;\n  (*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6);\n  this->reloc_type_ = uVar6;\n  return true;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwarf_pubnames_table::" identifier : : identifier : :) (function_declarator "read_section\n          (Dwarf_pubnames_table *this,Relobj *object,uchar *symtab,off_t symtab_size)" identifier (parameter_list "(Dwarf_pubnames_table *this,Relobj *object,uchar *symtab,off_t symtab_size)" ( (parameter_declaration "Dwarf_pubnames_table *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Relobj *object" type_identifier (pointer_declarator "*object" * identifier)) , (parameter_declaration "uchar *symtab" type_identifier (pointer_declarator "*symtab" * identifier)) , (parameter_declaration "off_t symtab_size" type_identifier identifier) ))) (compound_statement "{\n  _func_int_varargs *p_Var1;\n  _func_int_varargs **pp_Var2;\n  char *pcVar3;\n  section_size_type sVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  char *__s2;\n  uchar *puVar8;\n  Elf_reloc_mapper *pEVar9;\n  long lVar10;\n  uint uVar11;\n  ulong uVar12;\n  byte *pbVar13;\n  byte *pbVar14;\n  uint uVar15;\n  char *__s1;\n  undefined1 uVar16;\n  bool bVar17;\n  undefined1 uVar18;\n  bool bVar19;\n  byte bVar20;\n  section_size_type buffer_size;\n  undefined1 local_48 [24];\n  \n  bVar20 = 0;\n  pcVar3 = "gnu_pubtypes";\n  uVar12 = 1;\n  bVar17 = this->is_pubtypes_ == false;\n  if (bVar17) {\n    pcVar3 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar17) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = (object->super_Object).shnum_;\n  uVar16 = uVar11 == 0;\n  uVar18 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);\n  }\n  return false;\n  while (uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_) {\nLAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);\n    if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;\n  }\n  uVar15 = 0;\nLAB_003019e1:\n  pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);\n  pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;\n  this->reloc_mapper_ = pEVar9;\n  (*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6);\n  this->reloc_type_ = uVar6;\n  return true;\n}" { (declaration "_func_int_varargs *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "_func_int_varargs **pp_Var2;" type_identifier (pointer_declarator "**pp_Var2" * (pointer_declarator "*pp_Var2" * identifier)) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "section_size_type sVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "uchar *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "Elf_reloc_mapper *pEVar9;" type_identifier (pointer_declarator "*pEVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "byte *pbVar14;" type_identifier (pointer_declarator "*pbVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "undefined1 uVar16;" type_identifier identifier ;) (declaration "bool bVar17;" primitive_type identifier ;) (declaration "undefined1 uVar18;" type_identifier identifier ;) (declaration "bool bVar19;" primitive_type identifier ;) (declaration "byte bVar20;" type_identifier identifier ;) (declaration "section_size_type buffer_size;" type_identifier identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "bVar20 = 0;" (assignment_expression "bVar20 = 0" identifier = number_literal) ;) (expression_statement "pcVar3 = "gnu_pubtypes";" (assignment_expression "pcVar3 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) (expression_statement "uVar12 = 1;" (assignment_expression "uVar12 = 1" identifier = number_literal) ;) (expression_statement "bVar17 = this->is_pubtypes_ == false;" (assignment_expression "bVar17 = this->is_pubtypes_ == false" identifier = (binary_expression "this->is_pubtypes_ == false" (field_expression "this->is_pubtypes_" identifier -> field_identifier) == false)) ;) (if_statement "if (bVar17) {\n    pcVar3 = "gnu_pubnames";\n  }" if (parenthesized_expression "(bVar17)" ( identifier )) (compound_statement "{\n    pcVar3 = "gnu_pubnames";\n  }" { (expression_statement "pcVar3 = "gnu_pubnames";" (assignment_expression "pcVar3 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) })) (expression_statement "__s2 = "gnu_pubnames";" (assignment_expression "__s2 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) (if_statement "if (!bVar17) {\n    __s2 = "gnu_pubtypes";\n  }" if (parenthesized_expression "(!bVar17)" ( (unary_expression "!bVar17" ! identifier) )) (compound_statement "{\n    __s2 = "gnu_pubtypes";\n  }" { (expression_statement "__s2 = "gnu_pubtypes";" (assignment_expression "__s2 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) })) (expression_statement "uVar11 = (object->super_Object).shnum_;" (assignment_expression "uVar11 = (object->super_Object).shnum_" identifier = (field_expression "(object->super_Object).shnum_" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar16 = uVar11 == 0;" (assignment_expression "uVar16 = uVar11 == 0" identifier = (binary_expression "uVar11 == 0" identifier == number_literal)) ;) (expression_statement "uVar18 = uVar11 == 1;" (assignment_expression "uVar18 = uVar11 == 1" identifier = (binary_expression "uVar11 == 1" identifier == number_literal)) ;) (if_statement "if (1 < uVar11) {\n    do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);\n  }" if (parenthesized_expression "(1 < uVar11)" ( (binary_expression "1 < uVar11" number_literal < identifier) )) (compound_statement "{\n    do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);\n  }" { (do_statement "do {\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    } while ((bool)uVar16);" do (compound_statement "{\n      uVar11 = (uint)uVar12;\n      (*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);\n      sVar4 = buffer_size;\n      lVar10 = 7;\n      __s1 = (char *)(buffer_size + 7);\n      pbVar13 = (byte *)".debug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);\n      bVar17 = false;\n      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;\n      if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }\n      lVar10 = 8;\n      __s1 = (char *)(buffer_size + 8);\n      pbVar13 = (byte *)".zdebug_";\n      pbVar14 = (byte *)buffer_size;\n      do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);\n      if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;\nLAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }\n      uVar11 = uVar11 + 1;\n      uVar12 = (ulong)uVar11;\n      uVar15 = (object->super_Object).shnum_;\n      uVar16 = uVar11 < uVar15;\n      uVar18 = uVar11 == uVar15;\n    }" { (expression_statement "uVar11 = (uint)uVar12;" (assignment_expression "uVar11 = (uint)uVar12" identifier = (cast_expression "(uint)uVar12" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "(*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12);" (call_expression "(*(object->super_Object)._vptr_Object[0x10])(&buffer_size,object,uVar12)" (parenthesized_expression "(*(object->super_Object)._vptr_Object[0x10])" ( (pointer_expression "*(object->super_Object)._vptr_Object[0x10]" * (subscript_expression "(object->super_Object)._vptr_Object[0x10]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(&buffer_size,object,uVar12)" ( (pointer_expression "&buffer_size" & identifier) , identifier , identifier ))) ;) (expression_statement "sVar4 = buffer_size;" (assignment_expression "sVar4 = buffer_size" identifier = identifier) ;) (expression_statement "lVar10 = 7;" (assignment_expression "lVar10 = 7" identifier = number_literal) ;) (expression_statement "__s1 = (char *)(buffer_size + 7);" (assignment_expression "__s1 = (char *)(buffer_size + 7)" identifier = (cast_expression "(char *)(buffer_size + 7)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(buffer_size + 7)" ( (binary_expression "buffer_size + 7" identifier + number_literal) )))) ;) (expression_statement "pbVar13 = (byte *)".debug_";" (assignment_expression "pbVar13 = (byte *)".debug_"" identifier = (cast_expression "(byte *)".debug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".debug_"" " string_content "))) ;) (expression_statement "pbVar14 = (byte *)buffer_size;" (assignment_expression "pbVar14 = (byte *)buffer_size" identifier = (cast_expression "(byte *)buffer_size" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while ((bool)uVar18);" do (compound_statement "{\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        uVar16 = *pbVar13 < *pbVar14;\n        uVar18 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      }" { (if_statement "if (lVar10 == 0) break;" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" identifier = (binary_expression "lVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *pbVar13 < *pbVar14;" (assignment_expression "uVar16 = *pbVar13 < *pbVar14" identifier = (binary_expression "*pbVar13 < *pbVar14" (pointer_expression "*pbVar13" * identifier) < (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "uVar18 = *pbVar13 == *pbVar14;" (assignment_expression "uVar18 = *pbVar13 == *pbVar14" identifier = (binary_expression "*pbVar13 == *pbVar14" (pointer_expression "*pbVar13" * identifier) == (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;" (assignment_expression "pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1" identifier = (binary_expression "pbVar13 + (ulong)bVar20 * -2 + 1" (binary_expression "pbVar13 + (ulong)bVar20 * -2" identifier + (binary_expression "(ulong)bVar20 * -2" (cast_expression "(ulong)bVar20" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;" (assignment_expression "pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1" identifier = (binary_expression "pbVar14 + (ulong)bVar20 * -2 + 1" (binary_expression "pbVar14 + (ulong)bVar20 * -2" identifier + (binary_expression "(ulong)bVar20 * -2" (cast_expression "(ulong)bVar20" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar18)" ( (cast_expression "(bool)uVar18" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar17 = false;" (assignment_expression "bVar17 = false" identifier = false) ;) (expression_statement "bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;" (assignment_expression "bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16" identifier = (binary_expression "(!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16" (parenthesized_expression "(!(bool)uVar16 && !(bool)uVar18)" ( (binary_expression "!(bool)uVar16 && !(bool)uVar18" (unary_expression "!(bool)uVar16" ! (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar18" ! (cast_expression "(bool)uVar18" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (bVar19) {\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }" if (parenthesized_expression "(bVar19)" ( identifier )) (compound_statement "{\nLAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);\n        if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }\n        if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }\n        if (uVar11 == 0) {\n          return false;\n        }\n        puVar8 = Object::decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);\n        this->buffer_ = puVar8;\n        if (puVar8 == (uchar *)0x0) {\n          return false;\n        }\n        this->buffer_end_ = puVar8 + buffer_size;\n        p_Var1 = (object->super_Object)._vptr_Object[6];\n        if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }\n        uVar15 = (object->super_Object).shnum_;\n        uVar6 = 0;\n        if (uVar15 == 0) goto LAB_003019e1;\n        uVar15 = 0;\n        goto LAB_003019b7;\n      }" { (labeled_statement "LAB_003018e2:\n        iVar5 = strcmp(__s1,pcVar3 + 4);" statement_identifier : (expression_statement "iVar5 = strcmp(__s1,pcVar3 + 4);" (assignment_expression "iVar5 = strcmp(__s1,pcVar3 + 4)" identifier = (call_expression "strcmp(__s1,pcVar3 + 4)" identifier (argument_list "(__s1,pcVar3 + 4)" ( identifier , (binary_expression "pcVar3 + 4" identifier + number_literal) )))) ;)) (if_statement "if (iVar5 != 0) {\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar5 = strcmp(__s1,__s2);\n          if (iVar5 != 0) goto LAB_00301901;\n          this->is_gnu_style_ = true;\n        }" { (expression_statement "iVar5 = strcmp(__s1,__s2);" (assignment_expression "iVar5 = strcmp(__s1,__s2)" identifier = (call_expression "strcmp(__s1,__s2)" identifier (argument_list "(__s1,__s2)" ( identifier , identifier )))) ;) (if_statement "if (iVar5 != 0) goto LAB_00301901;" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00301901;" goto statement_identifier ;)) (expression_statement "this->is_gnu_style_ = true;" (assignment_expression "this->is_gnu_style_ = true" (field_expression "this->is_gnu_style_" identifier -> field_identifier) = true) ;) })) (if_statement "if ((undefined1 *)sVar4 != local_48) {\n          operator_delete((void *)sVar4);\n        }" if (parenthesized_expression "((undefined1 *)sVar4 != local_48)" ( (binary_expression "(undefined1 *)sVar4 != local_48" (cast_expression "(undefined1 *)sVar4" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) )) (compound_statement "{\n          operator_delete((void *)sVar4);\n        }" { (expression_statement "operator_delete((void *)sVar4);" (call_expression "operator_delete((void *)sVar4)" identifier (argument_list "((void *)sVar4)" ( (cast_expression "(void *)sVar4" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) })) (if_statement "if (uVar11 == 0) {\n          return false;\n        }" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (compound_statement "{\n          return false;\n        }" { (return_statement "return false;" return false ;) })) (ERROR "puVar8 = Object::" (assignment_expression "puVar8 = Object" identifier = identifier) : :) (expression_statement "decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0);" (call_expression "decompressed_section_contents\n                           (&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0)" identifier (argument_list "(&object->super_Object,uVar11,&buffer_size,&this->owns_buffer_,\n                            (uint64_t *)0x0)" ( (pointer_expression "&object->super_Object" & (field_expression "object->super_Object" identifier -> field_identifier)) , identifier , (pointer_expression "&buffer_size" & identifier) , (pointer_expression "&this->owns_buffer_" & (field_expression "this->owns_buffer_" identifier -> field_identifier)) , (cast_expression "(uint64_t *)0x0" ( (type_descriptor "uint64_t *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "this->buffer_ = puVar8;" (assignment_expression "this->buffer_ = puVar8" (field_expression "this->buffer_" identifier -> field_identifier) = identifier) ;) (if_statement "if (puVar8 == (uchar *)0x0) {\n          return false;\n        }" if (parenthesized_expression "(puVar8 == (uchar *)0x0)" ( (binary_expression "puVar8 == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return false;\n        }" { (return_statement "return false;" return false ;) })) (expression_statement "this->buffer_end_ = puVar8 + buffer_size;" (assignment_expression "this->buffer_end_ = puVar8 + buffer_size" (field_expression "this->buffer_end_" identifier -> field_identifier) = (binary_expression "puVar8 + buffer_size" identifier + identifier)) ;) (expression_statement "p_Var1 = (object->super_Object)._vptr_Object[6];" (assignment_expression "p_Var1 = (object->super_Object)._vptr_Object[6]" identifier = (subscript_expression "(object->super_Object)._vptr_Object[6]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var1 != Object::do_is_incremental) {\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }" if (parenthesized_expression "(p_Var1 != Object::do_is_incremental)" ( (ERROR "p_Var1 != Object::" (binary_expression "p_Var1 != Object" identifier != identifier) : :) identifier )) (compound_statement "{\n          iVar5 = (*p_Var1)(object);\n          if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }\n        }" { (expression_statement "iVar5 = (*p_Var1)(object);" (assignment_expression "iVar5 = (*p_Var1)(object)" identifier = (call_expression "(*p_Var1)(object)" (parenthesized_expression "(*p_Var1)" ( (pointer_expression "*p_Var1" * identifier) )) (argument_list "(object)" ( identifier )))) ;) (if_statement "if ((char)iVar5 != '\0') {\n            return (bool)(char)iVar5;\n          }" if (parenthesized_expression "((char)iVar5 != '\0')" ( (binary_expression "(char)iVar5 != '\0'" (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            return (bool)(char)iVar5;\n          }" { (return_statement "return (bool)(char)iVar5;" return (cast_expression "(bool)(char)iVar5" ( (type_descriptor "bool" primitive_type) ) (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) })) })) (expression_statement "uVar15 = (object->super_Object).shnum_;" (assignment_expression "uVar15 = (object->super_Object).shnum_" identifier = (field_expression "(object->super_Object).shnum_" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (if_statement "if (uVar15 == 0) goto LAB_003019e1;" if (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_003019b7;" goto statement_identifier ;) })) (expression_statement "lVar10 = 8;" (assignment_expression "lVar10 = 8" identifier = number_literal) ;) (expression_statement "__s1 = (char *)(buffer_size + 8);" (assignment_expression "__s1 = (char *)(buffer_size + 8)" identifier = (cast_expression "(char *)(buffer_size + 8)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(buffer_size + 8)" ( (binary_expression "buffer_size + 8" identifier + number_literal) )))) ;) (expression_statement "pbVar13 = (byte *)".zdebug_";" (assignment_expression "pbVar13 = (byte *)".zdebug_"" identifier = (cast_expression "(byte *)".zdebug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".zdebug_"" " string_content "))) ;) (expression_statement "pbVar14 = (byte *)buffer_size;" (assignment_expression "pbVar14 = (byte *)buffer_size" identifier = (cast_expression "(byte *)buffer_size" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      } while (bVar19);" do (compound_statement "{\n        if (lVar10 == 0) break;\n        lVar10 = lVar10 + -1;\n        bVar17 = *pbVar13 < *pbVar14;\n        bVar19 = *pbVar13 == *pbVar14;\n        pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;\n        pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;\n      }" { (if_statement "if (lVar10 == 0) break;" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" identifier = (binary_expression "lVar10 + -1" identifier + number_literal)) ;) (expression_statement "bVar17 = *pbVar13 < *pbVar14;" (assignment_expression "bVar17 = *pbVar13 < *pbVar14" identifier = (binary_expression "*pbVar13 < *pbVar14" (pointer_expression "*pbVar13" * identifier) < (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "bVar19 = *pbVar13 == *pbVar14;" (assignment_expression "bVar19 = *pbVar13 == *pbVar14" identifier = (binary_expression "*pbVar13 == *pbVar14" (pointer_expression "*pbVar13" * identifier) == (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1;" (assignment_expression "pbVar13 = pbVar13 + (ulong)bVar20 * -2 + 1" identifier = (binary_expression "pbVar13 + (ulong)bVar20 * -2 + 1" (binary_expression "pbVar13 + (ulong)bVar20 * -2" identifier + (binary_expression "(ulong)bVar20 * -2" (cast_expression "(ulong)bVar20" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1;" (assignment_expression "pbVar14 = pbVar14 + (ulong)bVar20 * -2 + 1" identifier = (binary_expression "pbVar14 + (ulong)bVar20 * -2 + 1" (binary_expression "pbVar14 + (ulong)bVar20 * -2" identifier + (binary_expression "(ulong)bVar20 * -2" (cast_expression "(ulong)bVar20" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar19)" ( identifier )) ;) (if_statement "if ((!bVar17 && !bVar19) == bVar17) goto LAB_003018e2;" if (parenthesized_expression "((!bVar17 && !bVar19) == bVar17)" ( (binary_expression "(!bVar17 && !bVar19) == bVar17" (parenthesized_expression "(!bVar17 && !bVar19)" ( (binary_expression "!bVar17 && !bVar19" (unary_expression "!bVar17" ! identifier) && (unary_expression "!bVar19" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_003018e2;" goto statement_identifier ;)) (labeled_statement "LAB_00301901:\n      if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }" statement_identifier : (if_statement "if ((undefined1 *)sVar4 != local_48) {\n        operator_delete((void *)sVar4);\n      }" if (parenthesized_expression "((undefined1 *)sVar4 != local_48)" ( (binary_expression "(undefined1 *)sVar4 != local_48" (cast_expression "(undefined1 *)sVar4" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) )) (compound_statement "{\n        operator_delete((void *)sVar4);\n      }" { (expression_statement "operator_delete((void *)sVar4);" (call_expression "operator_delete((void *)sVar4)" identifier (argument_list "((void *)sVar4)" ( (cast_expression "(void *)sVar4" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) }))) (expression_statement "uVar11 = uVar11 + 1;" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar12 = (ulong)uVar11;" (assignment_expression "uVar12 = (ulong)uVar11" identifier = (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "uVar15 = (object->super_Object).shnum_;" (assignment_expression "uVar15 = (object->super_Object).shnum_" identifier = (field_expression "(object->super_Object).shnum_" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar16 = uVar11 < uVar15;" (assignment_expression "uVar16 = uVar11 < uVar15" identifier = (binary_expression "uVar11 < uVar15" identifier < identifier)) ;) (expression_statement "uVar18 = uVar11 == uVar15;" (assignment_expression "uVar18 = uVar11 == uVar15" identifier = (binary_expression "uVar11 == uVar15" identifier == identifier)) ;) }) while (parenthesized_expression "((bool)uVar16)" ( (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) })) (return_statement "return false;" return false ;) (while_statement "while (uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_) {\nLAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);\n    if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;\n  }" while (parenthesized_expression "(uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_)" ( (comma_expression "uVar15 = uVar15 + 1, uVar15 < (object->super_Object).shnum_" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) , (binary_expression "uVar15 < (object->super_Object).shnum_" identifier < (field_expression "(object->super_Object).shnum_" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier))) )) (compound_statement "{\nLAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);\n    if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;\n  }" { (labeled_statement "LAB_003019b7:\n    uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);" statement_identifier : (expression_statement "uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15);" (assignment_expression "uVar6 = (*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15)" identifier = (call_expression "(*(object->super_Object)._vptr_Object[0x14])(object,(ulong)uVar15)" (parenthesized_expression "(*(object->super_Object)._vptr_Object[0x14])" ( (pointer_expression "*(object->super_Object)._vptr_Object[0x14]" * (subscript_expression "(object->super_Object)._vptr_Object[0x14]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(object,(ulong)uVar15)" ( identifier , (cast_expression "(ulong)uVar15" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) ;)) (if_statement "if (((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       ) goto LAB_003019e1;" if (parenthesized_expression "(((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)\n       )" ( (binary_expression "((uVar6 == 9) || (uVar6 == 4)) &&\n       (uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)" (parenthesized_expression "((uVar6 == 9) || (uVar6 == 4))" ( (binary_expression "(uVar6 == 9) || (uVar6 == 4)" (parenthesized_expression "(uVar6 == 9)" ( (binary_expression "uVar6 == 9" identifier == number_literal) )) || (parenthesized_expression "(uVar6 == 4)" ( (binary_expression "uVar6 == 4" identifier == number_literal) ))) )) && (parenthesized_expression "(uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7)" ( (comma_expression "uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15), uVar11 == uVar7" (assignment_expression "uVar7 = (*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15)" identifier = (call_expression "(*(object->super_Object)._vptr_Object[0x16])(object,(ulong)uVar15)" (parenthesized_expression "(*(object->super_Object)._vptr_Object[0x16])" ( (pointer_expression "*(object->super_Object)._vptr_Object[0x16]" * (subscript_expression "(object->super_Object)._vptr_Object[0x16]" (field_expression "(object->super_Object)._vptr_Object" (parenthesized_expression "(object->super_Object)" ( (field_expression "object->super_Object" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(object,(ulong)uVar15)" ( identifier , (cast_expression "(ulong)uVar15" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) , (binary_expression "uVar11 == uVar7" identifier == identifier)) ))) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) })) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (labeled_statement "LAB_003019e1:\n  pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);" statement_identifier : (expression_statement "pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size);" (assignment_expression "pEVar9 = make_elf_reloc_mapper(object,symtab,symtab_size)" identifier = (call_expression "make_elf_reloc_mapper(object,symtab,symtab_size)" identifier (argument_list "(object,symtab,symtab_size)" ( identifier , identifier , identifier )))) ;)) (expression_statement "pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;" (assignment_expression "pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper" identifier = (field_expression "pEVar9->_vptr_Elf_reloc_mapper" identifier -> field_identifier)) ;) (expression_statement "this->reloc_mapper_ = pEVar9;" (assignment_expression "this->reloc_mapper_ = pEVar9" (field_expression "this->reloc_mapper_" identifier -> field_identifier) = identifier) ;) (expression_statement "(*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6);" (call_expression "(*pp_Var2[2])(pEVar9,(ulong)uVar15,(ulong)uVar6)" (parenthesized_expression "(*pp_Var2[2])" ( (pointer_expression "*pp_Var2[2]" * (subscript_expression "pp_Var2[2]" identifier [ number_literal ])) )) (argument_list "(pEVar9,(ulong)uVar15,(ulong)uVar6)" ( identifier , (cast_expression "(ulong)uVar15" ( (type_descriptor "ulong" type_identifier) ) identifier) , (cast_expression "(ulong)uVar6" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (expression_statement "this->reloc_type_ = uVar6;" (assignment_expression "this->reloc_type_ = uVar6" (field_expression "this->reloc_type_" identifier -> field_identifier) = identifier) ;) (return_statement "return true;" return true ;) })))
(translation_unit "undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" type_identifier (function_declarator "FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "byte *__s1;" type_identifier (pointer_declarator "*__s1" * identifier) ;) (declaration "undefined1 uVar12;" type_identifier identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "undefined1 uVar14;" type_identifier identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (declaration "byte bVar16;" type_identifier identifier ;) (declaration "byte *local_58 [2];" type_identifier (pointer_declarator "*local_58 [2]" * (array_declarator "local_58 [2]" identifier [ number_literal ])) ;) (declaration "byte local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" identifier = number_literal) ;) (expression_statement "pcVar1 = "gnu_pubtypes";" (assignment_expression "pcVar1 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (expression_statement "bVar13 = *(char *)(param_1 + 0x30) == '\0';" (assignment_expression "bVar13 = *(char *)(param_1 + 0x30) == '\0'" identifier = (binary_expression "*(char *)(param_1 + 0x30) == '\0'" (pointer_expression "*(char *)(param_1 + 0x30)" * (cast_expression "(char *)(param_1 + 0x30)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence '))) ;) (if_statement "if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }" if (parenthesized_expression "(bVar13)" ( identifier )) (compound_statement "{\n    pcVar1 = "gnu_pubnames";\n  }" { (expression_statement "pcVar1 = "gnu_pubnames";" (assignment_expression "pcVar1 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) })) (expression_statement "__s2 = "gnu_pubnames";" (assignment_expression "__s2 = "gnu_pubnames"" identifier = (string_literal ""gnu_pubnames"" " string_content ")) ;) (if_statement "if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }" if (parenthesized_expression "(!bVar13)" ( (unary_expression "!bVar13" ! identifier) )) (compound_statement "{\n    __s2 = "gnu_pubtypes";\n  }" { (expression_statement "__s2 = "gnu_pubtypes";" (assignment_expression "__s2 = "gnu_pubtypes"" identifier = (string_literal ""gnu_pubtypes"" " string_content ")) ;) })) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" identifier = (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar11 == 0;" (assignment_expression "uVar12 = uVar11 == 0" identifier = (binary_expression "uVar11 == 0" identifier == number_literal)) ;) (expression_statement "uVar14 = uVar11 == 1;" (assignment_expression "uVar14 = uVar11 == 1" identifier = (binary_expression "uVar11 == 1" identifier == number_literal)) ;) (if_statement "if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" if (parenthesized_expression "(1 < uVar11)" ( (binary_expression "1 < uVar11" number_literal < identifier) )) (compound_statement "{\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" { (do_statement "do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);" do (compound_statement "{\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    }" { (expression_statement "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);" (call_expression "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8)" (parenthesized_expression "(**(code **)(*param_2 + 0x80))" ( (pointer_expression "**(code **)(*param_2 + 0x80)" * (pointer_expression "*(code **)(*param_2 + 0x80)" * (cast_expression "(code **)(*param_2 + 0x80)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x80)" ( (binary_expression "*param_2 + 0x80" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(local_58,param_2,uVar8)" ( identifier , identifier , identifier ))) ;) (expression_statement "pbVar2 = local_58[0];" (assignment_expression "pbVar2 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" identifier = number_literal) ;) (expression_statement "__s1 = local_58[0] + 7;" (assignment_expression "__s1 = local_58[0] + 7" identifier = (binary_expression "local_58[0] + 7" (subscript_expression "local_58[0]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "pbVar9 = (byte *)".debug_";" (assignment_expression "pbVar9 = (byte *)".debug_"" identifier = (cast_expression "(byte *)".debug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".debug_"" " string_content "))) ;) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);" do (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" { (if_statement "if (lVar7 == 0) break;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar12 = *pbVar9 < *pbVar10;" (assignment_expression "uVar12 = *pbVar9 < *pbVar10" identifier = (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" * identifier) < (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "uVar14 = *pbVar9 == *pbVar10;" (assignment_expression "uVar14 = *pbVar9 == *pbVar10" identifier = (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" * identifier) == (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar14)" ( (cast_expression "(bool)uVar14" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar13 = false;" (assignment_expression "bVar13 = false" identifier = false) ;) (expression_statement "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;" (assignment_expression "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" identifier = (binary_expression "(!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" (parenthesized_expression "(!(bool)uVar12 && !(bool)uVar14)" ( (binary_expression "!(bool)uVar12 && !(bool)uVar14" (unary_expression "!(bool)uVar12" ! (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar14" ! (cast_expression "(bool)uVar14" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" if (parenthesized_expression "(bVar15)" ( identifier )) (compound_statement "{\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" { (labeled_statement "LAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);" statement_identifier : (expression_statement "iVar3 = strcmp((char *)__s1,pcVar1 + 4);" (assignment_expression "iVar3 = strcmp((char *)__s1,pcVar1 + 4)" identifier = (call_expression "strcmp((char *)__s1,pcVar1 + 4)" identifier (argument_list "((char *)__s1,pcVar1 + 4)" ( (cast_expression "(char *)__s1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "pcVar1 + 4" identifier + number_literal) )))) ;)) (if_statement "if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" { (expression_statement "iVar3 = strcmp((char *)__s1,__s2);" (assignment_expression "iVar3 = strcmp((char *)__s1,__s2)" identifier = (call_expression "strcmp((char *)__s1,__s2)" identifier (argument_list "((char *)__s1,__s2)" ( (cast_expression "(char *)__s1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar3 != 0) goto LAB_00301901;" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00301901;" goto statement_identifier ;)) (expression_statement "*(undefined1 *)(param_1 + 0x31) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x31) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x31)" * (cast_expression "(undefined1 *)(param_1 + 0x31)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x31)" ( (binary_expression "param_1 + 0x31" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }" if (parenthesized_expression "(pbVar2 != local_48)" ( (binary_expression "pbVar2 != local_48" identifier != identifier) )) (compound_statement "{\n          FUN_00338a40(pbVar2);\n        }" { (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" identifier (argument_list "(pbVar2)" ( identifier ))) ;) })) (if_statement "if (uVar8 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);" (assignment_expression "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" identifier = (call_expression "FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" identifier (argument_list "(param_2,uVar8,local_58,param_1 + 0x18,0)" ( identifier , identifier , identifier , (binary_expression "param_1 + 0x18" identifier + number_literal) , number_literal )))) ;) (expression_statement "*(long *)(param_1 + 8) = lVar7;" (assignment_expression "*(long *)(param_1 + 8) = lVar7" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = identifier) ;) (if_statement "if (lVar7 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7;" (assignment_expression "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7" (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (binary_expression "local_58[0] + lVar7" (subscript_expression "local_58[0]" identifier [ number_literal ]) + identifier)) ;) (if_statement "if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }" if (parenthesized_expression "((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'))" ( (binary_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" (parenthesized_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90)" ( (binary_expression "*(code **)(*param_2 + 0x30) != FUN_001b8c90" (pointer_expression "*(code **)(*param_2 + 0x30)" * (cast_expression "(code **)(*param_2 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x30)" ( (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" * identifier) + number_literal) )))) != identifier) )) && (parenthesized_expression "(uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" ( (comma_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'" (assignment_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2)" identifier = (call_expression "(**(code **)(*param_2 + 0x30))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x30))" ( (pointer_expression "**(code **)(*param_2 + 0x30)" * (pointer_expression "*(code **)(*param_2 + 0x30)" * (cast_expression "(code **)(*param_2 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x30)" ( (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier )))) , (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n          return uVar6;\n        }" { (return_statement "return uVar6;" return identifier ;) })) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" identifier = (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (if_statement "if (uVar11 == 0) goto LAB_003019e1;" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_003019b7;" goto statement_identifier ;) })) (expression_statement "lVar7 = 8;" (assignment_expression "lVar7 = 8" identifier = number_literal) ;) (expression_statement "__s1 = local_58[0] + 8;" (assignment_expression "__s1 = local_58[0] + 8" identifier = (binary_expression "local_58[0] + 8" (subscript_expression "local_58[0]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "pbVar9 = (byte *)".zdebug_";" (assignment_expression "pbVar9 = (byte *)".zdebug_"" identifier = (cast_expression "(byte *)".zdebug_"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal "".zdebug_"" " string_content "))) ;) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);" do (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" { (if_statement "if (lVar7 == 0) break;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" identifier = (binary_expression "lVar7 + -1" identifier + number_literal)) ;) (expression_statement "bVar13 = *pbVar9 < *pbVar10;" (assignment_expression "bVar13 = *pbVar9 < *pbVar10" identifier = (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" * identifier) < (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "bVar15 = *pbVar9 == *pbVar10;" (assignment_expression "bVar15 = *pbVar9 == *pbVar10" identifier = (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" * identifier) == (pointer_expression "*pbVar10" * identifier))) ;) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" identifier = (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" identifier + (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar15)" ( identifier )) ;) (if_statement "if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;" if (parenthesized_expression "((!bVar13 && !bVar15) == bVar13)" ( (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" ( (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" ! identifier) && (unary_expression "!bVar15" ! identifier)) )) == identifier) )) (goto_statement "goto LAB_003018e2;" goto statement_identifier ;)) (labeled_statement "LAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" statement_identifier : (if_statement "if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" if (parenthesized_expression "(pbVar2 != local_48)" ( (binary_expression "pbVar2 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_00338a40(pbVar2);\n      }" { (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" identifier (argument_list "(pbVar2)" ( identifier ))) ;) }))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar12 = uVar8 < *(uint *)(param_2 + 7);" (assignment_expression "uVar12 = uVar8 < *(uint *)(param_2 + 7)" identifier = (binary_expression "uVar8 < *(uint *)(param_2 + 7)" identifier < (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) ;) (expression_statement "uVar14 = uVar8 == *(uint *)(param_2 + 7);" (assignment_expression "uVar14 = uVar8 == *(uint *)(param_2 + 7)" identifier = (binary_expression "uVar8 == *(uint *)(param_2 + 7)" identifier == (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) ;) }) while (parenthesized_expression "((bool)uVar12)" ( (cast_expression "(bool)uVar12" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) (while_statement "while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" while (parenthesized_expression "(uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7))" ( (comma_expression "uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) , (binary_expression "uVar11 < *(uint *)(param_2 + 7)" identifier < (pointer_expression "*(uint *)(param_2 + 7)" * (cast_expression "(uint *)(param_2 + 7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))))) )) (compound_statement "{\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" { (labeled_statement "LAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" statement_identifier : (expression_statement "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" (assignment_expression "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11)" identifier = (call_expression "(**(code **)(*param_2 + 0xa0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xa0))" ( (pointer_expression "**(code **)(*param_2 + 0xa0)" * (pointer_expression "*(code **)(*param_2 + 0xa0)" * (cast_expression "(code **)(*param_2 + 0xa0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xa0)" ( (binary_expression "*param_2 + 0xa0" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,uVar11)" ( identifier , identifier )))) ;)) (if_statement "if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;" if (parenthesized_expression "(((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4))" ( (binary_expression "((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" (parenthesized_expression "((iVar3 == 9) || (iVar3 == 4))" ( (binary_expression "(iVar3 == 9) || (iVar3 == 4)" (parenthesized_expression "(iVar3 == 9)" ( (binary_expression "iVar3 == 9" identifier == number_literal) )) || (parenthesized_expression "(iVar3 == 4)" ( (binary_expression "iVar3 == 4" identifier == number_literal) ))) )) && (parenthesized_expression "(uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" ( (comma_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11)" identifier = (call_expression "(**(code **)(*param_2 + 0xb0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xb0))" ( (pointer_expression "**(code **)(*param_2 + 0xb0)" * (pointer_expression "*(code **)(*param_2 + 0xb0)" * (cast_expression "(code **)(*param_2 + 0xb0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0xb0)" ( (binary_expression "*param_2 + 0xb0" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,uVar11)" ( identifier , identifier )))) , (binary_expression "uVar8 == uVar4" identifier == identifier)) ))) )) (goto_statement "goto LAB_003019e1;" goto statement_identifier ;)) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (labeled_statement "LAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" statement_identifier : (expression_statement "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" (assignment_expression "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4)" identifier = (cast_expression "(long *)FUN_00301200(param_2,param_3,param_4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00301200(param_2,param_3,param_4)" identifier (argument_list "(param_2,param_3,param_4)" ( identifier , identifier , identifier ))))) ;)) (expression_statement "lVar7 = *plVar5;" (assignment_expression "lVar7 = *plVar5" identifier = (pointer_expression "*plVar5" * identifier)) ;) (expression_statement "*(long **)(param_1 + 0x48) = plVar5;" (assignment_expression "*(long **)(param_1 + 0x48) = plVar5" (pointer_expression "*(long **)(param_1 + 0x48)" * (cast_expression "(long **)(param_1 + 0x48)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);" (call_expression "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3)" (parenthesized_expression "(**(code **)(lVar7 + 0x10))" ( (pointer_expression "**(code **)(lVar7 + 0x10)" * (pointer_expression "*(code **)(lVar7 + 0x10)" * (cast_expression "(code **)(lVar7 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar7 + 0x10)" ( (binary_expression "lVar7 + 0x10" identifier + number_literal) ))))) )) (argument_list "(plVar5,uVar11,iVar3)" ( identifier , identifier , identifier ))) ;) (expression_statement "*(int *)(param_1 + 0x50) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x50) = iVar3" (pointer_expression "*(int *)(param_1 + 0x50)" * (cast_expression "(int *)(param_1 + 0x50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence '))) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (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 * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) && (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) == (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , (binary_expression IDENT + LIT) )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (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 != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (binary_expression IDENT + LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (char_literal ' escape_sequence '))) ))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) }) while (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) ;) })) (return_statement return LIT ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT )))) , (binary_expression IDENT == IDENT)) ))) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)\n\n{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" (type_identifier "undefined8") (function_declarator "FUN_00301830(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" (identifier "FUN_00301830") (parameter_list "(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) () ")"))) (compound_statement "{\n  char *pcVar1;\n  byte *pbVar2;\n  int iVar3;\n  uint uVar4;\n  char *__s2;\n  long *plVar5;\n  undefined8 uVar6;\n  long lVar7;\n  uint uVar8;\n  byte *pbVar9;\n  byte *pbVar10;\n  uint uVar11;\n  byte *__s1;\n  undefined1 uVar12;\n  bool bVar13;\n  undefined1 uVar14;\n  bool bVar15;\n  byte bVar16;\n  byte *local_58 [2];\n  byte local_48 [24];\n  \n  bVar16 = 0;\n  pcVar1 = "gnu_pubtypes";\n  uVar8 = 1;\n  bVar13 = *(char *)(param_1 + 0x30) == '\0';\n  if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }\n  __s2 = "gnu_pubnames";\n  if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }\n  uVar11 = *(uint *)(param_2 + 7);\n  uVar12 = uVar11 == 0;\n  uVar14 = uVar11 == 1;\n  if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }\n  return 0;\n  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }\n  uVar11 = 0;\nLAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);\n  lVar7 = *plVar5;\n  *(long **)(param_1 + 0x48) = plVar5;\n  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);\n  *(int *)(param_1 + 0x50) = iVar3;\n  return 1;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "byte *pbVar2;" (type_identifier "byte") (pointer_declarator "*pbVar2" (* "*") (identifier "pbVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "char *__s2;" (primitive_type "char") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "byte *pbVar9;" (type_identifier "byte") (pointer_declarator "*pbVar9" (* "*") (identifier "pbVar9")) (; ";")) (declaration "byte *pbVar10;" (type_identifier "byte") (pointer_declarator "*pbVar10" (* "*") (identifier "pbVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "byte *__s1;" (type_identifier "byte") (pointer_declarator "*__s1" (* "*") (identifier "__s1")) (; ";")) (declaration "undefined1 uVar12;" (type_identifier "undefined1") (identifier "uVar12") (; ";")) (declaration "bool bVar13;" (primitive_type "bool") (identifier "bVar13") (; ";")) (declaration "undefined1 uVar14;" (type_identifier "undefined1") (identifier "uVar14") (; ";")) (declaration "bool bVar15;" (primitive_type "bool") (identifier "bVar15") (; ";")) (declaration "byte bVar16;" (type_identifier "byte") (identifier "bVar16") (; ";")) (declaration "byte *local_58 [2];" (type_identifier "byte") (pointer_declarator "*local_58 [2]" (* "*") (array_declarator "local_58 [2]" (identifier "local_58") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "byte local_48 [24];" (type_identifier "byte") (array_declarator "local_48 [24]" (identifier "local_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "bVar16 = 0;" (assignment_expression "bVar16 = 0" (identifier "bVar16") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar1 = "gnu_pubtypes";" (assignment_expression "pcVar1 = "gnu_pubtypes"" (identifier "pcVar1") (= "=") (string_literal ""gnu_pubtypes"" (" """) (string_content "gnu_pubtypes") (" """))) (; ";")) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" (identifier "uVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "bVar13 = *(char *)(param_1 + 0x30) == '\0';" (assignment_expression "bVar13 = *(char *)(param_1 + 0x30) == '\0'" (identifier "bVar13") (= "=") (binary_expression "*(char *)(param_1 + 0x30) == '\0'" (pointer_expression "*(char *)(param_1 + 0x30)" (* "*") (cast_expression "(char *)(param_1 + 0x30)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) (; ";")) (if_statement "if (bVar13) {\n    pcVar1 = "gnu_pubnames";\n  }" (if "if") (parenthesized_expression "(bVar13)" (( "(") (identifier "bVar13") () ")")) (compound_statement "{\n    pcVar1 = "gnu_pubnames";\n  }" ({ "{") (expression_statement "pcVar1 = "gnu_pubnames";" (assignment_expression "pcVar1 = "gnu_pubnames"" (identifier "pcVar1") (= "=") (string_literal ""gnu_pubnames"" (" """) (string_content "gnu_pubnames") (" """))) (; ";")) (} "}"))) (expression_statement "__s2 = "gnu_pubnames";" (assignment_expression "__s2 = "gnu_pubnames"" (identifier "__s2") (= "=") (string_literal ""gnu_pubnames"" (" """) (string_content "gnu_pubnames") (" """))) (; ";")) (if_statement "if (!bVar13) {\n    __s2 = "gnu_pubtypes";\n  }" (if "if") (parenthesized_expression "(!bVar13)" (( "(") (unary_expression "!bVar13" (! "!") (identifier "bVar13")) () ")")) (compound_statement "{\n    __s2 = "gnu_pubtypes";\n  }" ({ "{") (expression_statement "__s2 = "gnu_pubtypes";" (assignment_expression "__s2 = "gnu_pubtypes"" (identifier "__s2") (= "=") (string_literal ""gnu_pubtypes"" (" """) (string_content "gnu_pubtypes") (" """))) (; ";")) (} "}"))) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(param_2 + 7)" (* "*") (cast_expression "(uint *)(param_2 + 7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "uVar12 = uVar11 == 0;" (assignment_expression "uVar12 = uVar11 == 0" (identifier "uVar12") (= "=") (binary_expression "uVar11 == 0" (identifier "uVar11") (== "==") (number_literal "0"))) (; ";")) (expression_statement "uVar14 = uVar11 == 1;" (assignment_expression "uVar14 = uVar11 == 1" (identifier "uVar14") (= "=") (binary_expression "uVar11 == 1" (identifier "uVar11") (== "==") (number_literal "1"))) (; ";")) (if_statement "if (1 < uVar11) {\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" (if "if") (parenthesized_expression "(1 < uVar11)" (( "(") (binary_expression "1 < uVar11" (number_literal "1") (< "<") (identifier "uVar11")) () ")")) (compound_statement "{\n    do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);\n  }" ({ "{") (do_statement "do {\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    } while ((bool)uVar12);" (do "do") (compound_statement "{\n      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);\n      pbVar2 = local_58[0];\n      lVar7 = 7;\n      __s1 = local_58[0] + 7;\n      pbVar9 = (byte *)".debug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);\n      bVar13 = false;\n      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;\n      if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }\n      lVar7 = 8;\n      __s1 = local_58[0] + 8;\n      pbVar9 = (byte *)".zdebug_";\n      pbVar10 = local_58[0];\n      do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);\n      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;\nLAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }\n      uVar8 = uVar8 + 1;\n      uVar12 = uVar8 < *(uint *)(param_2 + 7);\n      uVar14 = uVar8 == *(uint *)(param_2 + 7);\n    }" ({ "{") (expression_statement "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);" (call_expression "(**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8)" (parenthesized_expression "(**(code **)(*param_2 + 0x80))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x80)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x80)" (* "*") (cast_expression "(code **)(*param_2 + 0x80)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x80)" (( "(") (binary_expression "*param_2 + 0x80" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x80")) () ")"))))) () ")")) (argument_list "(local_58,param_2,uVar8)" (( "(") (identifier "local_58") (, ",") (identifier "param_2") (, ",") (identifier "uVar8") () ")"))) (; ";")) (expression_statement "pbVar2 = local_58[0];" (assignment_expression "pbVar2 = local_58[0]" (identifier "pbVar2") (= "=") (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]"))) (; ";")) (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" (identifier "lVar7") (= "=") (number_literal "7")) (; ";")) (expression_statement "__s1 = local_58[0] + 7;" (assignment_expression "__s1 = local_58[0] + 7" (identifier "__s1") (= "=") (binary_expression "local_58[0] + 7" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "7"))) (; ";")) (expression_statement "pbVar9 = (byte *)".debug_";" (assignment_expression "pbVar9 = (byte *)".debug_"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)".debug_"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal "".debug_"" (" """) (string_content ".debug_") (" """)))) (; ";")) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" (identifier "pbVar10") (= "=") (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]"))) (; ";")) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while ((bool)uVar14);" (do "do") (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        uVar12 = *pbVar9 < *pbVar10;\n        uVar14 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" ({ "{") (if_statement "if (lVar7 == 0) break;" (if "if") (parenthesized_expression "(lVar7 == 0)" (( "(") (binary_expression "lVar7 == 0" (identifier "lVar7") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" (identifier "lVar7") (= "=") (binary_expression "lVar7 + -1" (identifier "lVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar12 = *pbVar9 < *pbVar10;" (assignment_expression "uVar12 = *pbVar9 < *pbVar10" (identifier "uVar12") (= "=") (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")) (< "<") (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")))) (; ";")) (expression_statement "uVar14 = *pbVar9 == *pbVar10;" (assignment_expression "uVar14 = *pbVar9 == *pbVar10" (identifier "uVar14") (= "=") (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")) (== "==") (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" (identifier "pbVar10") (+ "+") (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bool)uVar14)" (( "(") (cast_expression "(bool)uVar14" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar14")) () ")")) (; ";")) (expression_statement "bVar13 = false;" (assignment_expression "bVar13 = false" (identifier "bVar13") (= "=") (false "false")) (; ";")) (expression_statement "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;" (assignment_expression "bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" (identifier "bVar15") (= "=") (binary_expression "(!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12" (parenthesized_expression "(!(bool)uVar12 && !(bool)uVar14)" (( "(") (binary_expression "!(bool)uVar12 && !(bool)uVar14" (unary_expression "!(bool)uVar12" (! "!") (cast_expression "(bool)uVar12" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar12"))) (&& "&&") (unary_expression "!(bool)uVar14" (! "!") (cast_expression "(bool)uVar14" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar14")))) () ")")) (== "==") (cast_expression "(bool)uVar12" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar12")))) (; ";")) (if_statement "if (bVar15) {\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" (if "if") (parenthesized_expression "(bVar15)" (( "(") (identifier "bVar15") () ")")) (compound_statement "{\nLAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);\n        if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }\n        if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }\n        if (uVar8 == 0) {\n          return 0;\n        }\n        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);\n        *(long *)(param_1 + 8) = lVar7;\n        if (lVar7 == 0) {\n          return 0;\n        }\n        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;\n        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }\n        uVar11 = *(uint *)(param_2 + 7);\n        iVar3 = 0;\n        if (uVar11 == 0) goto LAB_003019e1;\n        uVar11 = 0;\n        goto LAB_003019b7;\n      }" ({ "{") (labeled_statement "LAB_003018e2:\n        iVar3 = strcmp((char *)__s1,pcVar1 + 4);" (statement_identifier "LAB_003018e2") (: ":") (expression_statement "iVar3 = strcmp((char *)__s1,pcVar1 + 4);" (assignment_expression "iVar3 = strcmp((char *)__s1,pcVar1 + 4)" (identifier "iVar3") (= "=") (call_expression "strcmp((char *)__s1,pcVar1 + 4)" (identifier "strcmp") (argument_list "((char *)__s1,pcVar1 + 4)" (( "(") (cast_expression "(char *)__s1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "__s1")) (, ",") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")")))) (; ";"))) (if_statement "if (iVar3 != 0) {\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          iVar3 = strcmp((char *)__s1,__s2);\n          if (iVar3 != 0) goto LAB_00301901;\n          *(undefined1 *)(param_1 + 0x31) = 1;\n        }" ({ "{") (expression_statement "iVar3 = strcmp((char *)__s1,__s2);" (assignment_expression "iVar3 = strcmp((char *)__s1,__s2)" (identifier "iVar3") (= "=") (call_expression "strcmp((char *)__s1,__s2)" (identifier "strcmp") (argument_list "((char *)__s1,__s2)" (( "(") (cast_expression "(char *)__s1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "__s1")) (, ",") (identifier "__s2") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) goto LAB_00301901;" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00301901;" (goto "goto") (statement_identifier "LAB_00301901") (; ";"))) (expression_statement "*(undefined1 *)(param_1 + 0x31) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x31) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x31)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0x31)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x31)" (( "(") (binary_expression "param_1 + 0x31" (identifier "param_1") (+ "+") (number_literal "0x31")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}"))) (if_statement "if (pbVar2 != local_48) {\n          FUN_00338a40(pbVar2);\n        }" (if "if") (parenthesized_expression "(pbVar2 != local_48)" (( "(") (binary_expression "pbVar2 != local_48" (identifier "pbVar2") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n          FUN_00338a40(pbVar2);\n        }" ({ "{") (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" (identifier "FUN_00338a40") (argument_list "(pbVar2)" (( "(") (identifier "pbVar2") () ")"))) (; ";")) (} "}"))) (if_statement "if (uVar8 == 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(uVar8 == 0)" (( "(") (binary_expression "uVar8 == 0" (identifier "uVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);" (assignment_expression "lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" (identifier "lVar7") (= "=") (call_expression "FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0)" (identifier "FUN_0022a660") (argument_list "(param_2,uVar8,local_58,param_1 + 0x18,0)" (( "(") (identifier "param_2") (, ",") (identifier "uVar8") (, ",") (identifier "local_58") (, ",") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "*(long *)(param_1 + 8) = lVar7;" (assignment_expression "*(long *)(param_1 + 8) = lVar7" (pointer_expression "*(long *)(param_1 + 8)" (* "*") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "lVar7")) (; ";")) (if_statement "if (lVar7 == 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(lVar7 == 0)" (( "(") (binary_expression "lVar7 == 0" (identifier "lVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7;" (assignment_expression "*(byte **)(param_1 + 0x10) = local_58[0] + lVar7" (pointer_expression "*(byte **)(param_1 + 0x10)" (* "*") (cast_expression "(byte **)(param_1 + 0x10)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (binary_expression "local_58[0] + lVar7" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (+ "+") (identifier "lVar7"))) (; ";")) (if_statement "if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {\n          return uVar6;\n        }" (if "if") (parenthesized_expression "((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'))" (( "(") (binary_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&\n           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" (parenthesized_expression "(*(code **)(*param_2 + 0x30) != FUN_001b8c90)" (( "(") (binary_expression "*(code **)(*param_2 + 0x30) != FUN_001b8c90" (pointer_expression "*(code **)(*param_2 + 0x30)" (* "*") (cast_expression "(code **)(*param_2 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x30)" (( "(") (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x30")) () ")")))) (!= "!=") (identifier "FUN_001b8c90")) () ")")) (&& "&&") (parenthesized_expression "(uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')" (( "(") (comma_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0'" (assignment_expression "uVar6 = (**(code **)(*param_2 + 0x30))(param_2)" (identifier "uVar6") (= "=") (call_expression "(**(code **)(*param_2 + 0x30))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x30))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x30)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x30)" (* "*") (cast_expression "(code **)(*param_2 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x30)" (( "(") (binary_expression "*param_2 + 0x30" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (, ",") (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar6")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")"))) () ")")) (compound_statement "{\n          return uVar6;\n        }" ({ "{") (return_statement "return uVar6;" (return "return") (identifier "uVar6") (; ";")) (} "}"))) (expression_statement "uVar11 = *(uint *)(param_2 + 7);" (assignment_expression "uVar11 = *(uint *)(param_2 + 7)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(param_2 + 7)" (* "*") (cast_expression "(uint *)(param_2 + 7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")"))))) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar11 == 0) goto LAB_003019e1;" (if "if") (parenthesized_expression "(uVar11 == 0)" (( "(") (binary_expression "uVar11 == 0" (identifier "uVar11") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_003019e1;" (goto "goto") (statement_identifier "LAB_003019e1") (; ";"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_003019b7;" (goto "goto") (statement_identifier "LAB_003019b7") (; ";")) (} "}"))) (expression_statement "lVar7 = 8;" (assignment_expression "lVar7 = 8" (identifier "lVar7") (= "=") (number_literal "8")) (; ";")) (expression_statement "__s1 = local_58[0] + 8;" (assignment_expression "__s1 = local_58[0] + 8" (identifier "__s1") (= "=") (binary_expression "local_58[0] + 8" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "8"))) (; ";")) (expression_statement "pbVar9 = (byte *)".zdebug_";" (assignment_expression "pbVar9 = (byte *)".zdebug_"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)".zdebug_"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal "".zdebug_"" (" """) (string_content ".zdebug_") (" """)))) (; ";")) (expression_statement "pbVar10 = local_58[0];" (assignment_expression "pbVar10 = local_58[0]" (identifier "pbVar10") (= "=") (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]"))) (; ";")) (do_statement "do {\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      } while (bVar15);" (do "do") (compound_statement "{\n        if (lVar7 == 0) break;\n        lVar7 = lVar7 + -1;\n        bVar13 = *pbVar9 < *pbVar10;\n        bVar15 = *pbVar9 == *pbVar10;\n        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;\n        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;\n      }" ({ "{") (if_statement "if (lVar7 == 0) break;" (if "if") (parenthesized_expression "(lVar7 == 0)" (( "(") (binary_expression "lVar7 == 0" (identifier "lVar7") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar7 = lVar7 + -1;" (assignment_expression "lVar7 = lVar7 + -1" (identifier "lVar7") (= "=") (binary_expression "lVar7 + -1" (identifier "lVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar13 = *pbVar9 < *pbVar10;" (assignment_expression "bVar13 = *pbVar9 < *pbVar10" (identifier "bVar13") (= "=") (binary_expression "*pbVar9 < *pbVar10" (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")) (< "<") (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")))) (; ";")) (expression_statement "bVar15 = *pbVar9 == *pbVar10;" (assignment_expression "bVar15 = *pbVar9 == *pbVar10" (identifier "bVar15") (= "=") (binary_expression "*pbVar9 == *pbVar10" (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")) (== "==") (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar9 + (ulong)bVar16 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar10 + (ulong)bVar16 * -2 + 1" (binary_expression "pbVar10 + (ulong)bVar16 * -2" (identifier "pbVar10") (+ "+") (binary_expression "(ulong)bVar16 * -2" (cast_expression "(ulong)bVar16" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar16")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar15)" (( "(") (identifier "bVar15") () ")")) (; ";")) (if_statement "if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;" (if "if") (parenthesized_expression "((!bVar13 && !bVar15) == bVar13)" (( "(") (binary_expression "(!bVar13 && !bVar15) == bVar13" (parenthesized_expression "(!bVar13 && !bVar15)" (( "(") (binary_expression "!bVar13 && !bVar15" (unary_expression "!bVar13" (! "!") (identifier "bVar13")) (&& "&&") (unary_expression "!bVar15" (! "!") (identifier "bVar15"))) () ")")) (== "==") (identifier "bVar13")) () ")")) (goto_statement "goto LAB_003018e2;" (goto "goto") (statement_identifier "LAB_003018e2") (; ";"))) (labeled_statement "LAB_00301901:\n      if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" (statement_identifier "LAB_00301901") (: ":") (if_statement "if (pbVar2 != local_48) {\n        FUN_00338a40(pbVar2);\n      }" (if "if") (parenthesized_expression "(pbVar2 != local_48)" (( "(") (binary_expression "pbVar2 != local_48" (identifier "pbVar2") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n        FUN_00338a40(pbVar2);\n      }" ({ "{") (expression_statement "FUN_00338a40(pbVar2);" (call_expression "FUN_00338a40(pbVar2)" (identifier "FUN_00338a40") (argument_list "(pbVar2)" (( "(") (identifier "pbVar2") () ")"))) (; ";")) (} "}")))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar12 = uVar8 < *(uint *)(param_2 + 7);" (assignment_expression "uVar12 = uVar8 < *(uint *)(param_2 + 7)" (identifier "uVar12") (= "=") (binary_expression "uVar8 < *(uint *)(param_2 + 7)" (identifier "uVar8") (< "<") (pointer_expression "*(uint *)(param_2 + 7)" (* "*") (cast_expression "(uint *)(param_2 + 7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))))) (; ";")) (expression_statement "uVar14 = uVar8 == *(uint *)(param_2 + 7);" (assignment_expression "uVar14 = uVar8 == *(uint *)(param_2 + 7)" (identifier "uVar14") (= "=") (binary_expression "uVar8 == *(uint *)(param_2 + 7)" (identifier "uVar8") (== "==") (pointer_expression "*(uint *)(param_2 + 7)" (* "*") (cast_expression "(uint *)(param_2 + 7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bool)uVar12)" (( "(") (cast_expression "(bool)uVar12" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar12")) () ")")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (while_statement "while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" (while "while") (parenthesized_expression "(uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7))" (( "(") (comma_expression "uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)" (assignment_expression "uVar11 = uVar11 + 1" (identifier "uVar11") (= "=") (binary_expression "uVar11 + 1" (identifier "uVar11") (+ "+") (number_literal "1"))) (, ",") (binary_expression "uVar11 < *(uint *)(param_2 + 7)" (identifier "uVar11") (< "<") (pointer_expression "*(uint *)(param_2 + 7)" (* "*") (cast_expression "(uint *)(param_2 + 7)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))))) () ")")) (compound_statement "{\nLAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);\n    if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;\n  }" ({ "{") (labeled_statement "LAB_003019b7:\n    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" (statement_identifier "LAB_003019b7") (: ":") (expression_statement "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);" (assignment_expression "iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*param_2 + 0xa0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xa0))" (( "(") (pointer_expression "**(code **)(*param_2 + 0xa0)" (* "*") (pointer_expression "*(code **)(*param_2 + 0xa0)" (* "*") (cast_expression "(code **)(*param_2 + 0xa0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0xa0)" (( "(") (binary_expression "*param_2 + 0xa0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0xa0")) () ")"))))) () ")")) (argument_list "(param_2,uVar11)" (( "(") (identifier "param_2") (, ",") (identifier "uVar11") () ")")))) (; ";"))) (if_statement "if (((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;" (if "if") (parenthesized_expression "(((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4))" (( "(") (binary_expression "((iVar3 == 9) || (iVar3 == 4)) &&\n       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" (parenthesized_expression "((iVar3 == 9) || (iVar3 == 4))" (( "(") (binary_expression "(iVar3 == 9) || (iVar3 == 4)" (parenthesized_expression "(iVar3 == 9)" (( "(") (binary_expression "iVar3 == 9" (identifier "iVar3") (== "==") (number_literal "9")) () ")")) (|| "||") (parenthesized_expression "(iVar3 == 4)" (( "(") (binary_expression "iVar3 == 4" (identifier "iVar3") (== "==") (number_literal "4")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)" (( "(") (comma_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4" (assignment_expression "uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_2 + 0xb0))(param_2,uVar11)" (parenthesized_expression "(**(code **)(*param_2 + 0xb0))" (( "(") (pointer_expression "**(code **)(*param_2 + 0xb0)" (* "*") (pointer_expression "*(code **)(*param_2 + 0xb0)" (* "*") (cast_expression "(code **)(*param_2 + 0xb0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0xb0)" (( "(") (binary_expression "*param_2 + 0xb0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0xb0")) () ")"))))) () ")")) (argument_list "(param_2,uVar11)" (( "(") (identifier "param_2") (, ",") (identifier "uVar11") () ")")))) (, ",") (binary_expression "uVar8 == uVar4" (identifier "uVar8") (== "==") (identifier "uVar4"))) () ")"))) () ")")) (goto_statement "goto LAB_003019e1;" (goto "goto") (statement_identifier "LAB_003019e1") (; ";"))) (} "}"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_003019e1:\n  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" (statement_identifier "LAB_003019e1") (: ":") (expression_statement "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);" (assignment_expression "plVar5 = (long *)FUN_00301200(param_2,param_3,param_4)" (identifier "plVar5") (= "=") (cast_expression "(long *)FUN_00301200(param_2,param_3,param_4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00301200(param_2,param_3,param_4)" (identifier "FUN_00301200") (argument_list "(param_2,param_3,param_4)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")"))))) (; ";"))) (expression_statement "lVar7 = *plVar5;" (assignment_expression "lVar7 = *plVar5" (identifier "lVar7") (= "=") (pointer_expression "*plVar5" (* "*") (identifier "plVar5"))) (; ";")) (expression_statement "*(long **)(param_1 + 0x48) = plVar5;" (assignment_expression "*(long **)(param_1 + 0x48) = plVar5" (pointer_expression "*(long **)(param_1 + 0x48)" (* "*") (cast_expression "(long **)(param_1 + 0x48)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "plVar5")) (; ";")) (expression_statement "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);" (call_expression "(**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3)" (parenthesized_expression "(**(code **)(lVar7 + 0x10))" (( "(") (pointer_expression "**(code **)(lVar7 + 0x10)" (* "*") (pointer_expression "*(code **)(lVar7 + 0x10)" (* "*") (cast_expression "(code **)(lVar7 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar7 + 0x10)" (( "(") (binary_expression "lVar7 + 0x10" (identifier "lVar7") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(plVar5,uVar11,iVar3)" (( "(") (identifier "plVar5") (, ",") (identifier "uVar11") (, ",") (identifier "iVar3") () ")"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x50) = iVar3;" (assignment_expression "*(int *)(param_1 + 0x50) = iVar3" (pointer_expression "*(int *)(param_1 + 0x50)" (* "*") (cast_expression "(int *)(param_1 + 0x50)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (identifier "iVar3")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* DWARF original prototype: bool read_section(Dwarf_pubnames_table * this, Relobj * object, uchar *
   symtab, off_t symtab_size) */

bool __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *object,type_3 *symtab,type_4 symtab_size)

{
  type_5 *p_Var1;
  type_5 **pp_Var2;
  char *var_7;
  type_6 sVar4;
  int var_8;
  type_7 var_15;
  type_7 var_16;
  char *__s2;
  type_3 *var_12;
  type_8 *pEVar9;
  long var_3;
  type_7 var_1;
  type_9 uVar12;
  type_10 *var_4;
  type_10 *var_5;
  type_7 var_13;
  char *__s1;
  type_11 uVar16;
  bool var_14;
  type_11 uVar18;
  bool bVar19;
  type_10 bVar20;
  type_6 var_2;
  type_11 var_9 [24];
  
  bVar20 = 0;
  var_7 = "gnu_pubtypes";
  uVar12 = 1;
  var_14 = this->is_pubtypes_ == false;
  if (var_14) {
    var_7 = "gnu_pubnames";
  }
  __s2 = "gnu_pubnames";
  if (!var_14) {
    __s2 = "gnu_pubtypes";
  }
  var_1 = (object->super_Object).shnum_;
  uVar16 = var_1 == 0;
  uVar18 = var_1 == 1;
  if (1 < var_1) {
    do {
      var_1 = (type_7)uVar12;
      (*(object->super_Object)._vptr_Object[0x10])(&var_2,object,uVar12);
      sVar4 = var_2;
      var_3 = 7;
      __s1 = (char *)(var_2 + 7);
      var_4 = (type_10 *)".debug_";
      var_5 = (type_10 *)var_2;
      do {
        if (var_3 == 0) break;
        var_3 = var_3 + -1;
        uVar16 = *var_4 < *var_5;
        uVar18 = *var_4 == *var_5;
        var_4 = var_4 + (type_9)bVar20 * -2 + 1;
        var_5 = var_5 + (type_9)bVar20 * -2 + 1;
      } while ((bool)uVar18);
      var_14 = false;
      bVar19 = (!(bool)uVar16 && !(bool)uVar18) == (bool)uVar16;
      if (bVar19) {
LAB_003018e2:
        var_8 = var_6(__s1,var_7 + 4);
        if (var_8 != 0) {
          var_8 = var_6(__s1,__s2);
          if (var_8 != 0) goto LAB_00301901;
          this->is_gnu_style_ = true;
        }
        if ((type_11 *)sVar4 != var_9) {
          var_10((void *)sVar4);
        }
        if (var_1 == 0) {
          return false;
        }
        var_12 = Object::var_11
                           (&object->super_Object,var_1,&var_2,&this->owns_buffer_,
                            (uint64_t *)0x0);
        this->buffer_ = var_12;
        if (var_12 == (type_3 *)0x0) {
          return false;
        }
        this->buffer_end_ = var_12 + var_2;
        p_Var1 = (object->super_Object)._vptr_Object[6];
        if (p_Var1 != Object::do_is_incremental) {
          var_8 = (*p_Var1)(object);
          if ((char)var_8 != '\0') {
            return (bool)(char)var_8;
          }
        }
        var_13 = (object->super_Object).shnum_;
        var_15 = 0;
        if (var_13 == 0) goto LAB_003019e1;
        var_13 = 0;
        goto LAB_003019b7;
      }
      var_3 = 8;
      __s1 = (char *)(var_2 + 8);
      var_4 = (type_10 *)".zdebug_";
      var_5 = (type_10 *)var_2;
      do {
        if (var_3 == 0) break;
        var_3 = var_3 + -1;
        var_14 = *var_4 < *var_5;
        bVar19 = *var_4 == *var_5;
        var_4 = var_4 + (type_9)bVar20 * -2 + 1;
        var_5 = var_5 + (type_9)bVar20 * -2 + 1;
      } while (bVar19);
      if ((!var_14 && !bVar19) == var_14) goto LAB_003018e2;
LAB_00301901:
      if ((type_11 *)sVar4 != var_9) {
        var_10((void *)sVar4);
      }
      var_1 = var_1 + 1;
      uVar12 = (type_9)var_1;
      var_13 = (object->super_Object).shnum_;
      uVar16 = var_1 < var_13;
      uVar18 = var_1 == var_13;
    } while ((bool)uVar16);
  }
  return false;
  while (var_13 = var_13 + 1, var_13 < (object->super_Object).shnum_) {
LAB_003019b7:
    var_15 = (*(object->super_Object)._vptr_Object[0x14])(object,(type_9)var_13);
    if (((var_15 == 9) || (var_15 == 4)) &&
       (var_16 = (*(object->super_Object)._vptr_Object[0x16])(object,(type_9)var_13), var_1 == var_16)
       ) goto LAB_003019e1;
  }
  var_13 = 0;
LAB_003019e1:
  pEVar9 = var_17(object,symtab,symtab_size);
  pp_Var2 = pEVar9->_vptr_Elf_reloc_mapper;
  this->reloc_mapper_ = pEVar9;
  (*pp_Var2[2])(pEVar9,(type_9)var_13,(type_9)var_15);
  this->reloc_type_ = var_15;
  return true;
}


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

undefined8 MASKED(long param_1,long *param_2,undefined8 param_3,undefined8 param_4)

{
  char *pcVar1;
  byte *pbVar2;
  int iVar3;
  uint uVar4;
  char *__s2;
  long *plVar5;
  undefined8 uVar6;
  long lVar7;
  uint uVar8;
  byte *pbVar9;
  byte *pbVar10;
  uint uVar11;
  byte *__s1;
  undefined1 uVar12;
  bool bVar13;
  undefined1 uVar14;
  bool bVar15;
  byte bVar16;
  byte *local_58 [2];
  byte local_48 [24];
  
  bVar16 = 0;
  pcVar1 = "gnu_pubtypes";
  uVar8 = 1;
  bVar13 = *(char *)(param_1 + 0x30) == '\0';
  if (bVar13) {
    pcVar1 = "gnu_pubnames";
  }
  __s2 = "gnu_pubnames";
  if (!bVar13) {
    __s2 = "gnu_pubtypes";
  }
  uVar11 = *(uint *)(param_2 + 7);
  uVar12 = uVar11 == 0;
  uVar14 = uVar11 == 1;
  if (1 < uVar11) {
    do {
      (**(code **)(*param_2 + 0x80))(local_58,param_2,uVar8);
      pbVar2 = local_58[0];
      lVar7 = 7;
      __s1 = local_58[0] + 7;
      pbVar9 = (byte *)".debug_";
      pbVar10 = local_58[0];
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        uVar12 = *pbVar9 < *pbVar10;
        uVar14 = *pbVar9 == *pbVar10;
        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;
        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;
      } while ((bool)uVar14);
      bVar13 = false;
      bVar15 = (!(bool)uVar12 && !(bool)uVar14) == (bool)uVar12;
      if (bVar15) {
LAB_003018e2:
        iVar3 = strcmp((char *)__s1,pcVar1 + 4);
        if (iVar3 != 0) {
          iVar3 = strcmp((char *)__s1,__s2);
          if (iVar3 != 0) goto LAB_00301901;
          *(undefined1 *)(param_1 + 0x31) = 1;
        }
        if (pbVar2 != local_48) {
          FUN_00338a40(pbVar2);
        }
        if (uVar8 == 0) {
          return 0;
        }
        lVar7 = FUN_0022a660(param_2,uVar8,local_58,param_1 + 0x18,0);
        *(long *)(param_1 + 8) = lVar7;
        if (lVar7 == 0) {
          return 0;
        }
        *(byte **)(param_1 + 0x10) = local_58[0] + lVar7;
        if ((*(code **)(*param_2 + 0x30) != FUN_001b8c90) &&
           (uVar6 = (**(code **)(*param_2 + 0x30))(param_2), (char)uVar6 != '\0')) {
          return uVar6;
        }
        uVar11 = *(uint *)(param_2 + 7);
        iVar3 = 0;
        if (uVar11 == 0) goto LAB_003019e1;
        uVar11 = 0;
        goto LAB_003019b7;
      }
      lVar7 = 8;
      __s1 = local_58[0] + 8;
      pbVar9 = (byte *)".zdebug_";
      pbVar10 = local_58[0];
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        bVar13 = *pbVar9 < *pbVar10;
        bVar15 = *pbVar9 == *pbVar10;
        pbVar9 = pbVar9 + (ulong)bVar16 * -2 + 1;
        pbVar10 = pbVar10 + (ulong)bVar16 * -2 + 1;
      } while (bVar15);
      if ((!bVar13 && !bVar15) == bVar13) goto LAB_003018e2;
LAB_00301901:
      if (pbVar2 != local_48) {
        FUN_00338a40(pbVar2);
      }
      uVar8 = uVar8 + 1;
      uVar12 = uVar8 < *(uint *)(param_2 + 7);
      uVar14 = uVar8 == *(uint *)(param_2 + 7);
    } while ((bool)uVar12);
  }
  return 0;
  while (uVar11 = uVar11 + 1, uVar11 < *(uint *)(param_2 + 7)) {
LAB_003019b7:
    iVar3 = (**(code **)(*param_2 + 0xa0))(param_2,uVar11);
    if (((iVar3 == 9) || (iVar3 == 4)) &&
       (uVar4 = (**(code **)(*param_2 + 0xb0))(param_2,uVar11), uVar8 == uVar4)) goto LAB_003019e1;
  }
  uVar11 = 0;
LAB_003019e1:
  plVar5 = (long *)FUN_00301200(param_2,param_3,param_4);
  lVar7 = *plVar5;
  *(long **)(param_1 + 0x48) = plVar5;
  (**(code **)(lVar7 + 0x10))(plVar5,uVar11,iVar3);
  *(int *)(param_1 + 0x50) = iVar3;
  return 1;
}

