
/* DWARF original name: build_compressed_section_map<64, false> */

Compressed_section_map *
gold::build_compressed_section_map<64,_false>
          (uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,
          bool decompress_if_needed)

{
  _Base_ptr *pp_Var1;
  size_t *psVar2;
  _Base_ptr p_Var3;
  _Base_ptr p_Var4;
  int iVar5;
  _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>
  *this;
  _Rb_tree_header *p_Var6;
  undefined4 extraout_var;
  _Rb_tree_node_base *p_Var7;
  const_iterator __position;
  uchar *uncompressed_data;
  _Base_ptr uncompressed_size;
  _Rb_tree_node_base *p_Var8;
  uint *puVar9;
  _Rb_tree_color _Var10;
  _Base_ptr p_Var11;
  ulong uVar12;
  char *pcVar13;
  bool bVar14;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar15;
  _Base_ptr local_68;
  section_size_type len;
  uchar *compressed_data;
  
  puVar9 = (uint *)(pshdrs + 0x40);
  this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>
          *)operator_new(0x30);
  (this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red;
  p_Var6 = &(this->_M_impl).super__Rb_tree_header;
  (this->_M_impl).super__Rb_tree_header._M_header._M_parent = (_Base_ptr)0x0;
  (this->_M_impl).super__Rb_tree_header._M_header._M_left = &p_Var6->_M_header;
  (this->_M_impl).super__Rb_tree_header._M_header._M_right = &p_Var6->_M_header;
  (this->_M_impl).super__Rb_tree_header._M_node_count = 0;
  if (shnum < 2) {
    return (Compressed_section_map *)this;
  }
  _Var10 = _S_black;
  do {
    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {
LAB_0024d3e0:
      _Var10 = _Var10 + _S_black;
      puVar9 = puVar9 + 0x10;
      if (_Var10 == shnum) {
        return (Compressed_section_map *)this;
      }
    }
    uVar12 = (ulong)*puVar9;
    if (names_size <= uVar12) {
      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");
      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);
      goto LAB_0024d3e0;
    }
    pcVar13 = names + uVar12;
    bVar14 = false;
    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&
       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;
    iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);
    compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);
    if (bVar14 == false) {
      pcVar13 = pcVar13 + 6;
      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);
      local_68 = *(_Base_ptr *)(compressed_data + 0x10);
    }
    else {
      pcVar13 = pcVar13 + 7;
      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);
      local_68 = *(_Base_ptr *)(puVar9 + 0xc);
    }
    if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;
    p_Var3 = *(_Base_ptr *)(puVar9 + 2);
    if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {
      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);
      bVar14 = decompress_input_section
                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,
                          *(Elf_Xword *)(puVar9 + 2));
      if (!bVar14) {
        operator_delete__(uncompressed_data);
        goto LAB_0024d467;
      }
    }
    else {
LAB_0024d467:
      uncompressed_data = (uchar *)0x0;
    }
    p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;
    p_Var11 = &p_Var6->_M_header;
    __position._M_node = &p_Var6->_M_header;
    if (p_Var4 == (_Base_ptr)0x0) {
LAB_0024d4ab:
      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);
      p_Var7[1]._M_color = _Var10;
      p_Var7[1]._M_parent = (_Base_ptr)0x0;
      p_Var7[1]._M_left = (_Base_ptr)0x0;
      p_Var7[1]._M_right = (_Base_ptr)0x0;
      *(undefined8 *)(p_Var7 + 2) = 0;
      pVar15 = std::
               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>
               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);
      p_Var8 = pVar15.second;
      __position._M_node = pVar15.first;
      if (p_Var8 == (_Rb_tree_node_base *)0x0) {
        operator_delete(p_Var7);
      }
      else {
        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {
          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;
        }
        else {
          bVar14 = true;
        }
        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);
        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;
        *psVar2 = *psVar2 + 1;
        __position._M_node = p_Var7;
      }
    }
    else {
      do {
        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {
          p_Var4 = (__position._M_node)->_M_left;
          p_Var11 = __position._M_node;
          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;
        }
        pp_Var1 = &(__position._M_node)->_M_right;
        p_Var4 = *pp_Var1;
        __position._M_node = p_Var11;
      } while (*pp_Var1 != (_Base_ptr)0x0);
LAB_0024d49a:
      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||
         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;
    }
    _Var10 = _Var10 + _S_black;
    __position._M_node[1]._M_parent = uncompressed_size;
    puVar9 = puVar9 + 0x10;
    *(uchar **)(__position._M_node + 2) = uncompressed_data;
    __position._M_node[1]._M_left = p_Var3;
    __position._M_node[1]._M_right = local_68;
    if (_Var10 == shnum) {
      return (Compressed_section_map *)this;
    }
  } while( true );
}



long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)

{
  long *plVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  long lVar8;
  uint *puVar9;
  uint uVar10;
  long lVar11;
  ulong uVar12;
  long lVar13;
  bool bVar14;
  undefined1 auVar15 [16];
  undefined8 local_68;
  undefined8 local_40 [2];
  
  puVar9 = (uint *)(param_1 + 0x40);
  lVar3 = FUN_00337280(0x30);
  *(undefined4 *)(lVar3 + 8) = 0;
  lVar4 = lVar3 + 8;
  *(undefined8 *)(lVar3 + 0x10) = 0;
  *(long *)(lVar3 + 0x18) = lVar4;
  *(long *)(lVar3 + 0x20) = lVar4;
  *(undefined8 *)(lVar3 + 0x28) = 0;
  if (param_2 < 2) {
    return lVar3;
  }
  uVar10 = 1;
  do {
    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {
LAB_0024d3e0:
      uVar10 = uVar10 + 1;
      puVar9 = puVar9 + 0x10;
      if (uVar10 == param_2) {
        return lVar3;
      }
    }
    uVar12 = (ulong)*puVar9;
    if (param_4 <= uVar12) {
      uVar6 = gettext("bad section name offset for section %u: %lu");
      FUN_00229f40(param_5,uVar6,uVar10,uVar12);
      goto LAB_0024d3e0;
    }
    lVar13 = uVar12 + param_3;
    cVar2 = '\0';
    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))
    goto LAB_0024d3e0;
    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);
    if (cVar2 == '\0') {
      lVar13 = lVar13 + 6;
      lVar8 = *(long *)(lVar5 + 8);
      local_68 = *(undefined8 *)(lVar5 + 0x10);
    }
    else {
      lVar13 = lVar13 + 7;
      lVar8 = FUN_002fedb0(lVar5,local_40[0]);
      local_68 = *(undefined8 *)(puVar9 + 0xc);
    }
    if (lVar8 == -1) goto LAB_0024d3e0;
    uVar6 = *(undefined8 *)(puVar9 + 2);
    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {
LAB_0024d467:
      uVar7 = 0;
    }
    else {
      uVar7 = thunk_FUN_00337280(lVar8);
      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));
      if (cVar2 == '\0') {
        thunk_FUN_00338a50(uVar7);
        goto LAB_0024d467;
      }
    }
    lVar13 = *(long *)(lVar3 + 0x10);
    lVar11 = lVar4;
    lVar5 = lVar4;
    if (*(long *)(lVar3 + 0x10) == 0) {
LAB_0024d4ab:
      lVar13 = FUN_00337280(0x48);
      *(uint *)(lVar13 + 0x20) = uVar10;
      *(undefined8 *)(lVar13 + 0x28) = 0;
      *(undefined8 *)(lVar13 + 0x30) = 0;
      *(undefined8 *)(lVar13 + 0x38) = 0;
      *(undefined8 *)(lVar13 + 0x40) = 0;
      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);
      lVar11 = auVar15._8_8_;
      lVar5 = auVar15._0_8_;
      if (lVar11 == 0) {
        FUN_00338a50(lVar13);
      }
      else {
        if ((lVar5 == 0) && (lVar4 != lVar11)) {
          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);
        }
        else {
          bVar14 = true;
        }
        FUN_00339f50(bVar14,lVar13);
        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;
        lVar5 = lVar13;
      }
    }
    else {
      do {
        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {
          lVar13 = *(long *)(lVar5 + 0x10);
          lVar11 = lVar5;
          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;
        }
        plVar1 = (long *)(lVar5 + 0x18);
        lVar13 = *plVar1;
        lVar5 = lVar11;
      } while (*plVar1 != 0);
LAB_0024d49a:
      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;
    }
    uVar10 = uVar10 + 1;
    *(long *)(lVar5 + 0x28) = lVar8;
    puVar9 = puVar9 + 0x10;
    *(undefined8 *)(lVar5 + 0x40) = uVar7;
    *(undefined8 *)(lVar5 + 0x30) = uVar6;
    *(undefined8 *)(lVar5 + 0x38) = local_68;
    if (uVar10 == param_2) {
      return lVar3;
    }
  } while( true );
}


PUSH R15
MOV R15D,ESI
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDI
MOV EDI,0x30
ADD RBX,0x40
SUB RSP,0x68
MOV qword ptr [RSP + 0x8],RDX
MOV qword ptr [RSP],RCX
MOV qword ptr [RSP + 0x18],R8
MOV byte ptr [RSP + 0x2f],R9B
CALL 0x00337280
MOV dword ptr [RAX + 0x8],0x0
MOV R12,RAX
ADD RAX,0x8
MOV qword ptr [RAX + 0x8],0x0
MOV qword ptr [RSP + 0x10],RAX
MOV qword ptr [R12 + 0x18],RAX
MOV qword ptr [R12 + 0x20],RAX
LEA RAX,[RSP + 0x58]
MOV qword ptr [R12 + 0x28],0x0
MOV qword ptr [RSP + 0x20],RAX
CMP R15D,0x1
JBE 0x0024d55d
MOV EBP,0x1
JMP 0x0024d3f0
ADD EBP,0x1
ADD RBX,0x40
CMP EBP,R15D
JZ 0x0024d55d
CMP dword ptr [RBX + 0x4],0x1
JNZ 0x0024d3e0
MOV RAX,qword ptr [RBX + 0x8]
TEST AL,0x2
JNZ 0x0024d3e0
MOV R13D,dword ptr [RBX]
CMP R13,qword ptr [RSP]
JNC 0x0024d590
ADD R13,qword ptr [RSP + 0x8]
XOR R14D,R14D
TEST AH,0x8
JZ 0x0024d570
MOV RDI,qword ptr [RSP + 0x18]
XOR ECX,ECX
MOV RDX,qword ptr [RSP + 0x20]
MOV ESI,EBP
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x70]
MOV R11,RAX
TEST R14B,R14B
JNZ 0x0024d620
LEA R14,[R13 + 0x6]
MOV R13,qword ptr [RAX + 0x8]
MOV RAX,qword ptr [RAX + 0x10]
MOV qword ptr [RSP + 0x30],RAX
CMP R13,-0x1
JZ 0x0024d3e0
MOV RAX,qword ptr [RBX + 0x8]
CMP byte ptr [RSP + 0x2f],0x0
MOV qword ptr [RSP + 0x38],RAX
JNZ 0x0024d5b8
XOR R14D,R14D
MOV RAX,qword ptr [R12 + 0x10]
MOV R8,qword ptr [RSP + 0x10]
TEST RAX,RAX
JNZ 0x0024d48c
JMP 0x0024d4ab
MOV R8,RAX
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0024d49a
CMP dword ptr [RAX + 0x20],EBP
JNC 0x0024d480
MOV RAX,qword ptr [RAX + 0x18]
TEST RAX,RAX
JNZ 0x0024d48c
CMP qword ptr [RSP + 0x10],R8
JZ 0x0024d4ab
CMP dword ptr [R8 + 0x20],EBP
JBE 0x0024d533
MOV EDI,0x48
MOV qword ptr [RSP + 0x48],R8
CALL 0x00337280
MOV RSI,qword ptr [RSP + 0x48]
MOV RDI,R12
MOV dword ptr [RAX + 0x20],EBP
LEA RDX,[RAX + 0x20]
MOV qword ptr [RAX + 0x28],0x0
MOV qword ptr [RAX + 0x30],0x0
MOV qword ptr [RAX + 0x38],0x0
MOV qword ptr [RAX + 0x40],0x0
MOV qword ptr [RSP + 0x40],RAX
CALL 0x0024ce40
MOV R8,qword ptr [RSP + 0x40]
TEST RDX,RDX
JZ 0x0024d64c
TEST RAX,RAX
JNZ 0x0024d511
CMP qword ptr [RSP + 0x10],RDX
JNZ 0x0024d666
MOV EDI,0x1
MOV RCX,qword ptr [RSP + 0x10]
MOV RSI,R8
MOV qword ptr [RSP + 0x40],R8
CALL 0x00339f50
ADD qword ptr [R12 + 0x28],0x1
MOV R8,qword ptr [RSP + 0x40]
MOV RAX,qword ptr [RSP + 0x38]
ADD EBP,0x1
MOV qword ptr [R8 + 0x28],R13
ADD RBX,0x40
MOV qword ptr [R8 + 0x40],R14
MOV qword ptr [R8 + 0x30],RAX
MOV RAX,qword ptr [RSP + 0x30]
MOV qword ptr [R8 + 0x38],RAX
CMP EBP,R15D
JNZ 0x0024d3f0
ADD RSP,0x68
MOV RAX,R12
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,R13
CALL 0x00212270
MOV R14D,EAX
TEST AL,AL
JZ 0x0024d3e0
JMP 0x0024d41c
LEA RDI,[0x3e0868]
CALL 0x00150320
MOV RDI,qword ptr [RSP + 0x18]
MOV RCX,R13
MOV EDX,EBP
MOV RSI,RAX
XOR EAX,EAX
CALL 0x00229f40
JMP 0x0024d3e0
MOV RDI,R14
MOV qword ptr [RSP + 0x40],R11
CALL 0x00229b60
TEST AL,AL
JZ 0x0024d467
MOV RDI,R13
CALL 0x00337220
SUB RSP,0x8
PUSH qword ptr [RBX + 0x8]
MOV RCX,R13
MOV R11,qword ptr [RSP + 0x50]
MOV RDX,RAX
XOR R9D,R9D
MOV R14,RAX
MOV RSI,qword ptr [RSP + 0x68]
MOV R8D,0x40
MOV RDI,R11
CALL 0x002fedf0
POP RDX
POP RCX
TEST AL,AL
JNZ 0x0024d46a
MOV RDI,R14
CALL 0x00338a20
JMP 0x0024d467
MOV RSI,qword ptr [RSP + 0x58]
MOV RDI,RAX
MOV qword ptr [RSP + 0x38],RAX
LEA R14,[R13 + 0x7]
CALL 0x002fedb0
MOV R11,qword ptr [RSP + 0x38]
MOV R13,RAX
MOV RAX,qword ptr [RBX + 0x30]
MOV qword ptr [RSP + 0x30],RAX
JMP 0x0024d44d
MOV RDI,R8
MOV qword ptr [RSP + 0x40],RAX
CALL 0x00338a50
MOV RAX,qword ptr [RSP + 0x40]
MOV R8,RAX
JMP 0x0024d533
XOR EDI,EDI
MOV EAX,dword ptr [RDX + 0x20]
CMP dword ptr [R8 + 0x20],EAX
SETC DIL
JMP 0x0024d516
(translation_unit "long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}\n\n" (function_definition "long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" identifier (parameter_list "(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "char param_6" primitive_type identifier) ))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "undefined1 auVar15 [16];" type_identifier (array_declarator "auVar15 [16]" identifier [ number_literal ]) ;) (declaration "undefined8 local_68;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "puVar9 = (uint *)(param_1 + 0x40);" (assignment_expression "puVar9 = (uint *)(param_1 + 0x40)" identifier = (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) ;) (expression_statement "lVar3 = FUN_00337280(0x30);" (assignment_expression "lVar3 = FUN_00337280(0x30)" identifier = (call_expression "FUN_00337280(0x30)" identifier (argument_list "(0x30)" ( number_literal )))) ;) (expression_statement "*(undefined4 *)(lVar3 + 8) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + 8) = 0" (pointer_expression "*(undefined4 *)(lVar3 + 8)" * (cast_expression "(undefined4 *)(lVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "lVar4 = lVar3 + 8;" (assignment_expression "lVar4 = lVar3 + 8" identifier = (binary_expression "lVar3 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(lVar3 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x10) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x10)" * (cast_expression "(undefined8 *)(lVar3 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(long *)(lVar3 + 0x18) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x18) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x18)" * (cast_expression "(long *)(lVar3 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(lVar3 + 0x20) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x20) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar3 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x28)" * (cast_expression "(undefined8 *)(lVar3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (param_2 < 2) {\n    return lVar3;\n  }" if (parenthesized_expression "(param_2 < 2)" ( (binary_expression "param_2 < 2" identifier < number_literal) )) (compound_statement "{\n    return lVar3;\n  }" { (return_statement "return lVar3;" return identifier ;) })) (expression_statement "uVar10 = 1;" (assignment_expression "uVar10 = 1" identifier = number_literal) ;) (do_statement "do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );" do (compound_statement "{\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  }" { (while_statement "while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" while (parenthesized_expression "((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)))" ( (parenthesized_expression "(puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))" ( (binary_expression "puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)" (binary_expression "puVar9[1] != 1" (subscript_expression "puVar9[1]" identifier [ number_literal ]) != number_literal) || (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 2) != 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 2) != 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 2)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 2" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) )) (compound_statement "{\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" { (labeled_statement "LAB_0024d3e0:\n      uVar10 = uVar10 + 1;" statement_identifier : (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;)) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (if_statement "if (uVar10 == param_2) {\n        return lVar3;\n      }" if (parenthesized_expression "(uVar10 == param_2)" ( (binary_expression "uVar10 == param_2" identifier == identifier) )) (compound_statement "{\n        return lVar3;\n      }" { (return_statement "return lVar3;" return identifier ;) })) })) (expression_statement "uVar12 = (ulong)*puVar9;" (assignment_expression "uVar12 = (ulong)*puVar9" identifier = (binary_expression "(ulong)*puVar9" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) ;) (if_statement "if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" if (parenthesized_expression "(param_4 <= uVar12)" ( (binary_expression "param_4 <= uVar12" identifier <= identifier) )) (compound_statement "{\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" { (expression_statement "uVar6 = gettext("bad section name offset for section %u: %lu");" (assignment_expression "uVar6 = gettext("bad section name offset for section %u: %lu")" identifier = (call_expression "gettext("bad section name offset for section %u: %lu")" identifier (argument_list "("bad section name offset for section %u: %lu")" ( (string_literal ""bad section name offset for section %u: %lu"" " string_content ") )))) ;) (expression_statement "FUN_00229f40(param_5,uVar6,uVar10,uVar12);" (call_expression "FUN_00229f40(param_5,uVar6,uVar10,uVar12)" identifier (argument_list "(param_5,uVar6,uVar10,uVar12)" ( identifier , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;) })) (expression_statement "lVar13 = uVar12 + param_3;" (assignment_expression "lVar13 = uVar12 + param_3" identifier = (binary_expression "uVar12 + param_3" identifier + identifier)) ;) (expression_statement "cVar2 = '\0';" (assignment_expression "cVar2 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;" if (parenthesized_expression "(((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))" ( (binary_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 0x800) == 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 0x800)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 0x800" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00212270(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00212270(lVar13)" identifier = (call_expression "FUN_00212270(lVar13)" identifier (argument_list "(lVar13)" ( identifier )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);" (assignment_expression "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" identifier = (call_expression "(**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" (parenthesized_expression "(**(code **)(*param_5 + 0x70))" ( (pointer_expression "**(code **)(*param_5 + 0x70)" * (pointer_expression "*(code **)(*param_5 + 0x70)" * (cast_expression "(code **)(*param_5 + 0x70)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0x70)" ( (binary_expression "*param_5 + 0x70" (pointer_expression "*param_5" * identifier) + number_literal) ))))) )) (argument_list "(param_5,uVar10,local_40,0)" ( identifier , identifier , identifier , number_literal )))) ;) (if_statement "if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }" { (expression_statement "lVar13 = lVar13 + 6;" (assignment_expression "lVar13 = lVar13 + 6" identifier = (binary_expression "lVar13 + 6" identifier + number_literal)) ;) (expression_statement "lVar8 = *(long *)(lVar5 + 8);" (assignment_expression "lVar8 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "local_68 = *(undefined8 *)(lVar5 + 0x10);" (assignment_expression "local_68 = *(undefined8 *)(lVar5 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar5 + 0x10)" * (cast_expression "(undefined8 *)(lVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" else (compound_statement "{\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" { (expression_statement "lVar13 = lVar13 + 7;" (assignment_expression "lVar13 = lVar13 + 7" identifier = (binary_expression "lVar13 + 7" identifier + number_literal)) ;) (expression_statement "lVar8 = FUN_002fedb0(lVar5,local_40[0]);" (assignment_expression "lVar8 = FUN_002fedb0(lVar5,local_40[0])" identifier = (call_expression "FUN_002fedb0(lVar5,local_40[0])" identifier (argument_list "(lVar5,local_40[0])" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) )))) ;) (expression_statement "local_68 = *(undefined8 *)(puVar9 + 0xc);" (assignment_expression "local_68 = *(undefined8 *)(puVar9 + 0xc)" identifier = (pointer_expression "*(undefined8 *)(puVar9 + 0xc)" * (cast_expression "(undefined8 *)(puVar9 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 0xc)" ( (binary_expression "puVar9 + 0xc" identifier + number_literal) ))))) ;) }))) (if_statement "if (lVar8 == -1) goto LAB_0024d3e0;" if (parenthesized_expression "(lVar8 == -1)" ( (binary_expression "lVar8 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "uVar6 = *(undefined8 *)(puVar9 + 2);" (assignment_expression "uVar6 = *(undefined8 *)(puVar9 + 2)" identifier = (pointer_expression "*(undefined8 *)(puVar9 + 2)" * (cast_expression "(undefined8 *)(puVar9 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) ))))) ;) (if_statement "if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" if (parenthesized_expression "((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'))" ( (binary_expression "(param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" (parenthesized_expression "(param_6 == '\0')" ( (binary_expression "param_6 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00229b60(lVar13)" identifier = (call_expression "FUN_00229b60(lVar13)" identifier (argument_list "(lVar13)" ( identifier )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\nLAB_0024d467:\n      uVar7 = 0;\n    }" { (labeled_statement "LAB_0024d467:\n      uVar7 = 0;" statement_identifier : (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" else (compound_statement "{\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" { (expression_statement "uVar7 = thunk_FUN_00337280(lVar8);" (assignment_expression "uVar7 = thunk_FUN_00337280(lVar8)" identifier = (call_expression "thunk_FUN_00337280(lVar8)" identifier (argument_list "(lVar8)" ( identifier )))) ;) (expression_statement "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));" (assignment_expression "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" identifier = (call_expression "FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" identifier (argument_list "(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , identifier , identifier , number_literal , number_literal , (pointer_expression "*(undefined8 *)(puVar9 + 2)" * (cast_expression "(undefined8 *)(puVar9 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" { (expression_statement "thunk_FUN_00338a50(uVar7);" (call_expression "thunk_FUN_00338a50(uVar7)" identifier (argument_list "(uVar7)" ( identifier ))) ;) (goto_statement "goto LAB_0024d467;" goto statement_identifier ;) })) }))) (expression_statement "lVar13 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar3 + 0x10)" identifier = (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar11 = lVar4;" (assignment_expression "lVar11 = lVar4" identifier = identifier) ;) (expression_statement "lVar5 = lVar4;" (assignment_expression "lVar5 = lVar4" identifier = identifier) ;) (if_statement "if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" if (parenthesized_expression "(*(long *)(lVar3 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar3 + 0x10) == 0" (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }" { (labeled_statement "LAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);" statement_identifier : (expression_statement "lVar13 = FUN_00337280(0x48);" (assignment_expression "lVar13 = FUN_00337280(0x48)" identifier = (call_expression "FUN_00337280(0x48)" identifier (argument_list "(0x48)" ( number_literal )))) ;)) (expression_statement "*(uint *)(lVar13 + 0x20) = uVar10;" (assignment_expression "*(uint *)(lVar13 + 0x20) = uVar10" (pointer_expression "*(uint *)(lVar13 + 0x20)" * (cast_expression "(uint *)(lVar13 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x20)" ( (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x28)" * (cast_expression "(undefined8 *)(lVar13 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x28)" ( (binary_expression "lVar13 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x30)" * (cast_expression "(undefined8 *)(lVar13 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x30)" ( (binary_expression "lVar13 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x38) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x38)" * (cast_expression "(undefined8 *)(lVar13 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x38)" ( (binary_expression "lVar13 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x40) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x40)" * (cast_expression "(undefined8 *)(lVar13 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x40)" ( (binary_expression "lVar13 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);" (assignment_expression "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" identifier = (call_expression "FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" identifier (argument_list "(lVar3,lVar5,lVar13 + 0x20)" ( identifier , identifier , (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) ;) (expression_statement "lVar11 = auVar15._8_8_;" (assignment_expression "lVar11 = auVar15._8_8_" identifier = (field_expression "auVar15._8_8_" identifier . field_identifier)) ;) (expression_statement "lVar5 = auVar15._0_8_;" (assignment_expression "lVar5 = auVar15._0_8_" identifier = (field_expression "auVar15._0_8_" identifier . field_identifier)) ;) (if_statement "if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" if (parenthesized_expression "(lVar11 == 0)" ( (binary_expression "lVar11 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00338a50(lVar13);\n      }" { (expression_statement "FUN_00338a50(lVar13);" (call_expression "FUN_00338a50(lVar13)" identifier (argument_list "(lVar13)" ( identifier ))) ;) }) (else_clause "else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" else (compound_statement "{\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" { (if_statement "if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }" if (parenthesized_expression "((lVar5 == 0) && (lVar4 != lVar11))" ( (binary_expression "(lVar5 == 0) && (lVar4 != lVar11)" (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) && (parenthesized_expression "(lVar4 != lVar11)" ( (binary_expression "lVar4 != lVar11" identifier != identifier) ))) )) (compound_statement "{\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }" { (expression_statement "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);" (assignment_expression "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" identifier = (binary_expression "*(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" (pointer_expression "*(uint *)(lVar13 + 0x20)" * (cast_expression "(uint *)(lVar13 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x20)" ( (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) < (pointer_expression "*(uint *)(lVar11 + 0x20)" * (cast_expression "(uint *)(lVar11 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x20)" ( (binary_expression "lVar11 + 0x20" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          bVar14 = true;\n        }" else (compound_statement "{\n          bVar14 = true;\n        }" { (expression_statement "bVar14 = true;" (assignment_expression "bVar14 = true" identifier = true) ;) }))) (expression_statement "FUN_00339f50(bVar14,lVar13);" (call_expression "FUN_00339f50(bVar14,lVar13)" identifier (argument_list "(bVar14,lVar13)" ( identifier , identifier ))) ;) (expression_statement "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;" (assignment_expression "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" * (cast_expression "(long *)(lVar3 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = (binary_expression "*(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" * (cast_expression "(long *)(lVar3 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "lVar5 = lVar13;" (assignment_expression "lVar5 = lVar13" identifier = identifier) ;) }))) }) (else_clause "else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" else (compound_statement "{\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" { (do_statement "do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);" do (compound_statement "{\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      }" { (while_statement "while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" while (parenthesized_expression "(lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20))" ( (comma_expression "lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)" (assignment_expression "lVar5 = lVar13" identifier = identifier) , (binary_expression "uVar10 <= *(uint *)(lVar5 + 0x20)" identifier <= (pointer_expression "*(uint *)(lVar5 + 0x20)" * (cast_expression "(uint *)(lVar5 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))))) )) (compound_statement "{\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" { (expression_statement "lVar13 = *(long *)(lVar5 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar5 + 0x10)" identifier = (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar11 = lVar5;" (assignment_expression "lVar11 = lVar5" identifier = identifier) ;) (if_statement "if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;" if (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) == number_literal) )) (goto_statement "goto LAB_0024d49a;" goto statement_identifier ;)) })) (expression_statement "plVar1 = (long *)(lVar5 + 0x18);" (assignment_expression "plVar1 = (long *)(lVar5 + 0x18)" identifier = (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) ;) (expression_statement "lVar13 = *plVar1;" (assignment_expression "lVar13 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (expression_statement "lVar5 = lVar11;" (assignment_expression "lVar5 = lVar11" identifier = identifier) ;) }) while (parenthesized_expression "(*plVar1 != 0)" ( (binary_expression "*plVar1 != 0" (pointer_expression "*plVar1" * identifier) != number_literal) )) ;) (labeled_statement "LAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" statement_identifier : (if_statement "if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" if (parenthesized_expression "((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20)))" ( (binary_expression "(lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))" (parenthesized_expression "(lVar4 == lVar5)" ( (binary_expression "lVar4 == lVar5" identifier == identifier) )) || (parenthesized_expression "(uVar10 < *(uint *)(lVar5 + 0x20))" ( (binary_expression "uVar10 < *(uint *)(lVar5 + 0x20)" identifier < (pointer_expression "*(uint *)(lVar5 + 0x20)" * (cast_expression "(uint *)(lVar5 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) ))))) ))) )) (goto_statement "goto LAB_0024d4ab;" goto statement_identifier ;))) }))) (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (expression_statement "*(long *)(lVar5 + 0x28) = lVar8;" (assignment_expression "*(long *)(lVar5 + 0x28) = lVar8" (pointer_expression "*(long *)(lVar5 + 0x28)" * (cast_expression "(long *)(lVar5 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x28)" ( (binary_expression "lVar5 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(lVar5 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(lVar5 + 0x40)" * (cast_expression "(undefined8 *)(lVar5 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x40)" ( (binary_expression "lVar5 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(lVar5 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(lVar5 + 0x30)" * (cast_expression "(undefined8 *)(lVar5 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x30)" ( (binary_expression "lVar5 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x38) = local_68;" (assignment_expression "*(undefined8 *)(lVar5 + 0x38) = local_68" (pointer_expression "*(undefined8 *)(lVar5 + 0x38)" * (cast_expression "(undefined8 *)(lVar5 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x38)" ( (binary_expression "lVar5 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar10 == param_2) {\n      return lVar3;\n    }" if (parenthesized_expression "(uVar10 == param_2)" ( (binary_expression "uVar10 == param_2" identifier == identifier) )) (compound_statement "{\n      return lVar3;\n    }" { (return_statement "return lVar3;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* DWARF original name: build_compressed_section_map<64, false> */\n\nCompressed_section_map *\ngold::build_compressed_section_map<64,_false>\n          (uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed)\n\n{\n  _Base_ptr *pp_Var1;\n  size_t *psVar2;\n  _Base_ptr p_Var3;\n  _Base_ptr p_Var4;\n  int iVar5;\n  _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n  *this;\n  _Rb_tree_header *p_Var6;\n  undefined4 extraout_var;\n  _Rb_tree_node_base *p_Var7;\n  const_iterator __position;\n  uchar *uncompressed_data;\n  _Base_ptr uncompressed_size;\n  _Rb_tree_node_base *p_Var8;\n  uint *puVar9;\n  _Rb_tree_color _Var10;\n  _Base_ptr p_Var11;\n  ulong uVar12;\n  char *pcVar13;\n  bool bVar14;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar15;\n  _Base_ptr local_68;\n  section_size_type len;\n  uchar *compressed_data;\n  \n  puVar9 = (uint *)(pshdrs + 0x40);\n  this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n          *)operator_new(0x30);\n  (this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red;\n  p_Var6 = &(this->_M_impl).super__Rb_tree_header;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_parent = (_Base_ptr)0x0;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_left = &p_Var6->_M_header;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_right = &p_Var6->_M_header;\n  (this->_M_impl).super__Rb_tree_header._M_node_count = 0;\n  if (shnum < 2) {\n    return (Compressed_section_map *)this;\n  }\n  _Var10 = _S_black;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (names_size <= uVar12) {\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    pcVar13 = names + uVar12;\n    bVar14 = false;\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;\n    iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);\n    compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);\n    if (bVar14 == false) {\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }\n    else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }\n    if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;\n    p_Var3 = *(_Base_ptr *)(puVar9 + 2);\n    if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }\n    else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }\n    p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n    p_Var11 = &p_Var6->_M_header;\n    __position._M_node = &p_Var6->_M_header;\n    if (p_Var4 == (_Base_ptr)0x0) {\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }\n    else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }\n    _Var10 = _Var10 + _S_black;\n    __position._M_node[1]._M_parent = uncompressed_size;\n    puVar9 = puVar9 + 0x10;\n    *(uchar **)(__position._M_node + 2) = uncompressed_data;\n    __position._M_node[1]._M_left = p_Var3;\n    __position._M_node[1]._M_right = local_68;\n    if (_Var10 == shnum) {\n      return (Compressed_section_map *)this;\n    }\n  } while( true );\n}\n\n" comment (ERROR "Compressed_section_map *\ngold::build_compressed_section_map<64,_false>\n          (uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed)" (binary_expression "Compressed_section_map *\ngold::build_compressed_section_map<64,_false>\n          (uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed)" (binary_expression "Compressed_section_map *\ngold::build_compressed_section_map<64" (binary_expression "Compressed_section_map *\ngold" identifier * identifier) (ERROR "::build_compressed_section_map" : : identifier) < number_literal) (ERROR ",_false" , identifier) > (parenthesized_expression "(uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed)" ( (comma_expression "uchar *pshdrs,uint shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed" (binary_expression "uchar *pshdrs" identifier * identifier) , (ERROR "uint" identifier) (comma_expression "shnum,char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed" identifier , (comma_expression "char *names,section_size_type names_size,Object *obj,\n          bool decompress_if_needed" (binary_expression "char *names" identifier * identifier) , (comma_expression "section_size_type names_size,Object *obj,\n          bool decompress_if_needed" identifier (ERROR "names_size" identifier) , (comma_expression "Object *obj,\n          bool decompress_if_needed" (binary_expression "Object *obj" identifier * identifier) , (ERROR "bool" identifier) identifier))))) )))) (compound_statement "{\n  _Base_ptr *pp_Var1;\n  size_t *psVar2;\n  _Base_ptr p_Var3;\n  _Base_ptr p_Var4;\n  int iVar5;\n  _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n  *this;\n  _Rb_tree_header *p_Var6;\n  undefined4 extraout_var;\n  _Rb_tree_node_base *p_Var7;\n  const_iterator __position;\n  uchar *uncompressed_data;\n  _Base_ptr uncompressed_size;\n  _Rb_tree_node_base *p_Var8;\n  uint *puVar9;\n  _Rb_tree_color _Var10;\n  _Base_ptr p_Var11;\n  ulong uVar12;\n  char *pcVar13;\n  bool bVar14;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar15;\n  _Base_ptr local_68;\n  section_size_type len;\n  uchar *compressed_data;\n  \n  puVar9 = (uint *)(pshdrs + 0x40);\n  this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n          *)operator_new(0x30);\n  (this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red;\n  p_Var6 = &(this->_M_impl).super__Rb_tree_header;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_parent = (_Base_ptr)0x0;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_left = &p_Var6->_M_header;\n  (this->_M_impl).super__Rb_tree_header._M_header._M_right = &p_Var6->_M_header;\n  (this->_M_impl).super__Rb_tree_header._M_node_count = 0;\n  if (shnum < 2) {\n    return (Compressed_section_map *)this;\n  }\n  _Var10 = _S_black;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (names_size <= uVar12) {\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    pcVar13 = names + uVar12;\n    bVar14 = false;\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;\n    iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);\n    compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);\n    if (bVar14 == false) {\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }\n    else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }\n    if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;\n    p_Var3 = *(_Base_ptr *)(puVar9 + 2);\n    if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }\n    else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }\n    p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n    p_Var11 = &p_Var6->_M_header;\n    __position._M_node = &p_Var6->_M_header;\n    if (p_Var4 == (_Base_ptr)0x0) {\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }\n    else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }\n    _Var10 = _Var10 + _S_black;\n    __position._M_node[1]._M_parent = uncompressed_size;\n    puVar9 = puVar9 + 0x10;\n    *(uchar **)(__position._M_node + 2) = uncompressed_data;\n    __position._M_node[1]._M_left = p_Var3;\n    __position._M_node[1]._M_right = local_68;\n    if (_Var10 == shnum) {\n      return (Compressed_section_map *)this;\n    }\n  } while( true );\n}" { (declaration "_Base_ptr *pp_Var1;" type_identifier (pointer_declarator "*pp_Var1" * identifier) ;) (declaration "size_t *psVar2;" primitive_type (pointer_declarator "*psVar2" * identifier) ;) (declaration "_Base_ptr p_Var3;" type_identifier identifier ;) (declaration "_Base_ptr p_Var4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (ERROR "_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::" (comma_expression "_Rb_tree<unsigned_int,_std" (binary_expression "_Rb_tree<unsigned_int" identifier < identifier) , identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>,_std" identifier > (ERROR "," ,) identifier) : : (binary_expression "_Select1st<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>_>,_std" (binary_expression "Compressed_section_info>_" identifier > identifier) > (ERROR "," ,) identifier) : : (binary_expression "less<unsigned_int>,_std" (binary_expression "less<unsigned_int" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : :) (expression_statement "Compressed_section_info>_>_>\n  *this;" (binary_expression "Compressed_section_info>_>_>\n  *this" (binary_expression "Compressed_section_info>_>_" (binary_expression "Compressed_section_info>_" identifier > identifier) > identifier) > (pointer_expression "*this" * identifier)) ;) (declaration "_Rb_tree_header *p_Var6;" type_identifier (pointer_declarator "*p_Var6" * identifier) ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "_Rb_tree_node_base *p_Var7;" type_identifier (pointer_declarator "*p_Var7" * identifier) ;) (declaration "const_iterator __position;" type_identifier identifier ;) (declaration "uchar *uncompressed_data;" type_identifier (pointer_declarator "*uncompressed_data" * identifier) ;) (declaration "_Base_ptr uncompressed_size;" type_identifier identifier ;) (declaration "_Rb_tree_node_base *p_Var8;" type_identifier (pointer_declarator "*p_Var8" * identifier) ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "_Rb_tree_color _Var10;" type_identifier identifier ;) (declaration "_Base_ptr p_Var11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "char *pcVar13;" primitive_type (pointer_declarator "*pcVar13" * identifier) ;) (declaration "bool bVar14;" primitive_type identifier ;) (ERROR "pair<std::_Rb_tree_node_base*,_std::" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : :) (expression_statement "_Rb_tree_node_base*> pVar15;" (binary_expression "_Rb_tree_node_base*> pVar15" identifier * (ERROR ">" >) identifier) ;) (declaration "_Base_ptr local_68;" type_identifier identifier ;) (declaration "section_size_type len;" type_identifier identifier ;) (declaration "uchar *compressed_data;" type_identifier (pointer_declarator "*compressed_data" * identifier) ;) (expression_statement "puVar9 = (uint *)(pshdrs + 0x40);" (assignment_expression "puVar9 = (uint *)(pshdrs + 0x40)" identifier = (cast_expression "(uint *)(pshdrs + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pshdrs + 0x40)" ( (binary_expression "pshdrs + 0x40" identifier + number_literal) )))) ;) (expression_statement "this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n          *)operator_new(0x30);" (assignment_expression "this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n          *)operator_new(0x30)" identifier = (parenthesized_expression "(_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n          *)operator_new(0x30)" ( (ERROR "_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::" (comma_expression "_Rb_tree<unsigned_int,_std" (binary_expression "_Rb_tree<unsigned_int" identifier < identifier) , identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>,_std" identifier > (ERROR "," ,) identifier) : : (binary_expression "_Select1st<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>_>,_std" (binary_expression "Compressed_section_info>_" identifier > identifier) > (ERROR "," ,) identifier) : : (binary_expression "less<unsigned_int>,_std" (binary_expression "less<unsigned_int" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : :) (binary_expression "Compressed_section_info>_>_>\n          *)operator_new(0x30)" (binary_expression "Compressed_section_info>_>_" (binary_expression "Compressed_section_info>_" identifier > identifier) > identifier) > (pointer_expression "*)operator_new(0x30)" * (ERROR ")" )) (call_expression "operator_new(0x30)" identifier (argument_list "(0x30)" ( number_literal ))))) ))) ;) (expression_statement "(this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red;" (assignment_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_color" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "p_Var6 = &(this->_M_impl).super__Rb_tree_header;" (assignment_expression "p_Var6 = &(this->_M_impl).super__Rb_tree_header" identifier = (pointer_expression "&(this->_M_impl).super__Rb_tree_header" & (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "(this->_M_impl).super__Rb_tree_header._M_header._M_parent = (_Base_ptr)0x0;" (assignment_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_parent = (_Base_ptr)0x0" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_parent" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "(this->_M_impl).super__Rb_tree_header._M_header._M_left = &p_Var6->_M_header;" (assignment_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left = &p_Var6->_M_header" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) = (pointer_expression "&p_Var6->_M_header" & (field_expression "p_Var6->_M_header" identifier -> field_identifier))) ;) (expression_statement "(this->_M_impl).super__Rb_tree_header._M_header._M_right = &p_Var6->_M_header;" (assignment_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_right = &p_Var6->_M_header" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_right" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) = (pointer_expression "&p_Var6->_M_header" & (field_expression "p_Var6->_M_header" identifier -> field_identifier))) ;) (expression_statement "(this->_M_impl).super__Rb_tree_header._M_node_count = 0;" (assignment_expression "(this->_M_impl).super__Rb_tree_header._M_node_count = 0" (field_expression "(this->_M_impl).super__Rb_tree_header._M_node_count" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) = number_literal) ;) (if_statement "if (shnum < 2) {\n    return (Compressed_section_map *)this;\n  }" if (parenthesized_expression "(shnum < 2)" ( (binary_expression "shnum < 2" identifier < number_literal) )) (compound_statement "{\n    return (Compressed_section_map *)this;\n  }" { (return_statement "return (Compressed_section_map *)this;" return (cast_expression "(Compressed_section_map *)this" ( (type_descriptor "Compressed_section_map *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) })) (expression_statement "_Var10 = _S_black;" (assignment_expression "_Var10 = _S_black" identifier = identifier) ;) (do_statement "do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (names_size <= uVar12) {\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    pcVar13 = names + uVar12;\n    bVar14 = false;\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;\n    iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);\n    compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);\n    if (bVar14 == false) {\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }\n    else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }\n    if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;\n    p_Var3 = *(_Base_ptr *)(puVar9 + 2);\n    if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }\n    else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }\n    p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n    p_Var11 = &p_Var6->_M_header;\n    __position._M_node = &p_Var6->_M_header;\n    if (p_Var4 == (_Base_ptr)0x0) {\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }\n    else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }\n    _Var10 = _Var10 + _S_black;\n    __position._M_node[1]._M_parent = uncompressed_size;\n    puVar9 = puVar9 + 0x10;\n    *(uchar **)(__position._M_node + 2) = uncompressed_data;\n    __position._M_node[1]._M_left = p_Var3;\n    __position._M_node[1]._M_right = local_68;\n    if (_Var10 == shnum) {\n      return (Compressed_section_map *)this;\n    }\n  } while( true );" do (compound_statement "{\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (names_size <= uVar12) {\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    pcVar13 = names + uVar12;\n    bVar14 = false;\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;\n    iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);\n    compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);\n    if (bVar14 == false) {\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }\n    else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }\n    if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;\n    p_Var3 = *(_Base_ptr *)(puVar9 + 2);\n    if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }\n    else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }\n    p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n    p_Var11 = &p_Var6->_M_header;\n    __position._M_node = &p_Var6->_M_header;\n    if (p_Var4 == (_Base_ptr)0x0) {\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }\n    else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }\n    _Var10 = _Var10 + _S_black;\n    __position._M_node[1]._M_parent = uncompressed_size;\n    puVar9 = puVar9 + 0x10;\n    *(uchar **)(__position._M_node + 2) = uncompressed_data;\n    __position._M_node[1]._M_left = p_Var3;\n    __position._M_node[1]._M_right = local_68;\n    if (_Var10 == shnum) {\n      return (Compressed_section_map *)this;\n    }\n  }" { (while_statement "while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }" while (parenthesized_expression "((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)))" ( (parenthesized_expression "(puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))" ( (binary_expression "puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)" (binary_expression "puVar9[1] != 1" (subscript_expression "puVar9[1]" identifier [ number_literal ]) != number_literal) || (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 2) != 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 2) != 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 2)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 2" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) )) (compound_statement "{\nLAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;\n      puVar9 = puVar9 + 0x10;\n      if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }\n    }" { (labeled_statement "LAB_0024d3e0:\n      _Var10 = _Var10 + _S_black;" statement_identifier : (expression_statement "_Var10 = _Var10 + _S_black;" (assignment_expression "_Var10 = _Var10 + _S_black" identifier = (binary_expression "_Var10 + _S_black" identifier + identifier)) ;)) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (if_statement "if (_Var10 == shnum) {\n        return (Compressed_section_map *)this;\n      }" if (parenthesized_expression "(_Var10 == shnum)" ( (binary_expression "_Var10 == shnum" identifier == identifier) )) (compound_statement "{\n        return (Compressed_section_map *)this;\n      }" { (return_statement "return (Compressed_section_map *)this;" return (cast_expression "(Compressed_section_map *)this" ( (type_descriptor "Compressed_section_map *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) })) })) (expression_statement "uVar12 = (ulong)*puVar9;" (assignment_expression "uVar12 = (ulong)*puVar9" identifier = (binary_expression "(ulong)*puVar9" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) ;) (if_statement "if (names_size <= uVar12) {\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }" if (parenthesized_expression "(names_size <= uVar12)" ( (binary_expression "names_size <= uVar12" identifier <= identifier) )) (compound_statement "{\n      pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");\n      Object::error(obj,pcVar13,(ulong)_Var10,uVar12);\n      goto LAB_0024d3e0;\n    }" { (expression_statement "pcVar13 = (char *)gettext("bad section name offset for section %u: %lu");" (assignment_expression "pcVar13 = (char *)gettext("bad section name offset for section %u: %lu")" identifier = (cast_expression "(char *)gettext("bad section name offset for section %u: %lu")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("bad section name offset for section %u: %lu")" identifier (argument_list "("bad section name offset for section %u: %lu")" ( (string_literal ""bad section name offset for section %u: %lu"" " string_content ") ))))) ;) (labeled_statement "Object::error(obj,pcVar13,(ulong)_Var10,uVar12);" statement_identifier : (ERROR ":" :) (expression_statement "error(obj,pcVar13,(ulong)_Var10,uVar12);" (call_expression "error(obj,pcVar13,(ulong)_Var10,uVar12)" identifier (argument_list "(obj,pcVar13,(ulong)_Var10,uVar12)" ( identifier , identifier , (cast_expression "(ulong)_Var10" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier ))) ;)) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;) })) (expression_statement "pcVar13 = names + uVar12;" (assignment_expression "pcVar13 = names + uVar12" identifier = (binary_expression "names + uVar12" identifier + identifier)) ;) (expression_statement "bVar14 = false;" (assignment_expression "bVar14 = false" identifier = false) ;) (if_statement "if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)) goto LAB_0024d3e0;" if (parenthesized_expression "(((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14))" ( (binary_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0) &&\n       (bVar14 = is_compressed_debug_section(pcVar13), !bVar14)" (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 0x800) == 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 0x800)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 0x800" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(bVar14 = is_compressed_debug_section(pcVar13), !bVar14)" ( (comma_expression "bVar14 = is_compressed_debug_section(pcVar13), !bVar14" (assignment_expression "bVar14 = is_compressed_debug_section(pcVar13)" identifier = (call_expression "is_compressed_debug_section(pcVar13)" identifier (argument_list "(pcVar13)" ( identifier )))) , (unary_expression "!bVar14" ! identifier)) ))) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0);" (assignment_expression "iVar5 = (*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0)" identifier = (call_expression "(*obj->_vptr_Object[0xe])(obj,(ulong)_Var10,&len,0)" (parenthesized_expression "(*obj->_vptr_Object[0xe])" ( (pointer_expression "*obj->_vptr_Object[0xe]" * (subscript_expression "obj->_vptr_Object[0xe]" (field_expression "obj->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(obj,(ulong)_Var10,&len,0)" ( identifier , (cast_expression "(ulong)_Var10" ( (type_descriptor "ulong" type_identifier) ) identifier) , (pointer_expression "&len" & identifier) , number_literal )))) ;) (expression_statement "compressed_data = (uchar *)CONCAT44(extraout_var,iVar5);" (assignment_expression "compressed_data = (uchar *)CONCAT44(extraout_var,iVar5)" identifier = (cast_expression "(uchar *)CONCAT44(extraout_var,iVar5)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(extraout_var,iVar5)" identifier (argument_list "(extraout_var,iVar5)" ( identifier , identifier ))))) ;) (if_statement "if (bVar14 == false) {\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }\n    else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }" if (parenthesized_expression "(bVar14 == false)" ( (binary_expression "bVar14 == false" identifier == false) )) (compound_statement "{\n      pcVar13 = pcVar13 + 6;\n      uncompressed_size = *(_Base_ptr *)(compressed_data + 8);\n      local_68 = *(_Base_ptr *)(compressed_data + 0x10);\n    }" { (expression_statement "pcVar13 = pcVar13 + 6;" (assignment_expression "pcVar13 = pcVar13 + 6" identifier = (binary_expression "pcVar13 + 6" identifier + number_literal)) ;) (expression_statement "uncompressed_size = *(_Base_ptr *)(compressed_data + 8);" (assignment_expression "uncompressed_size = *(_Base_ptr *)(compressed_data + 8)" identifier = (pointer_expression "*(_Base_ptr *)(compressed_data + 8)" * (cast_expression "(_Base_ptr *)(compressed_data + 8)" ( (type_descriptor "_Base_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(compressed_data + 8)" ( (binary_expression "compressed_data + 8" identifier + number_literal) ))))) ;) (expression_statement "local_68 = *(_Base_ptr *)(compressed_data + 0x10);" (assignment_expression "local_68 = *(_Base_ptr *)(compressed_data + 0x10)" identifier = (pointer_expression "*(_Base_ptr *)(compressed_data + 0x10)" * (cast_expression "(_Base_ptr *)(compressed_data + 0x10)" ( (type_descriptor "_Base_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(compressed_data + 0x10)" ( (binary_expression "compressed_data + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }" else (compound_statement "{\n      pcVar13 = pcVar13 + 7;\n      uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);\n      local_68 = *(_Base_ptr *)(puVar9 + 0xc);\n    }" { (expression_statement "pcVar13 = pcVar13 + 7;" (assignment_expression "pcVar13 = pcVar13 + 7" identifier = (binary_expression "pcVar13 + 7" identifier + number_literal)) ;) (expression_statement "uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len);" (assignment_expression "uncompressed_size = (_Base_ptr)get_uncompressed_size(compressed_data,len)" identifier = (cast_expression "(_Base_ptr)get_uncompressed_size(compressed_data,len)" ( (type_descriptor "_Base_ptr" type_identifier) ) (call_expression "get_uncompressed_size(compressed_data,len)" identifier (argument_list "(compressed_data,len)" ( identifier , identifier ))))) ;) (expression_statement "local_68 = *(_Base_ptr *)(puVar9 + 0xc);" (assignment_expression "local_68 = *(_Base_ptr *)(puVar9 + 0xc)" identifier = (pointer_expression "*(_Base_ptr *)(puVar9 + 0xc)" * (cast_expression "(_Base_ptr *)(puVar9 + 0xc)" ( (type_descriptor "_Base_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 0xc)" ( (binary_expression "puVar9 + 0xc" identifier + number_literal) ))))) ;) }))) (if_statement "if (uncompressed_size == (_Base_ptr)0xffffffffffffffff) goto LAB_0024d3e0;" if (parenthesized_expression "(uncompressed_size == (_Base_ptr)0xffffffffffffffff)" ( (binary_expression "uncompressed_size == (_Base_ptr)0xffffffffffffffff" identifier == (cast_expression "(_Base_ptr)0xffffffffffffffff" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "p_Var3 = *(_Base_ptr *)(puVar9 + 2);" (assignment_expression "p_Var3 = *(_Base_ptr *)(puVar9 + 2)" identifier = (pointer_expression "*(_Base_ptr *)(puVar9 + 2)" * (cast_expression "(_Base_ptr *)(puVar9 + 2)" ( (type_descriptor "_Base_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) ))))) ;) (if_statement "if ((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)) {\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }\n    else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }" if (parenthesized_expression "((decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14))" ( (binary_expression "(decompress_if_needed) && (bVar14 = need_decompressed_section(pcVar13), bVar14)" (parenthesized_expression "(decompress_if_needed)" ( identifier )) && (parenthesized_expression "(bVar14 = need_decompressed_section(pcVar13), bVar14)" ( (comma_expression "bVar14 = need_decompressed_section(pcVar13), bVar14" (assignment_expression "bVar14 = need_decompressed_section(pcVar13)" identifier = (call_expression "need_decompressed_section(pcVar13)" identifier (argument_list "(pcVar13)" ( identifier )))) , identifier) ))) )) (compound_statement "{\n      uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);\n      bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));\n      if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }\n    }" { (expression_statement "uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size);" (assignment_expression "uncompressed_data = (uchar *)operator_new__((ulong)uncompressed_size)" identifier = (cast_expression "(uchar *)operator_new__((ulong)uncompressed_size)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((ulong)uncompressed_size)" identifier (argument_list "((ulong)uncompressed_size)" ( (cast_expression "(ulong)uncompressed_size" ( (type_descriptor "ulong" type_identifier) ) identifier) ))))) ;) (expression_statement "bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2));" (assignment_expression "bVar14 = decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2))" identifier = (call_expression "decompress_input_section\n                         (compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2))" identifier (argument_list "(compressed_data,len,uncompressed_data,(ulong)uncompressed_size,0x40,false,\n                          *(Elf_Xword *)(puVar9 + 2))" ( identifier , identifier , identifier , (cast_expression "(ulong)uncompressed_size" ( (type_descriptor "ulong" type_identifier) ) identifier) , number_literal , false , (pointer_expression "*(Elf_Xword *)(puVar9 + 2)" * (cast_expression "(Elf_Xword *)(puVar9 + 2)" ( (type_descriptor "Elf_Xword *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (!bVar14) {\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }" if (parenthesized_expression "(!bVar14)" ( (unary_expression "!bVar14" ! identifier) )) (compound_statement "{\n        operator_delete__(uncompressed_data);\n        goto LAB_0024d467;\n      }" { (expression_statement "operator_delete__(uncompressed_data);" (call_expression "operator_delete__(uncompressed_data)" identifier (argument_list "(uncompressed_data)" ( identifier ))) ;) (goto_statement "goto LAB_0024d467;" goto statement_identifier ;) })) }) (else_clause "else {\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }" else (compound_statement "{\nLAB_0024d467:\n      uncompressed_data = (uchar *)0x0;\n    }" { (labeled_statement "LAB_0024d467:\n      uncompressed_data = (uchar *)0x0;" statement_identifier : (expression_statement "uncompressed_data = (uchar *)0x0;" (assignment_expression "uncompressed_data = (uchar *)0x0" identifier = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }))) (expression_statement "p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;" (assignment_expression "p_Var4 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent" identifier = (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_parent" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ;) (expression_statement "p_Var11 = &p_Var6->_M_header;" (assignment_expression "p_Var11 = &p_Var6->_M_header" identifier = (pointer_expression "&p_Var6->_M_header" & (field_expression "p_Var6->_M_header" identifier -> field_identifier))) ;) (expression_statement "__position._M_node = &p_Var6->_M_header;" (assignment_expression "__position._M_node = &p_Var6->_M_header" (field_expression "__position._M_node" identifier . field_identifier) = (pointer_expression "&p_Var6->_M_header" & (field_expression "p_Var6->_M_header" identifier -> field_identifier))) ;) (if_statement "if (p_Var4 == (_Base_ptr)0x0) {\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }\n    else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }" if (parenthesized_expression "(p_Var4 == (_Base_ptr)0x0)" ( (binary_expression "p_Var4 == (_Base_ptr)0x0" identifier == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\nLAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);\n      p_Var7[1]._M_color = _Var10;\n      p_Var7[1]._M_parent = (_Base_ptr)0x0;\n      p_Var7[1]._M_left = (_Base_ptr)0x0;\n      p_Var7[1]._M_right = (_Base_ptr)0x0;\n      *(undefined8 *)(p_Var7 + 2) = 0;\n      pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);\n      p_Var8 = pVar15.second;\n      __position._M_node = pVar15.first;\n      if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }\n    }" { (labeled_statement "LAB_0024d4ab:\n      p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);" statement_identifier : (expression_statement "p_Var7 = (_Rb_tree_node_base *)operator_new(0x48);" (assignment_expression "p_Var7 = (_Rb_tree_node_base *)operator_new(0x48)" identifier = (cast_expression "(_Rb_tree_node_base *)operator_new(0x48)" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x48)" identifier (argument_list "(0x48)" ( number_literal ))))) ;)) (expression_statement "p_Var7[1]._M_color = _Var10;" (assignment_expression "p_Var7[1]._M_color = _Var10" (field_expression "p_Var7[1]._M_color" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "p_Var7[1]._M_parent = (_Base_ptr)0x0;" (assignment_expression "p_Var7[1]._M_parent = (_Base_ptr)0x0" (field_expression "p_Var7[1]._M_parent" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "p_Var7[1]._M_left = (_Base_ptr)0x0;" (assignment_expression "p_Var7[1]._M_left = (_Base_ptr)0x0" (field_expression "p_Var7[1]._M_left" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "p_Var7[1]._M_right = (_Base_ptr)0x0;" (assignment_expression "p_Var7[1]._M_right = (_Base_ptr)0x0" (field_expression "p_Var7[1]._M_right" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "*(undefined8 *)(p_Var7 + 2) = 0;" (assignment_expression "*(undefined8 *)(p_Var7 + 2) = 0" (pointer_expression "*(undefined8 *)(p_Var7 + 2)" * (cast_expression "(undefined8 *)(p_Var7 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var7 + 2)" ( (binary_expression "p_Var7 + 2" identifier + number_literal) )))) = number_literal) ;) (ERROR "pVar15 = std::\n               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Compressed_section_info>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Compressed_section_info>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::" (assignment_expression "pVar15 = std" identifier = identifier) : : (comma_expression "_Rb_tree<unsigned_int,_std" (binary_expression "_Rb_tree<unsigned_int" identifier < identifier) , identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>,_std" identifier > (ERROR "," ,) identifier) : : (binary_expression "_Select1st<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Compressed_section_info>_>,_std" (binary_expression "Compressed_section_info>_" identifier > identifier) > (ERROR "," ,) identifier) : : (binary_expression "less<unsigned_int>,_std" (binary_expression "less<unsigned_int" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : :) (expression_statement "Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color);" (binary_expression "Compressed_section_info>_>_>\n               ::_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color)" (binary_expression "Compressed_section_info>_>_" (binary_expression "Compressed_section_info>_" identifier > identifier) > identifier) > (ERROR "::" : :) (call_expression "_M_get_insert_hint_unique_pos(this,__position,&p_Var7[1]._M_color)" identifier (argument_list "(this,__position,&p_Var7[1]._M_color)" ( identifier , identifier , (pointer_expression "&p_Var7[1]._M_color" & (field_expression "p_Var7[1]._M_color" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier)) )))) ;) (expression_statement "p_Var8 = pVar15.second;" (assignment_expression "p_Var8 = pVar15.second" identifier = (field_expression "pVar15.second" identifier . field_identifier)) ;) (expression_statement "__position._M_node = pVar15.first;" (assignment_expression "__position._M_node = pVar15.first" (field_expression "__position._M_node" identifier . field_identifier) = (field_expression "pVar15.first" identifier . field_identifier)) ;) (if_statement "if (p_Var8 == (_Rb_tree_node_base *)0x0) {\n        operator_delete(p_Var7);\n      }\n      else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }" if (parenthesized_expression "(p_Var8 == (_Rb_tree_node_base *)0x0)" ( (binary_expression "p_Var8 == (_Rb_tree_node_base *)0x0" identifier == (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        operator_delete(p_Var7);\n      }" { (expression_statement "operator_delete(p_Var7);" (call_expression "operator_delete(p_Var7)" identifier (argument_list "(p_Var7)" ( identifier ))) ;) }) (else_clause "else {\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }" else (compound_statement "{\n        if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }\n        std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);\n        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n        *psVar2 = *psVar2 + 1;\n        __position._M_node = p_Var7;\n      }" { (if_statement "if ((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)) {\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }\n        else {\n          bVar14 = true;\n        }" if (parenthesized_expression "((__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8))" ( (binary_expression "(__position._M_node == (_Base_ptr)0x0) && (p_Var6 != (_Rb_tree_header *)p_Var8)" (parenthesized_expression "(__position._M_node == (_Base_ptr)0x0)" ( (binary_expression "__position._M_node == (_Base_ptr)0x0" (field_expression "__position._M_node" identifier . field_identifier) == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) && (parenthesized_expression "(p_Var6 != (_Rb_tree_header *)p_Var8)" ( (binary_expression "p_Var6 != (_Rb_tree_header *)p_Var8" identifier != (cast_expression "(_Rb_tree_header *)p_Var8" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))) )) (compound_statement "{\n          bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;\n        }" { (expression_statement "bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color;" (assignment_expression "bVar14 = p_Var7[1]._M_color < p_Var8[1]._M_color" identifier = (binary_expression "p_Var7[1]._M_color < p_Var8[1]._M_color" (field_expression "p_Var7[1]._M_color" (subscript_expression "p_Var7[1]" identifier [ number_literal ]) . field_identifier) < (field_expression "p_Var8[1]._M_color" (subscript_expression "p_Var8[1]" identifier [ number_literal ]) . field_identifier))) ;) }) (else_clause "else {\n          bVar14 = true;\n        }" else (compound_statement "{\n          bVar14 = true;\n        }" { (expression_statement "bVar14 = true;" (assignment_expression "bVar14 = true" identifier = true) ;) }))) (labeled_statement "std::_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);" statement_identifier : (ERROR ":" :) (expression_statement "_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header);" (call_expression "_Rb_tree_insert_and_rebalance(bVar14,p_Var7,p_Var8,&p_Var6->_M_header)" identifier (argument_list "(bVar14,p_Var7,p_Var8,&p_Var6->_M_header)" ( identifier , identifier , identifier , (pointer_expression "&p_Var6->_M_header" & (field_expression "p_Var6->_M_header" identifier -> field_identifier)) ))) ;)) (expression_statement "psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;" (assignment_expression "psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count" identifier = (pointer_expression "&(this->_M_impl).super__Rb_tree_header._M_node_count" & (field_expression "(this->_M_impl).super__Rb_tree_header._M_node_count" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "*psVar2 = *psVar2 + 1;" (assignment_expression "*psVar2 = *psVar2 + 1" (pointer_expression "*psVar2" * identifier) = (binary_expression "*psVar2 + 1" (pointer_expression "*psVar2" * identifier) + number_literal)) ;) (expression_statement "__position._M_node = p_Var7;" (assignment_expression "__position._M_node = p_Var7" (field_expression "__position._M_node" identifier . field_identifier) = identifier) ;) }))) }) (else_clause "else {\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }" else (compound_statement "{\n      do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);\nLAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;\n    }" { (do_statement "do {\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      } while (*pp_Var1 != (_Base_ptr)0x0);" do (compound_statement "{\n        while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }\n        pp_Var1 = &(__position._M_node)->_M_right;\n        p_Var4 = *pp_Var1;\n        __position._M_node = p_Var11;\n      }" { (while_statement "while (__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color) {\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }" while (parenthesized_expression "(__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color)" ( (comma_expression "__position._M_node = p_Var4, _Var10 <= __position._M_node[1]._M_color" (assignment_expression "__position._M_node = p_Var4" (field_expression "__position._M_node" identifier . field_identifier) = identifier) , (binary_expression "_Var10 <= __position._M_node[1]._M_color" identifier <= (field_expression "__position._M_node[1]._M_color" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier))) )) (compound_statement "{\n          p_Var4 = (__position._M_node)->_M_left;\n          p_Var11 = __position._M_node;\n          if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;\n        }" { (expression_statement "p_Var4 = (__position._M_node)->_M_left;" (assignment_expression "p_Var4 = (__position._M_node)->_M_left" identifier = (field_expression "(__position._M_node)->_M_left" (parenthesized_expression "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) )) -> field_identifier)) ;) (expression_statement "p_Var11 = __position._M_node;" (assignment_expression "p_Var11 = __position._M_node" identifier = (field_expression "__position._M_node" identifier . field_identifier)) ;) (if_statement "if ((__position._M_node)->_M_left == (_Base_ptr)0x0) goto LAB_0024d49a;" if (parenthesized_expression "((__position._M_node)->_M_left == (_Base_ptr)0x0)" ( (binary_expression "(__position._M_node)->_M_left == (_Base_ptr)0x0" (field_expression "(__position._M_node)->_M_left" (parenthesized_expression "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) )) -> field_identifier) == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_0024d49a;" goto statement_identifier ;)) })) (expression_statement "pp_Var1 = &(__position._M_node)->_M_right;" (assignment_expression "pp_Var1 = &(__position._M_node)->_M_right" identifier = (pointer_expression "&(__position._M_node)->_M_right" & (field_expression "(__position._M_node)->_M_right" (parenthesized_expression "(__position._M_node)" ( (field_expression "__position._M_node" identifier . field_identifier) )) -> field_identifier))) ;) (expression_statement "p_Var4 = *pp_Var1;" (assignment_expression "p_Var4 = *pp_Var1" identifier = (pointer_expression "*pp_Var1" * identifier)) ;) (expression_statement "__position._M_node = p_Var11;" (assignment_expression "__position._M_node = p_Var11" (field_expression "__position._M_node" identifier . field_identifier) = identifier) ;) }) while (parenthesized_expression "(*pp_Var1 != (_Base_ptr)0x0)" ( (binary_expression "*pp_Var1 != (_Base_ptr)0x0" (pointer_expression "*pp_Var1" * identifier) != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) ;) (labeled_statement "LAB_0024d49a:\n      if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;" statement_identifier : (if_statement "if ((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;" if (parenthesized_expression "((p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color))" ( (binary_expression "(p_Var6 == (_Rb_tree_header *)__position._M_node) ||\n         (_Var10 < __position._M_node[1]._M_color)" (parenthesized_expression "(p_Var6 == (_Rb_tree_header *)__position._M_node)" ( (binary_expression "p_Var6 == (_Rb_tree_header *)__position._M_node" identifier == (cast_expression "(_Rb_tree_header *)__position._M_node" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__position._M_node" identifier . field_identifier))) )) || (parenthesized_expression "(_Var10 < __position._M_node[1]._M_color)" ( (binary_expression "_Var10 < __position._M_node[1]._M_color" identifier < (field_expression "__position._M_node[1]._M_color" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier)) ))) )) (goto_statement "goto LAB_0024d4ab;" goto statement_identifier ;))) }))) (expression_statement "_Var10 = _Var10 + _S_black;" (assignment_expression "_Var10 = _Var10 + _S_black" identifier = (binary_expression "_Var10 + _S_black" identifier + identifier)) ;) (expression_statement "__position._M_node[1]._M_parent = uncompressed_size;" (assignment_expression "__position._M_node[1]._M_parent = uncompressed_size" (field_expression "__position._M_node[1]._M_parent" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (expression_statement "*(uchar **)(__position._M_node + 2) = uncompressed_data;" (assignment_expression "*(uchar **)(__position._M_node + 2) = uncompressed_data" (pointer_expression "*(uchar **)(__position._M_node + 2)" * (cast_expression "(uchar **)(__position._M_node + 2)" ( (type_descriptor "uchar **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__position._M_node + 2)" ( (binary_expression "__position._M_node + 2" (field_expression "__position._M_node" identifier . field_identifier) + number_literal) )))) = identifier) ;) (expression_statement "__position._M_node[1]._M_left = p_Var3;" (assignment_expression "__position._M_node[1]._M_left = p_Var3" (field_expression "__position._M_node[1]._M_left" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "__position._M_node[1]._M_right = local_68;" (assignment_expression "__position._M_node[1]._M_right = local_68" (field_expression "__position._M_node[1]._M_right" (subscript_expression "__position._M_node[1]" (field_expression "__position._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier) = identifier) ;) (if_statement "if (_Var10 == shnum) {\n      return (Compressed_section_map *)this;\n    }" if (parenthesized_expression "(_Var10 == shnum)" ( (binary_expression "_Var10 == shnum" identifier == identifier) )) (compound_statement "{\n      return (Compressed_section_map *)this;\n    }" { (return_statement "return (Compressed_section_map *)this;" return (cast_expression "(Compressed_section_map *)this" ( (type_descriptor "Compressed_section_map *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) }))
(translation_unit "long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}\n\n" (function_definition "long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" identifier (parameter_list "(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "char param_6" primitive_type identifier) ))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar14;" primitive_type identifier ;) (declaration "undefined1 auVar15 [16];" type_identifier (array_declarator "auVar15 [16]" identifier [ number_literal ]) ;) (declaration "undefined8 local_68;" type_identifier identifier ;) (declaration "undefined8 local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "puVar9 = (uint *)(param_1 + 0x40);" (assignment_expression "puVar9 = (uint *)(param_1 + 0x40)" identifier = (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) ;) (expression_statement "lVar3 = FUN_00337280(0x30);" (assignment_expression "lVar3 = FUN_00337280(0x30)" identifier = (call_expression "FUN_00337280(0x30)" identifier (argument_list "(0x30)" ( number_literal )))) ;) (expression_statement "*(undefined4 *)(lVar3 + 8) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + 8) = 0" (pointer_expression "*(undefined4 *)(lVar3 + 8)" * (cast_expression "(undefined4 *)(lVar3 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "lVar4 = lVar3 + 8;" (assignment_expression "lVar4 = lVar3 + 8" identifier = (binary_expression "lVar3 + 8" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(lVar3 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x10) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x10)" * (cast_expression "(undefined8 *)(lVar3 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(long *)(lVar3 + 0x18) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x18) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x18)" * (cast_expression "(long *)(lVar3 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(lVar3 + 0x20) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x20) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar3 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x28)" * (cast_expression "(undefined8 *)(lVar3 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (param_2 < 2) {\n    return lVar3;\n  }" if (parenthesized_expression "(param_2 < 2)" ( (binary_expression "param_2 < 2" identifier < number_literal) )) (compound_statement "{\n    return lVar3;\n  }" { (return_statement "return lVar3;" return identifier ;) })) (expression_statement "uVar10 = 1;" (assignment_expression "uVar10 = 1" identifier = number_literal) ;) (do_statement "do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );" do (compound_statement "{\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  }" { (while_statement "while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" while (parenthesized_expression "((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)))" ( (parenthesized_expression "(puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))" ( (binary_expression "puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)" (binary_expression "puVar9[1] != 1" (subscript_expression "puVar9[1]" identifier [ number_literal ]) != number_literal) || (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 2) != 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 2) != 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 2)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 2" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) )) (compound_statement "{\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" { (labeled_statement "LAB_0024d3e0:\n      uVar10 = uVar10 + 1;" statement_identifier : (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;)) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (if_statement "if (uVar10 == param_2) {\n        return lVar3;\n      }" if (parenthesized_expression "(uVar10 == param_2)" ( (binary_expression "uVar10 == param_2" identifier == identifier) )) (compound_statement "{\n        return lVar3;\n      }" { (return_statement "return lVar3;" return identifier ;) })) })) (expression_statement "uVar12 = (ulong)*puVar9;" (assignment_expression "uVar12 = (ulong)*puVar9" identifier = (binary_expression "(ulong)*puVar9" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) ;) (if_statement "if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" if (parenthesized_expression "(param_4 <= uVar12)" ( (binary_expression "param_4 <= uVar12" identifier <= identifier) )) (compound_statement "{\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" { (expression_statement "uVar6 = gettext("bad section name offset for section %u: %lu");" (assignment_expression "uVar6 = gettext("bad section name offset for section %u: %lu")" identifier = (call_expression "gettext("bad section name offset for section %u: %lu")" identifier (argument_list "("bad section name offset for section %u: %lu")" ( (string_literal ""bad section name offset for section %u: %lu"" " string_content ") )))) ;) (expression_statement "FUN_00229f40(param_5,uVar6,uVar10,uVar12);" (call_expression "FUN_00229f40(param_5,uVar6,uVar10,uVar12)" identifier (argument_list "(param_5,uVar6,uVar10,uVar12)" ( identifier , identifier , identifier , identifier ))) ;) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;) })) (expression_statement "lVar13 = uVar12 + param_3;" (assignment_expression "lVar13 = uVar12 + param_3" identifier = (binary_expression "uVar12 + param_3" identifier + identifier)) ;) (expression_statement "cVar2 = '\0';" (assignment_expression "cVar2 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;" if (parenthesized_expression "(((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))" ( (binary_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0)" ( (binary_expression "(*(ulong *)(puVar9 + 2) & 0x800) == 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 0x800)" ( (binary_expression "*(ulong *)(puVar9 + 2) & 0x800" (pointer_expression "*(ulong *)(puVar9 + 2)" * (cast_expression "(ulong *)(puVar9 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00212270(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00212270(lVar13)" identifier = (call_expression "FUN_00212270(lVar13)" identifier (argument_list "(lVar13)" ( identifier )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);" (assignment_expression "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" identifier = (call_expression "(**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" (parenthesized_expression "(**(code **)(*param_5 + 0x70))" ( (pointer_expression "**(code **)(*param_5 + 0x70)" * (pointer_expression "*(code **)(*param_5 + 0x70)" * (cast_expression "(code **)(*param_5 + 0x70)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_5 + 0x70)" ( (binary_expression "*param_5 + 0x70" (pointer_expression "*param_5" * identifier) + number_literal) ))))) )) (argument_list "(param_5,uVar10,local_40,0)" ( identifier , identifier , identifier , number_literal )))) ;) (if_statement "if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }" { (expression_statement "lVar13 = lVar13 + 6;" (assignment_expression "lVar13 = lVar13 + 6" identifier = (binary_expression "lVar13 + 6" identifier + number_literal)) ;) (expression_statement "lVar8 = *(long *)(lVar5 + 8);" (assignment_expression "lVar8 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "local_68 = *(undefined8 *)(lVar5 + 0x10);" (assignment_expression "local_68 = *(undefined8 *)(lVar5 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar5 + 0x10)" * (cast_expression "(undefined8 *)(lVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" else (compound_statement "{\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" { (expression_statement "lVar13 = lVar13 + 7;" (assignment_expression "lVar13 = lVar13 + 7" identifier = (binary_expression "lVar13 + 7" identifier + number_literal)) ;) (expression_statement "lVar8 = FUN_002fedb0(lVar5,local_40[0]);" (assignment_expression "lVar8 = FUN_002fedb0(lVar5,local_40[0])" identifier = (call_expression "FUN_002fedb0(lVar5,local_40[0])" identifier (argument_list "(lVar5,local_40[0])" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) )))) ;) (expression_statement "local_68 = *(undefined8 *)(puVar9 + 0xc);" (assignment_expression "local_68 = *(undefined8 *)(puVar9 + 0xc)" identifier = (pointer_expression "*(undefined8 *)(puVar9 + 0xc)" * (cast_expression "(undefined8 *)(puVar9 + 0xc)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 0xc)" ( (binary_expression "puVar9 + 0xc" identifier + number_literal) ))))) ;) }))) (if_statement "if (lVar8 == -1) goto LAB_0024d3e0;" if (parenthesized_expression "(lVar8 == -1)" ( (binary_expression "lVar8 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0024d3e0;" goto statement_identifier ;)) (expression_statement "uVar6 = *(undefined8 *)(puVar9 + 2);" (assignment_expression "uVar6 = *(undefined8 *)(puVar9 + 2)" identifier = (pointer_expression "*(undefined8 *)(puVar9 + 2)" * (cast_expression "(undefined8 *)(puVar9 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) ))))) ;) (if_statement "if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" if (parenthesized_expression "((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'))" ( (binary_expression "(param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" (parenthesized_expression "(param_6 == '\0')" ( (binary_expression "param_6 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" ( (comma_expression "cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00229b60(lVar13)" identifier = (call_expression "FUN_00229b60(lVar13)" identifier (argument_list "(lVar13)" ( identifier )))) , (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\nLAB_0024d467:\n      uVar7 = 0;\n    }" { (labeled_statement "LAB_0024d467:\n      uVar7 = 0;" statement_identifier : (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" else (compound_statement "{\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" { (expression_statement "uVar7 = thunk_FUN_00337280(lVar8);" (assignment_expression "uVar7 = thunk_FUN_00337280(lVar8)" identifier = (call_expression "thunk_FUN_00337280(lVar8)" identifier (argument_list "(lVar8)" ( identifier )))) ;) (expression_statement "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));" (assignment_expression "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" identifier = (call_expression "FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" identifier (argument_list "(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , identifier , identifier , number_literal , number_literal , (pointer_expression "*(undefined8 *)(puVar9 + 2)" * (cast_expression "(undefined8 *)(puVar9 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) )))) ;) (if_statement "if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" { (expression_statement "thunk_FUN_00338a50(uVar7);" (call_expression "thunk_FUN_00338a50(uVar7)" identifier (argument_list "(uVar7)" ( identifier ))) ;) (goto_statement "goto LAB_0024d467;" goto statement_identifier ;) })) }))) (expression_statement "lVar13 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar3 + 0x10)" identifier = (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar11 = lVar4;" (assignment_expression "lVar11 = lVar4" identifier = identifier) ;) (expression_statement "lVar5 = lVar4;" (assignment_expression "lVar5 = lVar4" identifier = identifier) ;) (if_statement "if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" if (parenthesized_expression "(*(long *)(lVar3 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar3 + 0x10) == 0" (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }" { (labeled_statement "LAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);" statement_identifier : (expression_statement "lVar13 = FUN_00337280(0x48);" (assignment_expression "lVar13 = FUN_00337280(0x48)" identifier = (call_expression "FUN_00337280(0x48)" identifier (argument_list "(0x48)" ( number_literal )))) ;)) (expression_statement "*(uint *)(lVar13 + 0x20) = uVar10;" (assignment_expression "*(uint *)(lVar13 + 0x20) = uVar10" (pointer_expression "*(uint *)(lVar13 + 0x20)" * (cast_expression "(uint *)(lVar13 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x20)" ( (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x28)" * (cast_expression "(undefined8 *)(lVar13 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x28)" ( (binary_expression "lVar13 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x30)" * (cast_expression "(undefined8 *)(lVar13 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x30)" ( (binary_expression "lVar13 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x38) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x38)" * (cast_expression "(undefined8 *)(lVar13 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x38)" ( (binary_expression "lVar13 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar13 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x40) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x40)" * (cast_expression "(undefined8 *)(lVar13 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x40)" ( (binary_expression "lVar13 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);" (assignment_expression "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" identifier = (call_expression "FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" identifier (argument_list "(lVar3,lVar5,lVar13 + 0x20)" ( identifier , identifier , (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) ;) (expression_statement "lVar11 = auVar15._8_8_;" (assignment_expression "lVar11 = auVar15._8_8_" identifier = (field_expression "auVar15._8_8_" identifier . field_identifier)) ;) (expression_statement "lVar5 = auVar15._0_8_;" (assignment_expression "lVar5 = auVar15._0_8_" identifier = (field_expression "auVar15._0_8_" identifier . field_identifier)) ;) (if_statement "if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" if (parenthesized_expression "(lVar11 == 0)" ( (binary_expression "lVar11 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00338a50(lVar13);\n      }" { (expression_statement "FUN_00338a50(lVar13);" (call_expression "FUN_00338a50(lVar13)" identifier (argument_list "(lVar13)" ( identifier ))) ;) }) (else_clause "else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" else (compound_statement "{\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" { (if_statement "if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }" if (parenthesized_expression "((lVar5 == 0) && (lVar4 != lVar11))" ( (binary_expression "(lVar5 == 0) && (lVar4 != lVar11)" (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) && (parenthesized_expression "(lVar4 != lVar11)" ( (binary_expression "lVar4 != lVar11" identifier != identifier) ))) )) (compound_statement "{\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }" { (expression_statement "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);" (assignment_expression "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" identifier = (binary_expression "*(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" (pointer_expression "*(uint *)(lVar13 + 0x20)" * (cast_expression "(uint *)(lVar13 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + 0x20)" ( (binary_expression "lVar13 + 0x20" identifier + number_literal) )))) < (pointer_expression "*(uint *)(lVar11 + 0x20)" * (cast_expression "(uint *)(lVar11 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x20)" ( (binary_expression "lVar11 + 0x20" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          bVar14 = true;\n        }" else (compound_statement "{\n          bVar14 = true;\n        }" { (expression_statement "bVar14 = true;" (assignment_expression "bVar14 = true" identifier = true) ;) }))) (expression_statement "FUN_00339f50(bVar14,lVar13);" (call_expression "FUN_00339f50(bVar14,lVar13)" identifier (argument_list "(bVar14,lVar13)" ( identifier , identifier ))) ;) (expression_statement "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;" (assignment_expression "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" * (cast_expression "(long *)(lVar3 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = (binary_expression "*(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" * (cast_expression "(long *)(lVar3 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "lVar5 = lVar13;" (assignment_expression "lVar5 = lVar13" identifier = identifier) ;) }))) }) (else_clause "else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" else (compound_statement "{\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" { (do_statement "do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);" do (compound_statement "{\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      }" { (while_statement "while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" while (parenthesized_expression "(lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20))" ( (comma_expression "lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)" (assignment_expression "lVar5 = lVar13" identifier = identifier) , (binary_expression "uVar10 <= *(uint *)(lVar5 + 0x20)" identifier <= (pointer_expression "*(uint *)(lVar5 + 0x20)" * (cast_expression "(uint *)(lVar5 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))))) )) (compound_statement "{\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" { (expression_statement "lVar13 = *(long *)(lVar5 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar5 + 0x10)" identifier = (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar11 = lVar5;" (assignment_expression "lVar11 = lVar5" identifier = identifier) ;) (if_statement "if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;" if (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) == number_literal) )) (goto_statement "goto LAB_0024d49a;" goto statement_identifier ;)) })) (expression_statement "plVar1 = (long *)(lVar5 + 0x18);" (assignment_expression "plVar1 = (long *)(lVar5 + 0x18)" identifier = (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) ;) (expression_statement "lVar13 = *plVar1;" (assignment_expression "lVar13 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (expression_statement "lVar5 = lVar11;" (assignment_expression "lVar5 = lVar11" identifier = identifier) ;) }) while (parenthesized_expression "(*plVar1 != 0)" ( (binary_expression "*plVar1 != 0" (pointer_expression "*plVar1" * identifier) != number_literal) )) ;) (labeled_statement "LAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" statement_identifier : (if_statement "if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" if (parenthesized_expression "((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20)))" ( (binary_expression "(lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))" (parenthesized_expression "(lVar4 == lVar5)" ( (binary_expression "lVar4 == lVar5" identifier == identifier) )) || (parenthesized_expression "(uVar10 < *(uint *)(lVar5 + 0x20))" ( (binary_expression "uVar10 < *(uint *)(lVar5 + 0x20)" identifier < (pointer_expression "*(uint *)(lVar5 + 0x20)" * (cast_expression "(uint *)(lVar5 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) ))))) ))) )) (goto_statement "goto LAB_0024d4ab;" goto statement_identifier ;))) }))) (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (expression_statement "*(long *)(lVar5 + 0x28) = lVar8;" (assignment_expression "*(long *)(lVar5 + 0x28) = lVar8" (pointer_expression "*(long *)(lVar5 + 0x28)" * (cast_expression "(long *)(lVar5 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x28)" ( (binary_expression "lVar5 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" identifier = (binary_expression "puVar9 + 0x10" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(lVar5 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(lVar5 + 0x40)" * (cast_expression "(undefined8 *)(lVar5 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x40)" ( (binary_expression "lVar5 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(lVar5 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(lVar5 + 0x30)" * (cast_expression "(undefined8 *)(lVar5 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x30)" ( (binary_expression "lVar5 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(lVar5 + 0x38) = local_68;" (assignment_expression "*(undefined8 *)(lVar5 + 0x38) = local_68" (pointer_expression "*(undefined8 *)(lVar5 + 0x38)" * (cast_expression "(undefined8 *)(lVar5 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x38)" ( (binary_expression "lVar5 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar10 == param_2) {\n      return lVar3;\n    }" if (parenthesized_expression "(uVar10 == param_2)" ( (binary_expression "uVar10 == param_2" identifier == identifier) )) (compound_statement "{\n      return lVar3;\n    }" { (return_statement "return lVar3;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (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 < LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) )) (compound_statement { (labeled_statement statement_identifier : (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 IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) , (binary_expression IDENT == (char_literal ' escape_sequence '))) ))) )) (goto_statement goto 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 , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) , (binary_expression IDENT == (char_literal ' escape_sequence '))) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT , LIT , LIT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (field_expression IDENT . field_identifier)) ;) (expression_statement (assignment_expression IDENT = (field_expression IDENT . field_identifier)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression IDENT != IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (goto_statement goto statement_identifier ;))) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + 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) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "long FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_0024d360(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" (identifier "FUN_0024d360") (parameter_list "(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) (, ",") (parameter_declaration "long *param_5" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) (, ",") (parameter_declaration "char param_6" (primitive_type "char") (identifier "param_6")) () ")"))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  long lVar8;\n  uint *puVar9;\n  uint uVar10;\n  long lVar11;\n  ulong uVar12;\n  long lVar13;\n  bool bVar14;\n  undefined1 auVar15 [16];\n  undefined8 local_68;\n  undefined8 local_40 [2];\n  \n  puVar9 = (uint *)(param_1 + 0x40);\n  lVar3 = FUN_00337280(0x30);\n  *(undefined4 *)(lVar3 + 8) = 0;\n  lVar4 = lVar3 + 8;\n  *(undefined8 *)(lVar3 + 0x10) = 0;\n  *(long *)(lVar3 + 0x18) = lVar4;\n  *(long *)(lVar3 + 0x20) = lVar4;\n  *(undefined8 *)(lVar3 + 0x28) = 0;\n  if (param_2 < 2) {\n    return lVar3;\n  }\n  uVar10 = 1;\n  do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "uint *puVar9;" (type_identifier "uint") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "long lVar11;" (sized_type_specifier "long" (long "long")) (identifier "lVar11") (; ";")) (declaration "ulong uVar12;" (type_identifier "ulong") (identifier "uVar12") (; ";")) (declaration "long lVar13;" (sized_type_specifier "long" (long "long")) (identifier "lVar13") (; ";")) (declaration "bool bVar14;" (primitive_type "bool") (identifier "bVar14") (; ";")) (declaration "undefined1 auVar15 [16];" (type_identifier "undefined1") (array_declarator "auVar15 [16]" (identifier "auVar15") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined8 local_68;" (type_identifier "undefined8") (identifier "local_68") (; ";")) (declaration "undefined8 local_40 [2];" (type_identifier "undefined8") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "puVar9 = (uint *)(param_1 + 0x40);" (assignment_expression "puVar9 = (uint *)(param_1 + 0x40)" (identifier "puVar9") (= "=") (cast_expression "(uint *)(param_1 + 0x40)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (; ";")) (expression_statement "lVar3 = FUN_00337280(0x30);" (assignment_expression "lVar3 = FUN_00337280(0x30)" (identifier "lVar3") (= "=") (call_expression "FUN_00337280(0x30)" (identifier "FUN_00337280") (argument_list "(0x30)" (( "(") (number_literal "0x30") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(lVar3 + 8) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + 8) = 0" (pointer_expression "*(undefined4 *)(lVar3 + 8)" (* "*") (cast_expression "(undefined4 *)(lVar3 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 8)" (( "(") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar4 = lVar3 + 8;" (assignment_expression "lVar4 = lVar3 + 8" (identifier "lVar4") (= "=") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "*(undefined8 *)(lVar3 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x10) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x10)" (* "*") (cast_expression "(undefined8 *)(lVar3 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x10)" (( "(") (binary_expression "lVar3 + 0x10" (identifier "lVar3") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(lVar3 + 0x18) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x18) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x18)" (* "*") (cast_expression "(long *)(lVar3 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x18)" (( "(") (binary_expression "lVar3 + 0x18" (identifier "lVar3") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "*(long *)(lVar3 + 0x20) = lVar4;" (assignment_expression "*(long *)(lVar3 + 0x20) = lVar4" (pointer_expression "*(long *)(lVar3 + 0x20)" (* "*") (cast_expression "(long *)(lVar3 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x20)" (( "(") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "*(undefined8 *)(lVar3 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar3 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar3 + 0x28)" (* "*") (cast_expression "(undefined8 *)(lVar3 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_2 < 2) {\n    return lVar3;\n  }" (if "if") (parenthesized_expression "(param_2 < 2)" (( "(") (binary_expression "param_2 < 2" (identifier "param_2") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    return lVar3;\n  }" ({ "{") (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}"))) (expression_statement "uVar10 = 1;" (assignment_expression "uVar10 = 1" (identifier "uVar10") (= "=") (number_literal "1")) (; ";")) (do_statement "do {\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }\n    uVar12 = (ulong)*puVar9;\n    if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }\n    lVar13 = uVar12 + param_3;\n    cVar2 = '\0';\n    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;\n    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);\n    if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }\n    if (lVar8 == -1) goto LAB_0024d3e0;\n    uVar6 = *(undefined8 *)(puVar9 + 2);\n    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }\n    lVar13 = *(long *)(lVar3 + 0x10);\n    lVar11 = lVar4;\n    lVar5 = lVar4;\n    if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }\n    uVar10 = uVar10 + 1;\n    *(long *)(lVar5 + 0x28) = lVar8;\n    puVar9 = puVar9 + 0x10;\n    *(undefined8 *)(lVar5 + 0x40) = uVar7;\n    *(undefined8 *)(lVar5 + 0x30) = uVar6;\n    *(undefined8 *)(lVar5 + 0x38) = local_68;\n    if (uVar10 == param_2) {\n      return lVar3;\n    }\n  }" ({ "{") (while_statement "while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" (while "while") (parenthesized_expression "((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)))" (( "(") (parenthesized_expression "(puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))" (( "(") (binary_expression "puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0)" (binary_expression "puVar9[1] != 1" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "1")) (|| "||") (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 2) != 0)" (( "(") (binary_expression "(*(ulong *)(puVar9 + 2) & 2) != 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 2)" (( "(") (binary_expression "*(ulong *)(puVar9 + 2) & 2" (pointer_expression "*(ulong *)(puVar9 + 2)" (* "*") (cast_expression "(ulong *)(puVar9 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 2)" (( "(") (binary_expression "puVar9 + 2" (identifier "puVar9") (+ "+") (number_literal "2")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) () ")")) (compound_statement "{\nLAB_0024d3e0:\n      uVar10 = uVar10 + 1;\n      puVar9 = puVar9 + 0x10;\n      if (uVar10 == param_2) {\n        return lVar3;\n      }\n    }" ({ "{") (labeled_statement "LAB_0024d3e0:\n      uVar10 = uVar10 + 1;" (statement_identifier "LAB_0024d3e0") (: ":") (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" (identifier "uVar10") (= "=") (binary_expression "uVar10 + 1" (identifier "uVar10") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" (identifier "puVar9") (= "=") (binary_expression "puVar9 + 0x10" (identifier "puVar9") (+ "+") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar10 == param_2) {\n        return lVar3;\n      }" (if "if") (parenthesized_expression "(uVar10 == param_2)" (( "(") (binary_expression "uVar10 == param_2" (identifier "uVar10") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n        return lVar3;\n      }" ({ "{") (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar12 = (ulong)*puVar9;" (assignment_expression "uVar12 = (ulong)*puVar9" (identifier "uVar12") (= "=") (binary_expression "(ulong)*puVar9" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "puVar9"))) (; ";")) (if_statement "if (param_4 <= uVar12) {\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" (if "if") (parenthesized_expression "(param_4 <= uVar12)" (( "(") (binary_expression "param_4 <= uVar12" (identifier "param_4") (<= "<=") (identifier "uVar12")) () ")")) (compound_statement "{\n      uVar6 = gettext("bad section name offset for section %u: %lu");\n      FUN_00229f40(param_5,uVar6,uVar10,uVar12);\n      goto LAB_0024d3e0;\n    }" ({ "{") (expression_statement "uVar6 = gettext("bad section name offset for section %u: %lu");" (assignment_expression "uVar6 = gettext("bad section name offset for section %u: %lu")" (identifier "uVar6") (= "=") (call_expression "gettext("bad section name offset for section %u: %lu")" (identifier "gettext") (argument_list "("bad section name offset for section %u: %lu")" (( "(") (string_literal ""bad section name offset for section %u: %lu"" (" """) (string_content "bad section name offset for section %u: %lu") (" """)) () ")")))) (; ";")) (expression_statement "FUN_00229f40(param_5,uVar6,uVar10,uVar12);" (call_expression "FUN_00229f40(param_5,uVar6,uVar10,uVar12)" (identifier "FUN_00229f40") (argument_list "(param_5,uVar6,uVar10,uVar12)" (( "(") (identifier "param_5") (, ",") (identifier "uVar6") (, ",") (identifier "uVar10") (, ",") (identifier "uVar12") () ")"))) (; ";")) (goto_statement "goto LAB_0024d3e0;" (goto "goto") (statement_identifier "LAB_0024d3e0") (; ";")) (} "}"))) (expression_statement "lVar13 = uVar12 + param_3;" (assignment_expression "lVar13 = uVar12 + param_3" (identifier "lVar13") (= "=") (binary_expression "uVar12 + param_3" (identifier "uVar12") (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "cVar2 = '\0';" (assignment_expression "cVar2 = '\0'" (identifier "cVar2") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (if_statement "if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))\n    goto LAB_0024d3e0;" (if "if") (parenthesized_expression "(((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))" (( "(") (binary_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" (parenthesized_expression "((*(ulong *)(puVar9 + 2) & 0x800) == 0)" (( "(") (binary_expression "(*(ulong *)(puVar9 + 2) & 0x800) == 0" (parenthesized_expression "(*(ulong *)(puVar9 + 2) & 0x800)" (( "(") (binary_expression "*(ulong *)(puVar9 + 2) & 0x800" (pointer_expression "*(ulong *)(puVar9 + 2)" (* "*") (cast_expression "(ulong *)(puVar9 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 2)" (( "(") (binary_expression "puVar9 + 2" (identifier "puVar9") (+ "+") (number_literal "2")) () ")")))) (& "&") (number_literal "0x800")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(cVar2 = FUN_00212270(lVar13), cVar2 == '\0')" (( "(") (comma_expression "cVar2 = FUN_00212270(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00212270(lVar13)" (identifier "cVar2") (= "=") (call_expression "FUN_00212270(lVar13)" (identifier "FUN_00212270") (argument_list "(lVar13)" (( "(") (identifier "lVar13") () ")")))) (, ",") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")"))) () ")")) (goto_statement "goto LAB_0024d3e0;" (goto "goto") (statement_identifier "LAB_0024d3e0") (; ";"))) (expression_statement "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);" (assignment_expression "lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" (identifier "lVar5") (= "=") (call_expression "(**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0)" (parenthesized_expression "(**(code **)(*param_5 + 0x70))" (( "(") (pointer_expression "**(code **)(*param_5 + 0x70)" (* "*") (pointer_expression "*(code **)(*param_5 + 0x70)" (* "*") (cast_expression "(code **)(*param_5 + 0x70)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_5 + 0x70)" (( "(") (binary_expression "*param_5 + 0x70" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (+ "+") (number_literal "0x70")) () ")"))))) () ")")) (argument_list "(param_5,uVar10,local_40,0)" (( "(") (identifier "param_5") (, ",") (identifier "uVar10") (, ",") (identifier "local_40") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }\n    else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      lVar13 = lVar13 + 6;\n      lVar8 = *(long *)(lVar5 + 8);\n      local_68 = *(undefined8 *)(lVar5 + 0x10);\n    }" ({ "{") (expression_statement "lVar13 = lVar13 + 6;" (assignment_expression "lVar13 = lVar13 + 6" (identifier "lVar13") (= "=") (binary_expression "lVar13 + 6" (identifier "lVar13") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "lVar8 = *(long *)(lVar5 + 8);" (assignment_expression "lVar8 = *(long *)(lVar5 + 8)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(lVar5 + 8)" (* "*") (cast_expression "(long *)(lVar5 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "local_68 = *(undefined8 *)(lVar5 + 0x10);" (assignment_expression "local_68 = *(undefined8 *)(lVar5 + 0x10)" (identifier "local_68") (= "=") (pointer_expression "*(undefined8 *)(lVar5 + 0x10)" (* "*") (cast_expression "(undefined8 *)(lVar5 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" (else "else") (compound_statement "{\n      lVar13 = lVar13 + 7;\n      lVar8 = FUN_002fedb0(lVar5,local_40[0]);\n      local_68 = *(undefined8 *)(puVar9 + 0xc);\n    }" ({ "{") (expression_statement "lVar13 = lVar13 + 7;" (assignment_expression "lVar13 = lVar13 + 7" (identifier "lVar13") (= "=") (binary_expression "lVar13 + 7" (identifier "lVar13") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "lVar8 = FUN_002fedb0(lVar5,local_40[0]);" (assignment_expression "lVar8 = FUN_002fedb0(lVar5,local_40[0])" (identifier "lVar8") (= "=") (call_expression "FUN_002fedb0(lVar5,local_40[0])" (identifier "FUN_002fedb0") (argument_list "(lVar5,local_40[0])" (( "(") (identifier "lVar5") (, ",") (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) () ")")))) (; ";")) (expression_statement "local_68 = *(undefined8 *)(puVar9 + 0xc);" (assignment_expression "local_68 = *(undefined8 *)(puVar9 + 0xc)" (identifier "local_68") (= "=") (pointer_expression "*(undefined8 *)(puVar9 + 0xc)" (* "*") (cast_expression "(undefined8 *)(puVar9 + 0xc)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 0xc)" (( "(") (binary_expression "puVar9 + 0xc" (identifier "puVar9") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (lVar8 == -1) goto LAB_0024d3e0;" (if "if") (parenthesized_expression "(lVar8 == -1)" (( "(") (binary_expression "lVar8 == -1" (identifier "lVar8") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_0024d3e0;" (goto "goto") (statement_identifier "LAB_0024d3e0") (; ";"))) (expression_statement "uVar6 = *(undefined8 *)(puVar9 + 2);" (assignment_expression "uVar6 = *(undefined8 *)(puVar9 + 2)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined8 *)(puVar9 + 2)" (* "*") (cast_expression "(undefined8 *)(puVar9 + 2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 2)" (( "(") (binary_expression "puVar9 + 2" (identifier "puVar9") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (if_statement "if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {\nLAB_0024d467:\n      uVar7 = 0;\n    }\n    else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" (if "if") (parenthesized_expression "((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'))" (( "(") (binary_expression "(param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" (parenthesized_expression "(param_6 == '\0')" (( "(") (binary_expression "param_6 == '\0'" (identifier "param_6") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')" (( "(") (comma_expression "cVar2 = FUN_00229b60(lVar13), cVar2 == '\0'" (assignment_expression "cVar2 = FUN_00229b60(lVar13)" (identifier "cVar2") (= "=") (call_expression "FUN_00229b60(lVar13)" (identifier "FUN_00229b60") (argument_list "(lVar13)" (( "(") (identifier "lVar13") () ")")))) (, ",") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")"))) () ")")) (compound_statement "{\nLAB_0024d467:\n      uVar7 = 0;\n    }" ({ "{") (labeled_statement "LAB_0024d467:\n      uVar7 = 0;" (statement_identifier "LAB_0024d467") (: ":") (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";"))) (} "}")) (else_clause "else {\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" (else "else") (compound_statement "{\n      uVar7 = thunk_FUN_00337280(lVar8);\n      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));\n      if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }\n    }" ({ "{") (expression_statement "uVar7 = thunk_FUN_00337280(lVar8);" (assignment_expression "uVar7 = thunk_FUN_00337280(lVar8)" (identifier "uVar7") (= "=") (call_expression "thunk_FUN_00337280(lVar8)" (identifier "thunk_FUN_00337280") (argument_list "(lVar8)" (( "(") (identifier "lVar8") () ")")))) (; ";")) (expression_statement "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));" (assignment_expression "cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" (identifier "cVar2") (= "=") (call_expression "FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" (identifier "FUN_002fedf0") (argument_list "(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2))" (( "(") (identifier "lVar5") (, ",") (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (, ",") (identifier "uVar7") (, ",") (identifier "lVar8") (, ",") (number_literal "0x40") (, ",") (number_literal "0") (, ",") (pointer_expression "*(undefined8 *)(puVar9 + 2)" (* "*") (cast_expression "(undefined8 *)(puVar9 + 2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 2)" (( "(") (binary_expression "puVar9 + 2" (identifier "puVar9") (+ "+") (number_literal "2")) () ")")))) () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') {\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        thunk_FUN_00338a50(uVar7);\n        goto LAB_0024d467;\n      }" ({ "{") (expression_statement "thunk_FUN_00338a50(uVar7);" (call_expression "thunk_FUN_00338a50(uVar7)" (identifier "thunk_FUN_00338a50") (argument_list "(uVar7)" (( "(") (identifier "uVar7") () ")"))) (; ";")) (goto_statement "goto LAB_0024d467;" (goto "goto") (statement_identifier "LAB_0024d467") (; ";")) (} "}"))) (} "}")))) (expression_statement "lVar13 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar3 + 0x10)" (identifier "lVar13") (= "=") (pointer_expression "*(long *)(lVar3 + 0x10)" (* "*") (cast_expression "(long *)(lVar3 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x10)" (( "(") (binary_expression "lVar3 + 0x10" (identifier "lVar3") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "lVar11 = lVar4;" (assignment_expression "lVar11 = lVar4" (identifier "lVar11") (= "=") (identifier "lVar4")) (; ";")) (expression_statement "lVar5 = lVar4;" (assignment_expression "lVar5 = lVar4" (identifier "lVar5") (= "=") (identifier "lVar4")) (; ";")) (if_statement "if (*(long *)(lVar3 + 0x10) == 0) {\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }\n    else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" (if "if") (parenthesized_expression "(*(long *)(lVar3 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(lVar3 + 0x10) == 0" (pointer_expression "*(long *)(lVar3 + 0x10)" (* "*") (cast_expression "(long *)(lVar3 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x10)" (( "(") (binary_expression "lVar3 + 0x10" (identifier "lVar3") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);\n      *(uint *)(lVar13 + 0x20) = uVar10;\n      *(undefined8 *)(lVar13 + 0x28) = 0;\n      *(undefined8 *)(lVar13 + 0x30) = 0;\n      *(undefined8 *)(lVar13 + 0x38) = 0;\n      *(undefined8 *)(lVar13 + 0x40) = 0;\n      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);\n      lVar11 = auVar15._8_8_;\n      lVar5 = auVar15._0_8_;\n      if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }\n    }" ({ "{") (labeled_statement "LAB_0024d4ab:\n      lVar13 = FUN_00337280(0x48);" (statement_identifier "LAB_0024d4ab") (: ":") (expression_statement "lVar13 = FUN_00337280(0x48);" (assignment_expression "lVar13 = FUN_00337280(0x48)" (identifier "lVar13") (= "=") (call_expression "FUN_00337280(0x48)" (identifier "FUN_00337280") (argument_list "(0x48)" (( "(") (number_literal "0x48") () ")")))) (; ";"))) (expression_statement "*(uint *)(lVar13 + 0x20) = uVar10;" (assignment_expression "*(uint *)(lVar13 + 0x20) = uVar10" (pointer_expression "*(uint *)(lVar13 + 0x20)" (* "*") (cast_expression "(uint *)(lVar13 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x20)" (( "(") (binary_expression "lVar13 + 0x20" (identifier "lVar13") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "*(undefined8 *)(lVar13 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x28)" (* "*") (cast_expression "(undefined8 *)(lVar13 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x28)" (( "(") (binary_expression "lVar13 + 0x28" (identifier "lVar13") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(lVar13 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar13 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x30)" (( "(") (binary_expression "lVar13 + 0x30" (identifier "lVar13") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(lVar13 + 0x38) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x38) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x38)" (* "*") (cast_expression "(undefined8 *)(lVar13 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x38)" (( "(") (binary_expression "lVar13 + 0x38" (identifier "lVar13") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(lVar13 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(lVar13 + 0x40) = 0" (pointer_expression "*(undefined8 *)(lVar13 + 0x40)" (* "*") (cast_expression "(undefined8 *)(lVar13 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x40)" (( "(") (binary_expression "lVar13 + 0x40" (identifier "lVar13") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);" (assignment_expression "auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" (identifier "auVar15") (= "=") (call_expression "FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20)" (identifier "FUN_0024ce40") (argument_list "(lVar3,lVar5,lVar13 + 0x20)" (( "(") (identifier "lVar3") (, ",") (identifier "lVar5") (, ",") (binary_expression "lVar13 + 0x20" (identifier "lVar13") (+ "+") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "lVar11 = auVar15._8_8_;" (assignment_expression "lVar11 = auVar15._8_8_" (identifier "lVar11") (= "=") (field_expression "auVar15._8_8_" (identifier "auVar15") (. ".") (field_identifier "_8_8_"))) (; ";")) (expression_statement "lVar5 = auVar15._0_8_;" (assignment_expression "lVar5 = auVar15._0_8_" (identifier "lVar5") (= "=") (field_expression "auVar15._0_8_" (identifier "auVar15") (. ".") (field_identifier "_0_8_"))) (; ";")) (if_statement "if (lVar11 == 0) {\n        FUN_00338a50(lVar13);\n      }\n      else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" (if "if") (parenthesized_expression "(lVar11 == 0)" (( "(") (binary_expression "lVar11 == 0" (identifier "lVar11") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00338a50(lVar13);\n      }" ({ "{") (expression_statement "FUN_00338a50(lVar13);" (call_expression "FUN_00338a50(lVar13)" (identifier "FUN_00338a50") (argument_list "(lVar13)" (( "(") (identifier "lVar13") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" (else "else") (compound_statement "{\n        if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }\n        FUN_00339f50(bVar14,lVar13);\n        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;\n        lVar5 = lVar13;\n      }" ({ "{") (if_statement "if ((lVar5 == 0) && (lVar4 != lVar11)) {\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }\n        else {\n          bVar14 = true;\n        }" (if "if") (parenthesized_expression "((lVar5 == 0) && (lVar4 != lVar11))" (( "(") (binary_expression "(lVar5 == 0) && (lVar4 != lVar11)" (parenthesized_expression "(lVar5 == 0)" (( "(") (binary_expression "lVar5 == 0" (identifier "lVar5") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar4 != lVar11)" (( "(") (binary_expression "lVar4 != lVar11" (identifier "lVar4") (!= "!=") (identifier "lVar11")) () ")"))) () ")")) (compound_statement "{\n          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);\n        }" ({ "{") (expression_statement "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);" (assignment_expression "bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" (identifier "bVar14") (= "=") (binary_expression "*(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20)" (pointer_expression "*(uint *)(lVar13 + 0x20)" (* "*") (cast_expression "(uint *)(lVar13 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + 0x20)" (( "(") (binary_expression "lVar13 + 0x20" (identifier "lVar13") (+ "+") (number_literal "0x20")) () ")")))) (< "<") (pointer_expression "*(uint *)(lVar11 + 0x20)" (* "*") (cast_expression "(uint *)(lVar11 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x20)" (( "(") (binary_expression "lVar11 + 0x20" (identifier "lVar11") (+ "+") (number_literal "0x20")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n          bVar14 = true;\n        }" (else "else") (compound_statement "{\n          bVar14 = true;\n        }" ({ "{") (expression_statement "bVar14 = true;" (assignment_expression "bVar14 = true" (identifier "bVar14") (= "=") (true "true")) (; ";")) (} "}")))) (expression_statement "FUN_00339f50(bVar14,lVar13);" (call_expression "FUN_00339f50(bVar14,lVar13)" (identifier "FUN_00339f50") (argument_list "(bVar14,lVar13)" (( "(") (identifier "bVar14") (, ",") (identifier "lVar13") () ")"))) (; ";")) (expression_statement "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;" (assignment_expression "*(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" (* "*") (cast_expression "(long *)(lVar3 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (binary_expression "*(long *)(lVar3 + 0x28) + 1" (pointer_expression "*(long *)(lVar3 + 0x28)" (* "*") (cast_expression "(long *)(lVar3 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar5 = lVar13;" (assignment_expression "lVar5 = lVar13" (identifier "lVar5") (= "=") (identifier "lVar13")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" (else "else") (compound_statement "{\n      do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);\nLAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;\n    }" ({ "{") (do_statement "do {\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      } while (*plVar1 != 0);" (do "do") (compound_statement "{\n        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }\n        plVar1 = (long *)(lVar5 + 0x18);\n        lVar13 = *plVar1;\n        lVar5 = lVar11;\n      }" ({ "{") (while_statement "while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" (while "while") (parenthesized_expression "(lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20))" (( "(") (comma_expression "lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)" (assignment_expression "lVar5 = lVar13" (identifier "lVar5") (= "=") (identifier "lVar13")) (, ",") (binary_expression "uVar10 <= *(uint *)(lVar5 + 0x20)" (identifier "uVar10") (<= "<=") (pointer_expression "*(uint *)(lVar5 + 0x20)" (* "*") (cast_expression "(uint *)(lVar5 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")")))))) () ")")) (compound_statement "{\n          lVar13 = *(long *)(lVar5 + 0x10);\n          lVar11 = lVar5;\n          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;\n        }" ({ "{") (expression_statement "lVar13 = *(long *)(lVar5 + 0x10);" (assignment_expression "lVar13 = *(long *)(lVar5 + 0x10)" (identifier "lVar13") (= "=") (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "lVar11 = lVar5;" (assignment_expression "lVar11 = lVar5" (identifier "lVar11") (= "=") (identifier "lVar5")) (; ";")) (if_statement "if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;" (if "if") (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0024d49a;" (goto "goto") (statement_identifier "LAB_0024d49a") (; ";"))) (} "}"))) (expression_statement "plVar1 = (long *)(lVar5 + 0x18);" (assignment_expression "plVar1 = (long *)(lVar5 + 0x18)" (identifier "plVar1") (= "=") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "lVar13 = *plVar1;" (assignment_expression "lVar13 = *plVar1" (identifier "lVar13") (= "=") (pointer_expression "*plVar1" (* "*") (identifier "plVar1"))) (; ";")) (expression_statement "lVar5 = lVar11;" (assignment_expression "lVar5 = lVar11" (identifier "lVar5") (= "=") (identifier "lVar11")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*plVar1 != 0)" (( "(") (binary_expression "*plVar1 != 0" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_0024d49a:\n      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" (statement_identifier "LAB_0024d49a") (: ":") (if_statement "if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;" (if "if") (parenthesized_expression "((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20)))" (( "(") (binary_expression "(lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))" (parenthesized_expression "(lVar4 == lVar5)" (( "(") (binary_expression "lVar4 == lVar5" (identifier "lVar4") (== "==") (identifier "lVar5")) () ")")) (|| "||") (parenthesized_expression "(uVar10 < *(uint *)(lVar5 + 0x20))" (( "(") (binary_expression "uVar10 < *(uint *)(lVar5 + 0x20)" (identifier "uVar10") (< "<") (pointer_expression "*(uint *)(lVar5 + 0x20)" (* "*") (cast_expression "(uint *)(lVar5 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) () ")")) (goto_statement "goto LAB_0024d4ab;" (goto "goto") (statement_identifier "LAB_0024d4ab") (; ";")))) (} "}")))) (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" (identifier "uVar10") (= "=") (binary_expression "uVar10 + 1" (identifier "uVar10") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(long *)(lVar5 + 0x28) = lVar8;" (assignment_expression "*(long *)(lVar5 + 0x28) = lVar8" (pointer_expression "*(long *)(lVar5 + 0x28)" (* "*") (cast_expression "(long *)(lVar5 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x28)" (( "(") (binary_expression "lVar5 + 0x28" (identifier "lVar5") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "lVar8")) (; ";")) (expression_statement "puVar9 = puVar9 + 0x10;" (assignment_expression "puVar9 = puVar9 + 0x10" (identifier "puVar9") (= "=") (binary_expression "puVar9 + 0x10" (identifier "puVar9") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "*(undefined8 *)(lVar5 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(lVar5 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(lVar5 + 0x40)" (* "*") (cast_expression "(undefined8 *)(lVar5 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x40)" (( "(") (binary_expression "lVar5 + 0x40" (identifier "lVar5") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "*(undefined8 *)(lVar5 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(lVar5 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(lVar5 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar5 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x30)" (( "(") (binary_expression "lVar5 + 0x30" (identifier "lVar5") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(undefined8 *)(lVar5 + 0x38) = local_68;" (assignment_expression "*(undefined8 *)(lVar5 + 0x38) = local_68" (pointer_expression "*(undefined8 *)(lVar5 + 0x38)" (* "*") (cast_expression "(undefined8 *)(lVar5 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x38)" (( "(") (binary_expression "lVar5 + 0x38" (identifier "lVar5") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "local_68")) (; ";")) (if_statement "if (uVar10 == param_2) {\n      return lVar3;\n    }" (if "if") (parenthesized_expression "(uVar10 == param_2)" (( "(") (binary_expression "uVar10 == param_2" (identifier "uVar10") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n      return lVar3;\n    }" ({ "{") (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* DWARF original name: build_compressed_section_map<64, false> */

type_11 *
gold::build_compressed_section_map<64,_false>
          (type_6 *var_4,type_7 var_6,char *var_14,type_10 var_10,Object *obj,
          bool decompress_if_needed)

{
  type_1 *pp_Var1;
  size_t *psVar2;
  type_1 p_Var3;
  type_1 var_26;
  int iVar5;
  _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::var_1>,_std::_Select1st<std::pair<unsigned_int_const,_gold::var_1>var_2>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::var_1>var_2>var_2>
  *this;
  type_2 *var_31;
  type_3 extraout_var;
  type_4 *var_27;
  type_5 __position;
  type_6 *uncompressed_data;
  type_1 var_21;
  type_4 *var_29;
  type_7 *var_7;
  type_8 var_8;
  type_1 p_Var11;
  type_9 var_11;
  char *var_18;
  bool var_17;
  pair<std::type_4*,_std::type_4*> var_3;
  type_1 local_68;
  type_10 len;
  type_6 *var_19;
  
  var_7 = (type_7 *)(var_4 + 0x40);
  this = (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::var_1>,_std::_Select1st<std::pair<unsigned_int_const,_gold::var_1>var_2>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::var_1>var_2>var_2>
          *)var_5(0x30);
  (this->_M_impl).super__Rb_tree_header._M_header._M_color = _S_red;
  var_31 = &(this->_M_impl).super__Rb_tree_header;
  (this->_M_impl).super__Rb_tree_header._M_header._M_parent = (type_1)0x0;
  (this->_M_impl).super__Rb_tree_header._M_header._M_left = &var_31->_M_header;
  (this->_M_impl).super__Rb_tree_header._M_header._M_right = &var_31->_M_header;
  (this->_M_impl).super__Rb_tree_header._M_node_count = 0;
  if (var_6 < 2) {
    return (type_11 *)this;
  }
  var_8 = var_9;
  do {
    while ((var_7[1] != 1 || ((*(type_9 *)(var_7 + 2) & 2) != 0))) {
LAB_0024d3e0:
      var_8 = var_8 + var_9;
      var_7 = var_7 + 0x10;
      if (var_8 == var_6) {
        return (type_11 *)this;
      }
    }
    var_11 = (type_9)*var_7;
    if (var_10 <= var_11) {
      var_18 = (char *)var_12("bad section name offset for section %u: %lu");
      Object::var_13(obj,var_18,(type_9)var_8,var_11);
      goto LAB_0024d3e0;
    }
    var_18 = var_14 + var_11;
    var_17 = false;
    if (((*(type_9 *)(var_7 + 2) & 0x800) == 0) &&
       (var_17 = var_15(var_18), !var_17)) goto LAB_0024d3e0;
    iVar5 = (*obj->_vptr_Object[0xe])(obj,(type_9)var_8,&len,0);
    var_19 = (type_6 *)var_16(extraout_var,iVar5);
    if (var_17 == false) {
      var_18 = var_18 + 6;
      var_21 = *(type_1 *)(var_19 + 8);
      local_68 = *(type_1 *)(var_19 + 0x10);
    }
    else {
      var_18 = var_18 + 7;
      var_21 = (type_1)var_20(var_19,len);
      local_68 = *(type_1 *)(var_7 + 0xc);
    }
    if (var_21 == (type_1)0xffffffffffffffff) goto LAB_0024d3e0;
    p_Var3 = *(type_1 *)(var_7 + 2);
    if ((decompress_if_needed) && (var_17 = var_22(var_18), var_17)) {
      uncompressed_data = (type_6 *)var_23((type_9)var_21);
      var_17 = var_24
                         (var_19,len,uncompressed_data,(type_9)var_21,0x40,false,
                          *(type_12 *)(var_7 + 2));
      if (!var_17) {
        var_25(uncompressed_data);
        goto LAB_0024d467;
      }
    }
    else {
LAB_0024d467:
      uncompressed_data = (type_6 *)0x0;
    }
    var_26 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;
    p_Var11 = &var_31->_M_header;
    __position._M_node = &var_31->_M_header;
    if (var_26 == (type_1)0x0) {
LAB_0024d4ab:
      var_27 = (type_4 *)var_5(0x48);
      var_27[1]._M_color = var_8;
      var_27[1]._M_parent = (type_1)0x0;
      var_27[1]._M_left = (type_1)0x0;
      var_27[1]._M_right = (type_1)0x0;
      *(type_13 *)(var_27 + 2) = 0;
      var_3 = std::
               _Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::var_1>,_std::_Select1st<std::pair<unsigned_int_const,_gold::var_1>var_2>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::var_1>var_2>var_2>
               ::var_28(this,__position,&var_27[1]._M_color);
      var_29 = var_3.second;
      __position._M_node = var_3.first;
      if (var_29 == (type_4 *)0x0) {
        var_30(var_27);
      }
      else {
        if ((__position._M_node == (type_1)0x0) && (var_31 != (type_2 *)var_29)) {
          var_17 = var_27[1]._M_color < var_29[1]._M_color;
        }
        else {
          var_17 = true;
        }
        std::var_32(var_17,var_27,var_29,&var_31->_M_header);
        psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;
        *psVar2 = *psVar2 + 1;
        __position._M_node = var_27;
      }
    }
    else {
      do {
        while (__position._M_node = var_26, var_8 <= __position._M_node[1]._M_color) {
          var_26 = (__position._M_node)->_M_left;
          p_Var11 = __position._M_node;
          if ((__position._M_node)->_M_left == (type_1)0x0) goto LAB_0024d49a;
        }
        pp_Var1 = &(__position._M_node)->_M_right;
        var_26 = *pp_Var1;
        __position._M_node = p_Var11;
      } while (*pp_Var1 != (type_1)0x0);
LAB_0024d49a:
      if ((var_31 == (type_2 *)__position._M_node) ||
         (var_8 < __position._M_node[1]._M_color)) goto LAB_0024d4ab;
    }
    var_8 = var_8 + var_9;
    __position._M_node[1]._M_parent = var_21;
    var_7 = var_7 + 0x10;
    *(type_6 **)(__position._M_node + 2) = uncompressed_data;
    __position._M_node[1]._M_left = p_Var3;
    __position._M_node[1]._M_right = local_68;
    if (var_8 == var_6) {
      return (type_11 *)this;
    }
  } while( true );
}


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

long MASKED(long param_1,uint param_2,long param_3,ulong param_4,long *param_5,char param_6)

{
  long *plVar1;
  char cVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  long lVar8;
  uint *puVar9;
  uint uVar10;
  long lVar11;
  ulong uVar12;
  long lVar13;
  bool bVar14;
  undefined1 auVar15 [16];
  undefined8 local_68;
  undefined8 local_40 [2];
  
  puVar9 = (uint *)(param_1 + 0x40);
  lVar3 = FUN_00337280(0x30);
  *(undefined4 *)(lVar3 + 8) = 0;
  lVar4 = lVar3 + 8;
  *(undefined8 *)(lVar3 + 0x10) = 0;
  *(long *)(lVar3 + 0x18) = lVar4;
  *(long *)(lVar3 + 0x20) = lVar4;
  *(undefined8 *)(lVar3 + 0x28) = 0;
  if (param_2 < 2) {
    return lVar3;
  }
  uVar10 = 1;
  do {
    while ((puVar9[1] != 1 || ((*(ulong *)(puVar9 + 2) & 2) != 0))) {
LAB_0024d3e0:
      uVar10 = uVar10 + 1;
      puVar9 = puVar9 + 0x10;
      if (uVar10 == param_2) {
        return lVar3;
      }
    }
    uVar12 = (ulong)*puVar9;
    if (param_4 <= uVar12) {
      uVar6 = gettext("bad section name offset for section %u: %lu");
      FUN_00229f40(param_5,uVar6,uVar10,uVar12);
      goto LAB_0024d3e0;
    }
    lVar13 = uVar12 + param_3;
    cVar2 = '\0';
    if (((*(ulong *)(puVar9 + 2) & 0x800) == 0) && (cVar2 = FUN_00212270(lVar13), cVar2 == '\0'))
    goto LAB_0024d3e0;
    lVar5 = (**(code **)(*param_5 + 0x70))(param_5,uVar10,local_40,0);
    if (cVar2 == '\0') {
      lVar13 = lVar13 + 6;
      lVar8 = *(long *)(lVar5 + 8);
      local_68 = *(undefined8 *)(lVar5 + 0x10);
    }
    else {
      lVar13 = lVar13 + 7;
      lVar8 = FUN_002fedb0(lVar5,local_40[0]);
      local_68 = *(undefined8 *)(puVar9 + 0xc);
    }
    if (lVar8 == -1) goto LAB_0024d3e0;
    uVar6 = *(undefined8 *)(puVar9 + 2);
    if ((param_6 == '\0') || (cVar2 = FUN_00229b60(lVar13), cVar2 == '\0')) {
LAB_0024d467:
      uVar7 = 0;
    }
    else {
      uVar7 = thunk_FUN_00337280(lVar8);
      cVar2 = FUN_002fedf0(lVar5,local_40[0],uVar7,lVar8,0x40,0,*(undefined8 *)(puVar9 + 2));
      if (cVar2 == '\0') {
        thunk_FUN_00338a50(uVar7);
        goto LAB_0024d467;
      }
    }
    lVar13 = *(long *)(lVar3 + 0x10);
    lVar11 = lVar4;
    lVar5 = lVar4;
    if (*(long *)(lVar3 + 0x10) == 0) {
LAB_0024d4ab:
      lVar13 = FUN_00337280(0x48);
      *(uint *)(lVar13 + 0x20) = uVar10;
      *(undefined8 *)(lVar13 + 0x28) = 0;
      *(undefined8 *)(lVar13 + 0x30) = 0;
      *(undefined8 *)(lVar13 + 0x38) = 0;
      *(undefined8 *)(lVar13 + 0x40) = 0;
      auVar15 = FUN_0024ce40(lVar3,lVar5,lVar13 + 0x20);
      lVar11 = auVar15._8_8_;
      lVar5 = auVar15._0_8_;
      if (lVar11 == 0) {
        FUN_00338a50(lVar13);
      }
      else {
        if ((lVar5 == 0) && (lVar4 != lVar11)) {
          bVar14 = *(uint *)(lVar13 + 0x20) < *(uint *)(lVar11 + 0x20);
        }
        else {
          bVar14 = true;
        }
        FUN_00339f50(bVar14,lVar13);
        *(long *)(lVar3 + 0x28) = *(long *)(lVar3 + 0x28) + 1;
        lVar5 = lVar13;
      }
    }
    else {
      do {
        while (lVar5 = lVar13, uVar10 <= *(uint *)(lVar5 + 0x20)) {
          lVar13 = *(long *)(lVar5 + 0x10);
          lVar11 = lVar5;
          if (*(long *)(lVar5 + 0x10) == 0) goto LAB_0024d49a;
        }
        plVar1 = (long *)(lVar5 + 0x18);
        lVar13 = *plVar1;
        lVar5 = lVar11;
      } while (*plVar1 != 0);
LAB_0024d49a:
      if ((lVar4 == lVar5) || (uVar10 < *(uint *)(lVar5 + 0x20))) goto LAB_0024d4ab;
    }
    uVar10 = uVar10 + 1;
    *(long *)(lVar5 + 0x28) = lVar8;
    puVar9 = puVar9 + 0x10;
    *(undefined8 *)(lVar5 + 0x40) = uVar7;
    *(undefined8 *)(lVar5 + 0x30) = uVar6;
    *(undefined8 *)(lVar5 + 0x38) = local_68;
    if (uVar10 == param_2) {
      return lVar3;
    }
  } while( true );
}

