
/* DWARF original prototype: void make_verneed_map(Sized_dynobj<64,_false> * this, Read_symbols_data
   * sd, Version_map * version_map) */

void __thiscall
gold::Sized_dynobj<64,_false>::make_verneed_map
          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)

{
  uint uVar1;
  ulong uVar2;
  uchar *puVar3;
  ulong uVar4;
  ushort *puVar5;
  ulong uVar6;
  char *pcVar7;
  uint uVar8;
  ushort uVar9;
  long lVar10;
  uint uVar11;
  ushort *local_50;
  long local_48;
  uint local_40;
  
  if (sd->verneed == (File_view *)0x0) {
    return;
  }
  uVar2 = sd->verneed_size;
  puVar3 = sd->symbol_names->data_;
  uVar4 = sd->symbol_names_size;
  puVar5 = (ushort *)sd->verneed->data_;
  uVar1 = sd->verneed_info;
  if (uVar1 == 0) {
    return;
  }
  uVar9 = *puVar5;
  if (uVar9 == 1) {
    uVar6 = (ulong)*(uint *)(puVar5 + 4);
    if (uVar6 < uVar2) {
      local_40 = 0;
      local_48 = 0;
      local_50 = puVar5;
      do {
        uVar9 = local_50[1];
        lVar10 = (long)local_50 + uVar6;
        if (uVar9 != 0) {
          uVar8 = *(uint *)(lVar10 + 8);
          uVar6 = (ulong)uVar8;
          if (uVar4 <= uVar6) {
LAB_002aeb40:
            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");
            uVar6 = (ulong)uVar8;
            goto LAB_002aeaa8;
          }
          uVar11 = 0;
          while( true ) {
            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))
            ;
            uVar8 = *(uint *)(lVar10 + 0xc);
            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {
              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");
              uVar6 = (ulong)uVar8;
              goto LAB_002aeaa8;
            }
            uVar11 = uVar11 + 1;
            lVar10 = lVar10 + (ulong)uVar8;
            if (uVar9 == uVar11) break;
            uVar8 = *(uint *)(lVar10 + 8);
            uVar6 = (ulong)uVar8;
            if (uVar4 <= uVar6) goto LAB_002aeb40;
          }
        }
        uVar6 = (ulong)*(uint *)(local_50 + 6);
        if (uVar2 <= local_48 + uVar6) {
          pcVar7 = "verneed vn_next field out of range: %u";
          goto LAB_002aeb2f;
        }
        local_50 = (ushort *)((long)local_50 + uVar6);
        local_40 = local_40 + 1;
        if (uVar1 == local_40) {
          return;
        }
        uVar9 = *local_50;
        if (uVar9 != 1) goto LAB_002aeb71;
        uVar6 = (ulong)*(uint *)(local_50 + 4);
        local_48 = (long)local_50 - (long)puVar5;
      } while (local_48 + uVar6 < uVar2);
    }
    pcVar7 = "verneed vn_aux field out of range: %u";
LAB_002aeb2f:
    pcVar7 = (char *)gettext(pcVar7);
  }
  else {
LAB_002aeb71:
    pcVar7 = (char *)gettext("unexpected verneed version %u");
    uVar6 = (ulong)uVar9;
  }
LAB_002aeaa8:
  Object::error((Object *)this,pcVar7,uVar6);
  return;
}



void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)

{
  int iVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  ushort *puVar5;
  ulong uVar6;
  undefined8 uVar7;
  uint uVar8;
  char *pcVar9;
  ushort uVar10;
  long lVar11;
  uint uVar12;
  ushort *local_50;
  long local_48;
  int local_40;
  
  if (*(long *)(param_2 + 0x68) == 0) {
    return;
  }
  uVar2 = *(ulong *)(param_2 + 0x70);
  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);
  uVar4 = *(ulong *)(param_2 + 0x38);
  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);
  iVar1 = *(int *)(param_2 + 0x78);
  if (iVar1 == 0) {
    return;
  }
  uVar10 = *puVar5;
  if (uVar10 == 1) {
    uVar6 = (ulong)*(uint *)(puVar5 + 4);
    if (uVar6 < uVar2) {
      local_40 = 0;
      local_48 = 0;
      local_50 = puVar5;
      do {
        uVar10 = local_50[1];
        lVar11 = (long)local_50 + uVar6;
        if (uVar10 != 0) {
          uVar8 = *(uint *)(lVar11 + 8);
          uVar6 = (ulong)uVar8;
          if (uVar4 <= uVar6) {
LAB_002aeb40:
            uVar7 = gettext("vernaux vna_name field out of range: %u");
            uVar6 = (ulong)uVar8;
            goto LAB_002aeaa8;
          }
          uVar12 = 0;
          while( true ) {
            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);
            uVar8 = *(uint *)(lVar11 + 0xc);
            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {
              uVar7 = gettext("verneed vna_next field out of range: %u");
              uVar6 = (ulong)uVar8;
              goto LAB_002aeaa8;
            }
            uVar12 = uVar12 + 1;
            lVar11 = lVar11 + (ulong)uVar8;
            if (uVar10 == uVar12) break;
            uVar8 = *(uint *)(lVar11 + 8);
            uVar6 = (ulong)uVar8;
            if (uVar4 <= uVar6) goto LAB_002aeb40;
          }
        }
        uVar6 = (ulong)*(uint *)(local_50 + 6);
        if (uVar2 <= local_48 + uVar6) {
          pcVar9 = "verneed vn_next field out of range: %u";
          goto LAB_002aeb2f;
        }
        local_50 = (ushort *)((long)local_50 + uVar6);
        local_40 = local_40 + 1;
        if (iVar1 == local_40) {
          return;
        }
        uVar10 = *local_50;
        if (uVar10 != 1) goto LAB_002aeb71;
        uVar6 = (ulong)*(uint *)(local_50 + 4);
        local_48 = (long)local_50 - (long)puVar5;
      } while (local_48 + uVar6 < uVar2);
    }
    pcVar9 = "verneed vn_aux field out of range: %u";
LAB_002aeb2f:
    uVar7 = gettext(pcVar9);
  }
  else {
LAB_002aeb71:
    uVar7 = gettext("unexpected verneed version %u");
    uVar6 = (ulong)uVar10;
  }
LAB_002aeaa8:
  FUN_001cf7b0(param_1,uVar7,uVar6);
  return;
}


MOV RAX,qword ptr [RSI + 0x68]
TEST RAX,RAX
JZ 0x002aeb70
PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV RCX,qword ptr [RSI + 0x30]
MOV R12,qword ptr [RSI + 0x70]
MOV RBX,qword ptr [RCX + 0x10]
MOV qword ptr [RSP + 0x8],RBX
MOV RBX,qword ptr [RSI + 0x38]
MOV qword ptr [RSP],RBX
MOV RBX,qword ptr [RAX + 0x10]
MOV EAX,dword ptr [RSI + 0x78]
MOV dword ptr [RSP + 0x2c],EAX
TEST EAX,EAX
JZ 0x002aeb57
MOVZX R13D,word ptr [RBX]
MOV qword ptr [RSP + 0x10],RDX
MOV RBP,RDI
CMP R13W,0x1
JNZ 0x002aeb71
MOV EAX,dword ptr [RBX + 0x8]
MOV R13,RAX
CMP R12,RAX
JBE 0x002aeb28
MOV qword ptr [RSP + 0x18],RBX
MOV dword ptr [RSP + 0x28],0x0
MOV qword ptr [RSP + 0x20],0x0
MOV RDI,qword ptr [RSP + 0x18]
MOVZX R13D,word ptr [RDI + 0x2]
LEA R14,[RDI + RAX*0x1]
TEST R13D,R13D
JZ 0x002aeac8
MOV ECX,dword ptr [R14 + 0x8]
MOV RDX,RCX
CMP qword ptr [RSP],RCX
JBE 0x002aeb40
XOR R15D,R15D
MOV EAX,R15D
MOV R15D,R13D
MOV R13,R14
MOV R14D,EAX
JMP 0x002aea6d
ADD R14D,0x1
ADD R13,RSI
CMP R15D,R14D
JZ 0x002aeac8
MOV ECX,dword ptr [R13 + 0x8]
MOV RDX,RCX
CMP RCX,qword ptr [RSP]
JNC 0x002aeb40
MOV RSI,qword ptr [RSP + 0x10]
MOVZX EDX,word ptr [R13 + 0x6]
MOV RDI,RBP
ADD RCX,qword ptr [RSP + 0x8]
CALL 0x002ae710
MOV ESI,dword ptr [R13 + 0xc]
MOV RCX,R13
SUB RCX,RBX
ADD RCX,RSI
CMP RCX,R12
JC 0x002aea50
LEA RDI,[0x3a27b8]
MOV dword ptr [RSP],ESI
CALL 0x00149320
MOV EDX,dword ptr [RSP]
ADD RSP,0x38
MOV RSI,RAX
MOV RDI,RBP
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP 0x001cf7b0
MOV RAX,qword ptr [RSP + 0x18]
MOV RDX,qword ptr [RSP + 0x20]
MOV EAX,dword ptr [RAX + 0xc]
ADD RDX,RAX
MOV R13,RAX
CMP RDX,R12
JNC 0x002aeb86
ADD qword ptr [RSP + 0x18],RAX
ADD dword ptr [RSP + 0x28],0x1
MOV EAX,dword ptr [RSP + 0x28]
CMP dword ptr [RSP + 0x2c],EAX
JZ 0x002aeb57
MOV RAX,qword ptr [RSP + 0x18]
MOVZX R13D,word ptr [RAX]
CMP R13W,0x1
JNZ 0x002aeb71
MOV RDI,qword ptr [RSP + 0x18]
MOV EAX,dword ptr [RDI + 0x8]
SUB RDI,RBX
MOV qword ptr [RSP + 0x20],RDI
LEA RDX,[RDI + RAX*0x1]
MOV R13,RAX
CMP RDX,R12
JC 0x002aea13
LEA RDI,[0x3a2768]
CALL 0x00149320
MOV EDX,R13D
JMP 0x002aeaa8
LEA RDI,[0x3a2790]
MOV dword ptr [RSP],EDX
CALL 0x00149320
MOV EDX,dword ptr [RSP]
JMP 0x002aeaa8
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
RET
LEA RDI,[0x3a2743]
CALL 0x00149320
MOVZX EDX,R13W
JMP 0x002aeaa8
LEA RDI,[0x3a27e0]
JMP 0x002aeb2f
(translation_unit "void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}\n\n" (function_definition "void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" primitive_type (function_declarator "FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ushort *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "ushort uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "ushort *local_50;" type_identifier (pointer_declarator "*local_50" * identifier) ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_40;" primitive_type identifier ;) (if_statement "if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }" if (parenthesized_expression "(*(long *)(param_2 + 0x68) == 0)" ( (binary_expression "*(long *)(param_2 + 0x68) == 0" (pointer_expression "*(long *)(param_2 + 0x68)" * (cast_expression "(long *)(param_2 + 0x68)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = *(ulong *)(param_2 + 0x70);" (assignment_expression "uVar2 = *(ulong *)(param_2 + 0x70)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x70)" * (cast_expression "(ulong *)(param_2 + 0x70)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x70)" ( (binary_expression "param_2 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);" (assignment_expression "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10)" identifier = (pointer_expression "*(long *)(*(long *)(param_2 + 0x30) + 0x10)" * (cast_expression "(long *)(*(long *)(param_2 + 0x30) + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0x30) + 0x10)" ( (binary_expression "*(long *)(param_2 + 0x30) + 0x10" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x38);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x38)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x38)" * (cast_expression "(ulong *)(param_2 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);" (assignment_expression "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" identifier = (pointer_expression "*(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" * (cast_expression "(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_2 + 0x68) + 0x10)" ( (binary_expression "*(long *)(param_2 + 0x68) + 0x10" (pointer_expression "*(long *)(param_2 + 0x68)" * (cast_expression "(long *)(param_2 + 0x68)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_2 + 0x78);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x78)" identifier = (pointer_expression "*(int *)(param_2 + 0x78)" * (cast_expression "(int *)(param_2 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x78)" ( (binary_expression "param_2 + 0x78" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\n    return;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar10 = *puVar5;" (assignment_expression "uVar10 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (if_statement "if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" if (parenthesized_expression "(uVar10 == 1)" ( (binary_expression "uVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }" { (expression_statement "uVar6 = (ulong)*(uint *)(puVar5 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(puVar5 + 4)" identifier = (binary_expression "(ulong)*(uint *)(puVar5 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(puVar5 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" if (parenthesized_expression "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )) (compound_statement "{\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_50 = puVar5;" (assignment_expression "local_50 = puVar5" identifier = identifier) ;) (do_statement "do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);" do (compound_statement "{\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      }" { (expression_statement "uVar10 = local_50[1];" (assignment_expression "uVar10 = local_50[1]" identifier = (subscript_expression "local_50[1]" identifier [ number_literal ])) ;) (expression_statement "lVar11 = (long)local_50 + uVar6;" (assignment_expression "lVar11 = (long)local_50 + uVar6" identifier = (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (if_statement "if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" { (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" identifier = (pointer_expression "*(uint *)(lVar11 + 8)" * (cast_expression "(uint *)(lVar11 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (compound_statement "{\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" { (labeled_statement "LAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");" statement_identifier : (expression_statement "uVar7 = gettext("vernaux vna_name field out of range: %u");" (assignment_expression "uVar7 = gettext("vernaux vna_name field out of range: %u")" identifier = (call_expression "gettext("vernaux vna_name field out of range: %u")" identifier (argument_list "("vernaux vna_name field out of range: %u")" ( (string_literal ""vernaux vna_name field out of range: %u"" " string_content ") )))) ;)) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" { (expression_statement "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);" (call_expression "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" identifier (argument_list "(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" ( identifier , identifier , (pointer_expression "*(undefined2 *)(lVar11 + 6)" * (cast_expression "(undefined2 *)(lVar11 + 6)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 6)" ( (binary_expression "lVar11 + 6" identifier + number_literal) )))) , (binary_expression "uVar6 + lVar3" identifier + identifier) ))) ;) (expression_statement "uVar8 = *(uint *)(lVar11 + 0xc);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 0xc)" identifier = (pointer_expression "*(uint *)(lVar11 + 0xc)" * (cast_expression "(uint *)(lVar11 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xc)" ( (binary_expression "lVar11 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" if (parenthesized_expression "(uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8)" ( (binary_expression "uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8" identifier <= (binary_expression "(lVar11 - (long)puVar5) + (ulong)uVar8" (parenthesized_expression "(lVar11 - (long)puVar5)" ( (binary_expression "lVar11 - (long)puVar5" identifier - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) )) (compound_statement "{\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" { (expression_statement "uVar7 = gettext("verneed vna_next field out of range: %u");" (assignment_expression "uVar7 = gettext("verneed vna_next field out of range: %u")" identifier = (call_expression "gettext("verneed vna_next field out of range: %u")" identifier (argument_list "("verneed vna_next field out of range: %u")" ( (string_literal ""verneed vna_next field out of range: %u"" " string_content ") )))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "lVar11 = lVar11 + (ulong)uVar8;" (assignment_expression "lVar11 = lVar11 + (ulong)uVar8" identifier = (binary_expression "lVar11 + (ulong)uVar8" identifier + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar10 == uVar12) break;" if (parenthesized_expression "(uVar10 == uVar12)" ( (binary_expression "uVar10 == uVar12" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" identifier = (pointer_expression "*(uint *)(lVar11 + 8)" * (cast_expression "(uint *)(lVar11 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) goto LAB_002aeb40;" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (goto_statement "goto LAB_002aeb40;" goto statement_identifier ;)) })) })) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 6);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 6)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 6)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 6)" ( (binary_expression "local_50 + 6" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" if (parenthesized_expression "(uVar2 <= local_48 + uVar6)" ( (binary_expression "uVar2 <= local_48 + uVar6" identifier <= (binary_expression "local_48 + uVar6" identifier + identifier)) )) (compound_statement "{\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" { (expression_statement "pcVar9 = "verneed vn_next field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_next field out of range: %u"" identifier = (string_literal ""verneed vn_next field out of range: %u"" " string_content ")) ;) (goto_statement "goto LAB_002aeb2f;" goto statement_identifier ;) })) (expression_statement "local_50 = (ushort *)((long)local_50 + uVar6);" (assignment_expression "local_50 = (ushort *)((long)local_50 + uVar6)" identifier = (cast_expression "(ushort *)((long)local_50 + uVar6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_50 + uVar6)" ( (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 == local_40) {\n          return;\n        }" if (parenthesized_expression "(iVar1 == local_40)" ( (binary_expression "iVar1 == local_40" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (expression_statement "uVar10 = *local_50;" (assignment_expression "uVar10 = *local_50" identifier = (pointer_expression "*local_50" * identifier)) ;) (if_statement "if (uVar10 != 1) goto LAB_002aeb71;" if (parenthesized_expression "(uVar10 != 1)" ( (binary_expression "uVar10 != 1" identifier != number_literal) )) (goto_statement "goto LAB_002aeb71;" goto statement_identifier ;)) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 4)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 4)" ( (binary_expression "local_50 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_48 = (long)local_50 - (long)puVar5;" (assignment_expression "local_48 = (long)local_50 - (long)puVar5" identifier = (binary_expression "(long)local_50 - (long)puVar5" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(local_48 + uVar6 < uVar2)" ( (binary_expression "local_48 + uVar6 < uVar2" (binary_expression "local_48 + uVar6" identifier + identifier) < identifier) )) ;) })) (expression_statement "pcVar9 = "verneed vn_aux field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_aux field out of range: %u"" identifier = (string_literal ""verneed vn_aux field out of range: %u"" " string_content ")) ;) (labeled_statement "LAB_002aeb2f:\n    uVar7 = gettext(pcVar9);" statement_identifier : (expression_statement "uVar7 = gettext(pcVar9);" (assignment_expression "uVar7 = gettext(pcVar9)" identifier = (call_expression "gettext(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier )))) ;)) }) (else_clause "else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" else (compound_statement "{\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" { (labeled_statement "LAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");" statement_identifier : (expression_statement "uVar7 = gettext("unexpected verneed version %u");" (assignment_expression "uVar7 = gettext("unexpected verneed version %u")" identifier = (call_expression "gettext("unexpected verneed version %u")" identifier (argument_list "("unexpected verneed version %u")" ( (string_literal ""unexpected verneed version %u"" " string_content ") )))) ;)) (expression_statement "uVar6 = (ulong)uVar10;" (assignment_expression "uVar6 = (ulong)uVar10" identifier = (cast_expression "(ulong)uVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (labeled_statement "LAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);" statement_identifier : (expression_statement "FUN_001cf7b0(param_1,uVar7,uVar6);" (call_expression "FUN_001cf7b0(param_1,uVar7,uVar6)" identifier (argument_list "(param_1,uVar7,uVar6)" ( identifier , identifier , identifier ))) ;)) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void make_verneed_map(Sized_dynobj<64,_false> * this, Read_symbols_data\n   * sd, Version_map * version_map) */\n\nvoid __thiscall\ngold::Sized_dynobj<64,_false>::make_verneed_map\n          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  uchar *puVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  char *pcVar7;\n  uint uVar8;\n  ushort uVar9;\n  long lVar10;\n  uint uVar11;\n  ushort *local_50;\n  long local_48;\n  uint local_40;\n  \n  if (sd->verneed == (File_view *)0x0) {\n    return;\n  }\n  uVar2 = sd->verneed_size;\n  puVar3 = sd->symbol_names->data_;\n  uVar4 = sd->symbol_names_size;\n  puVar5 = (ushort *)sd->verneed->data_;\n  uVar1 = sd->verneed_info;\n  if (uVar1 == 0) {\n    return;\n  }\n  uVar9 = *puVar5;\n  if (uVar9 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar7 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    pcVar7 = (char *)gettext(pcVar7);\n  }\n  else {\nLAB_002aeb71:\n    pcVar7 = (char *)gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar9;\n  }\nLAB_002aeaa8:\n  Object::error((Object *)this,pcVar7,uVar6);\n  return;\n}\n\n" comment (declaration "void __thiscall\ngold::Sized_dynobj<64,_false>::make_verneed_map\n          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)\n\n{\n  uint uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_false>::make_verneed_map\n          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)\n\n{\n  uint" identifier > : : (function_declarator "make_verneed_map\n          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)" identifier (parameter_list "(Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)" ( (parameter_declaration "Sized_dynobj" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Read_symbols_data *sd" type_identifier (pointer_declarator "*sd" * identifier)) , (parameter_declaration "Version_map *version_map" type_identifier (pointer_declarator "*version_map" * identifier)) ))) { identifier) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uchar *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ushort *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort uVar9;" type_identifier identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "ushort *local_50;" type_identifier (pointer_declarator "*local_50" * identifier) ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (if_statement "if (sd->verneed == (File_view *)0x0) {\n    return;\n  }" if (parenthesized_expression "(sd->verneed == (File_view *)0x0)" ( (binary_expression "sd->verneed == (File_view *)0x0" (field_expression "sd->verneed" identifier -> field_identifier) == (cast_expression "(File_view *)0x0" ( (type_descriptor "File_view *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = sd->verneed_size;" (assignment_expression "uVar2 = sd->verneed_size" identifier = (field_expression "sd->verneed_size" identifier -> field_identifier)) ;) (expression_statement "puVar3 = sd->symbol_names->data_;" (assignment_expression "puVar3 = sd->symbol_names->data_" identifier = (field_expression "sd->symbol_names->data_" (field_expression "sd->symbol_names" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "uVar4 = sd->symbol_names_size;" (assignment_expression "uVar4 = sd->symbol_names_size" identifier = (field_expression "sd->symbol_names_size" identifier -> field_identifier)) ;) (expression_statement "puVar5 = (ushort *)sd->verneed->data_;" (assignment_expression "puVar5 = (ushort *)sd->verneed->data_" identifier = (cast_expression "(ushort *)sd->verneed->data_" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "sd->verneed->data_" (field_expression "sd->verneed" identifier -> field_identifier) -> field_identifier))) ;) (expression_statement "uVar1 = sd->verneed_info;" (assignment_expression "uVar1 = sd->verneed_info" identifier = (field_expression "sd->verneed_info" identifier -> field_identifier)) ;) (if_statement "if (uVar1 == 0) {\n    return;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = *puVar5;" (assignment_expression "uVar9 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (if_statement "if (uVar9 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar7 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    pcVar7 = (char *)gettext(pcVar7);\n  }\n  else {\nLAB_002aeb71:\n    pcVar7 = (char *)gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar9;\n  }" if (parenthesized_expression "(uVar9 == 1)" ( (binary_expression "uVar9 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar7 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    pcVar7 = (char *)gettext(pcVar7);\n  }" { (expression_statement "uVar6 = (ulong)*(uint *)(puVar5 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(puVar5 + 4)" identifier = (binary_expression "(ulong)*(uint *)(puVar5 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(puVar5 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" if (parenthesized_expression "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )) (compound_statement "{\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_50 = puVar5;" (assignment_expression "local_50 = puVar5" identifier = identifier) ;) (do_statement "do {\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);" do (compound_statement "{\n        uVar9 = local_50[1];\n        lVar10 = (long)local_50 + uVar6;\n        if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (uVar1 == local_40) {\n          return;\n        }\n        uVar9 = *local_50;\n        if (uVar9 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      }" { (expression_statement "uVar9 = local_50[1];" (assignment_expression "uVar9 = local_50[1]" identifier = (subscript_expression "local_50[1]" identifier [ number_literal ])) ;) (expression_statement "lVar10 = (long)local_50 + uVar6;" (assignment_expression "lVar10 = (long)local_50 + uVar6" identifier = (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (if_statement "if (uVar9 != 0) {\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar8 = *(uint *)(lVar10 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar11 = 0;\n          while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" { (expression_statement "uVar8 = *(uint *)(lVar10 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar10 + 8)" identifier = (pointer_expression "*(uint *)(lVar10 + 8)" * (cast_expression "(uint *)(lVar10 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 8)" ( (binary_expression "lVar10 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (compound_statement "{\nLAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" { (labeled_statement "LAB_002aeb40:\n            pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");" statement_identifier : (expression_statement "pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u");" (assignment_expression "pcVar7 = (char *)gettext("vernaux vna_name field out of range: %u")" identifier = (cast_expression "(char *)gettext("vernaux vna_name field out of range: %u")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("vernaux vna_name field out of range: %u")" identifier (argument_list "("vernaux vna_name field out of range: %u")" ( (string_literal ""vernaux vna_name field out of range: %u"" " string_content ") ))))) ;)) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;\n            uVar8 = *(uint *)(lVar10 + 0xc);\n            if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar11 = uVar11 + 1;\n            lVar10 = lVar10 + (ulong)uVar8;\n            if (uVar9 == uVar11) break;\n            uVar8 = *(uint *)(lVar10 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" { (expression_statement "set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))\n            ;" (call_expression "set_version_map(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))" identifier (argument_list "(this,version_map,(uint)*(ushort *)(lVar10 + 6),(char *)(puVar3 + uVar6))" ( identifier , identifier , (binary_expression "(uint)*(ushort *)(lVar10 + 6)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(lVar10 + 6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 6)" ( (binary_expression "lVar10 + 6" identifier + number_literal) )))) , (cast_expression "(char *)(puVar3 + uVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + uVar6)" ( (binary_expression "puVar3 + uVar6" identifier + identifier) ))) ))) ;) (expression_statement "uVar8 = *(uint *)(lVar10 + 0xc);" (assignment_expression "uVar8 = *(uint *)(lVar10 + 0xc)" identifier = (pointer_expression "*(uint *)(lVar10 + 0xc)" * (cast_expression "(uint *)(lVar10 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0xc)" ( (binary_expression "lVar10 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8) {\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" if (parenthesized_expression "(uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8)" ( (binary_expression "uVar2 <= (lVar10 - (long)puVar5) + (ulong)uVar8" identifier <= (binary_expression "(lVar10 - (long)puVar5) + (ulong)uVar8" (parenthesized_expression "(lVar10 - (long)puVar5)" ( (binary_expression "lVar10 - (long)puVar5" identifier - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) )) (compound_statement "{\n              pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" { (expression_statement "pcVar7 = (char *)gettext("verneed vna_next field out of range: %u");" (assignment_expression "pcVar7 = (char *)gettext("verneed vna_next field out of range: %u")" identifier = (cast_expression "(char *)gettext("verneed vna_next field out of range: %u")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("verneed vna_next field out of range: %u")" identifier (argument_list "("verneed vna_next field out of range: %u")" ( (string_literal ""verneed vna_next field out of range: %u"" " string_content ") ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar11 = uVar11 + 1;" (assignment_expression "uVar11 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (expression_statement "lVar10 = lVar10 + (ulong)uVar8;" (assignment_expression "lVar10 = lVar10 + (ulong)uVar8" identifier = (binary_expression "lVar10 + (ulong)uVar8" identifier + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar9 == uVar11) break;" if (parenthesized_expression "(uVar9 == uVar11)" ( (binary_expression "uVar9 == uVar11" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = *(uint *)(lVar10 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar10 + 8)" identifier = (pointer_expression "*(uint *)(lVar10 + 8)" * (cast_expression "(uint *)(lVar10 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 8)" ( (binary_expression "lVar10 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) goto LAB_002aeb40;" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (goto_statement "goto LAB_002aeb40;" goto statement_identifier ;)) })) })) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 6);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 6)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 6)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 6)" ( (binary_expression "local_50 + 6" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= local_48 + uVar6) {\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" if (parenthesized_expression "(uVar2 <= local_48 + uVar6)" ( (binary_expression "uVar2 <= local_48 + uVar6" identifier <= (binary_expression "local_48 + uVar6" identifier + identifier)) )) (compound_statement "{\n          pcVar7 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" { (expression_statement "pcVar7 = "verneed vn_next field out of range: %u";" (assignment_expression "pcVar7 = "verneed vn_next field out of range: %u"" identifier = (string_literal ""verneed vn_next field out of range: %u"" " string_content ")) ;) (goto_statement "goto LAB_002aeb2f;" goto statement_identifier ;) })) (expression_statement "local_50 = (ushort *)((long)local_50 + uVar6);" (assignment_expression "local_50 = (ushort *)((long)local_50 + uVar6)" identifier = (cast_expression "(ushort *)((long)local_50 + uVar6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_50 + uVar6)" ( (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) (if_statement "if (uVar1 == local_40) {\n          return;\n        }" if (parenthesized_expression "(uVar1 == local_40)" ( (binary_expression "uVar1 == local_40" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = *local_50;" (assignment_expression "uVar9 = *local_50" identifier = (pointer_expression "*local_50" * identifier)) ;) (if_statement "if (uVar9 != 1) goto LAB_002aeb71;" if (parenthesized_expression "(uVar9 != 1)" ( (binary_expression "uVar9 != 1" identifier != number_literal) )) (goto_statement "goto LAB_002aeb71;" goto statement_identifier ;)) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 4)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 4)" ( (binary_expression "local_50 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_48 = (long)local_50 - (long)puVar5;" (assignment_expression "local_48 = (long)local_50 - (long)puVar5" identifier = (binary_expression "(long)local_50 - (long)puVar5" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(local_48 + uVar6 < uVar2)" ( (binary_expression "local_48 + uVar6 < uVar2" (binary_expression "local_48 + uVar6" identifier + identifier) < identifier) )) ;) })) (expression_statement "pcVar7 = "verneed vn_aux field out of range: %u";" (assignment_expression "pcVar7 = "verneed vn_aux field out of range: %u"" identifier = (string_literal ""verneed vn_aux field out of range: %u"" " string_content ")) ;) (labeled_statement "LAB_002aeb2f:\n    pcVar7 = (char *)gettext(pcVar7);" statement_identifier : (expression_statement "pcVar7 = (char *)gettext(pcVar7);" (assignment_expression "pcVar7 = (char *)gettext(pcVar7)" identifier = (cast_expression "(char *)gettext(pcVar7)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext(pcVar7)" identifier (argument_list "(pcVar7)" ( identifier ))))) ;)) }) (else_clause "else {\nLAB_002aeb71:\n    pcVar7 = (char *)gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar9;\n  }" else (compound_statement "{\nLAB_002aeb71:\n    pcVar7 = (char *)gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar9;\n  }" { (labeled_statement "LAB_002aeb71:\n    pcVar7 = (char *)gettext("unexpected verneed version %u");" statement_identifier : (expression_statement "pcVar7 = (char *)gettext("unexpected verneed version %u");" (assignment_expression "pcVar7 = (char *)gettext("unexpected verneed version %u")" identifier = (cast_expression "(char *)gettext("unexpected verneed version %u")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("unexpected verneed version %u")" identifier (argument_list "("unexpected verneed version %u")" ( (string_literal ""unexpected verneed version %u"" " string_content ") ))))) ;)) (expression_statement "uVar6 = (ulong)uVar9;" (assignment_expression "uVar6 = (ulong)uVar9" identifier = (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (labeled_statement "LAB_002aeaa8:\n  Object::error((Object *)this,pcVar7,uVar6);" statement_identifier : (labeled_statement "Object::error((Object *)this,pcVar7,uVar6);" statement_identifier : (ERROR ":" :) (expression_statement "error((Object *)this,pcVar7,uVar6);" (call_expression "error((Object *)this,pcVar7,uVar6)" identifier (argument_list "((Object *)this,pcVar7,uVar6)" ( (cast_expression "(Object *)this" ( (type_descriptor "Object *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier ))) ;))) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}\n\n" (function_definition "void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" primitive_type (function_declarator "FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ushort *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "ushort uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "ushort *local_50;" type_identifier (pointer_declarator "*local_50" * identifier) ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_40;" primitive_type identifier ;) (if_statement "if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }" if (parenthesized_expression "(*(long *)(param_2 + 0x68) == 0)" ( (binary_expression "*(long *)(param_2 + 0x68) == 0" (pointer_expression "*(long *)(param_2 + 0x68)" * (cast_expression "(long *)(param_2 + 0x68)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar2 = *(ulong *)(param_2 + 0x70);" (assignment_expression "uVar2 = *(ulong *)(param_2 + 0x70)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x70)" * (cast_expression "(ulong *)(param_2 + 0x70)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x70)" ( (binary_expression "param_2 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);" (assignment_expression "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10)" identifier = (pointer_expression "*(long *)(*(long *)(param_2 + 0x30) + 0x10)" * (cast_expression "(long *)(*(long *)(param_2 + 0x30) + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_2 + 0x30) + 0x10)" ( (binary_expression "*(long *)(param_2 + 0x30) + 0x10" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x38);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x38)" identifier = (pointer_expression "*(ulong *)(param_2 + 0x38)" * (cast_expression "(ulong *)(param_2 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);" (assignment_expression "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" identifier = (pointer_expression "*(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" * (cast_expression "(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_2 + 0x68) + 0x10)" ( (binary_expression "*(long *)(param_2 + 0x68) + 0x10" (pointer_expression "*(long *)(param_2 + 0x68)" * (cast_expression "(long *)(param_2 + 0x68)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_2 + 0x78);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x78)" identifier = (pointer_expression "*(int *)(param_2 + 0x78)" * (cast_expression "(int *)(param_2 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x78)" ( (binary_expression "param_2 + 0x78" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == 0) {\n    return;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar10 = *puVar5;" (assignment_expression "uVar10 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (if_statement "if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" if (parenthesized_expression "(uVar10 == 1)" ( (binary_expression "uVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }" { (expression_statement "uVar6 = (ulong)*(uint *)(puVar5 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(puVar5 + 4)" identifier = (binary_expression "(ulong)*(uint *)(puVar5 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(puVar5 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" if (parenthesized_expression "(uVar6 < uVar2)" ( (binary_expression "uVar6 < uVar2" identifier < identifier) )) (compound_statement "{\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_50 = puVar5;" (assignment_expression "local_50 = puVar5" identifier = identifier) ;) (do_statement "do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);" do (compound_statement "{\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      }" { (expression_statement "uVar10 = local_50[1];" (assignment_expression "uVar10 = local_50[1]" identifier = (subscript_expression "local_50[1]" identifier [ number_literal ])) ;) (expression_statement "lVar11 = (long)local_50 + uVar6;" (assignment_expression "lVar11 = (long)local_50 + uVar6" identifier = (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (if_statement "if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" { (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" identifier = (pointer_expression "*(uint *)(lVar11 + 8)" * (cast_expression "(uint *)(lVar11 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (compound_statement "{\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" { (labeled_statement "LAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");" statement_identifier : (expression_statement "uVar7 = gettext("vernaux vna_name field out of range: %u");" (assignment_expression "uVar7 = gettext("vernaux vna_name field out of range: %u")" identifier = (call_expression "gettext("vernaux vna_name field out of range: %u")" identifier (argument_list "("vernaux vna_name field out of range: %u")" ( (string_literal ""vernaux vna_name field out of range: %u"" " string_content ") )))) ;)) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" { (expression_statement "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);" (call_expression "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" identifier (argument_list "(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" ( identifier , identifier , (pointer_expression "*(undefined2 *)(lVar11 + 6)" * (cast_expression "(undefined2 *)(lVar11 + 6)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 6)" ( (binary_expression "lVar11 + 6" identifier + number_literal) )))) , (binary_expression "uVar6 + lVar3" identifier + identifier) ))) ;) (expression_statement "uVar8 = *(uint *)(lVar11 + 0xc);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 0xc)" identifier = (pointer_expression "*(uint *)(lVar11 + 0xc)" * (cast_expression "(uint *)(lVar11 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xc)" ( (binary_expression "lVar11 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" if (parenthesized_expression "(uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8)" ( (binary_expression "uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8" identifier <= (binary_expression "(lVar11 - (long)puVar5) + (ulong)uVar8" (parenthesized_expression "(lVar11 - (long)puVar5)" ( (binary_expression "lVar11 - (long)puVar5" identifier - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) )) (compound_statement "{\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" { (expression_statement "uVar7 = gettext("verneed vna_next field out of range: %u");" (assignment_expression "uVar7 = gettext("verneed vna_next field out of range: %u")" identifier = (call_expression "gettext("verneed vna_next field out of range: %u")" identifier (argument_list "("verneed vna_next field out of range: %u")" ( (string_literal ""verneed vna_next field out of range: %u"" " string_content ") )))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_002aeaa8;" goto statement_identifier ;) })) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "lVar11 = lVar11 + (ulong)uVar8;" (assignment_expression "lVar11 = lVar11 + (ulong)uVar8" identifier = (binary_expression "lVar11 + (ulong)uVar8" identifier + (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (if_statement "if (uVar10 == uVar12) break;" if (parenthesized_expression "(uVar10 == uVar12)" ( (binary_expression "uVar10 == uVar12" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" identifier = (pointer_expression "*(uint *)(lVar11 + 8)" * (cast_expression "(uint *)(lVar11 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" identifier = (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 <= uVar6) goto LAB_002aeb40;" if (parenthesized_expression "(uVar4 <= uVar6)" ( (binary_expression "uVar4 <= uVar6" identifier <= identifier) )) (goto_statement "goto LAB_002aeb40;" goto statement_identifier ;)) })) })) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 6);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 6)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 6)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 6)" ( (binary_expression "local_50 + 6" identifier + number_literal) ))))) ;) (if_statement "if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" if (parenthesized_expression "(uVar2 <= local_48 + uVar6)" ( (binary_expression "uVar2 <= local_48 + uVar6" identifier <= (binary_expression "local_48 + uVar6" identifier + identifier)) )) (compound_statement "{\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" { (expression_statement "pcVar9 = "verneed vn_next field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_next field out of range: %u"" identifier = (string_literal ""verneed vn_next field out of range: %u"" " string_content ")) ;) (goto_statement "goto LAB_002aeb2f;" goto statement_identifier ;) })) (expression_statement "local_50 = (ushort *)((long)local_50 + uVar6);" (assignment_expression "local_50 = (ushort *)((long)local_50 + uVar6)" identifier = (cast_expression "(ushort *)((long)local_50 + uVar6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_50 + uVar6)" ( (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 == local_40) {\n          return;\n        }" if (parenthesized_expression "(iVar1 == local_40)" ( (binary_expression "iVar1 == local_40" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (expression_statement "uVar10 = *local_50;" (assignment_expression "uVar10 = *local_50" identifier = (pointer_expression "*local_50" * identifier)) ;) (if_statement "if (uVar10 != 1) goto LAB_002aeb71;" if (parenthesized_expression "(uVar10 != 1)" ( (binary_expression "uVar10 != 1" identifier != number_literal) )) (goto_statement "goto LAB_002aeb71;" goto statement_identifier ;)) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 4)" identifier = (binary_expression "(ulong)*(uint *)(local_50 + 4)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(local_50 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + 4)" ( (binary_expression "local_50 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_48 = (long)local_50 - (long)puVar5;" (assignment_expression "local_48 = (long)local_50 - (long)puVar5" identifier = (binary_expression "(long)local_50 - (long)puVar5" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(local_48 + uVar6 < uVar2)" ( (binary_expression "local_48 + uVar6 < uVar2" (binary_expression "local_48 + uVar6" identifier + identifier) < identifier) )) ;) })) (expression_statement "pcVar9 = "verneed vn_aux field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_aux field out of range: %u"" identifier = (string_literal ""verneed vn_aux field out of range: %u"" " string_content ")) ;) (labeled_statement "LAB_002aeb2f:\n    uVar7 = gettext(pcVar9);" statement_identifier : (expression_statement "uVar7 = gettext(pcVar9);" (assignment_expression "uVar7 = gettext(pcVar9)" identifier = (call_expression "gettext(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier )))) ;)) }) (else_clause "else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" else (compound_statement "{\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" { (labeled_statement "LAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");" statement_identifier : (expression_statement "uVar7 = gettext("unexpected verneed version %u");" (assignment_expression "uVar7 = gettext("unexpected verneed version %u")" identifier = (call_expression "gettext("unexpected verneed version %u")" identifier (argument_list "("unexpected verneed version %u")" ( (string_literal ""unexpected verneed version %u"" " string_content ") )))) ;)) (expression_statement "uVar6 = (ulong)uVar10;" (assignment_expression "uVar6 = (ulong)uVar10" identifier = (cast_expression "(ulong)uVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (labeled_statement "LAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);" statement_identifier : (expression_statement "FUN_001cf7b0(param_1,uVar7,uVar6);" (call_expression "FUN_001cf7b0(param_1,uVar7,uVar6)" identifier (argument_list "(param_1,uVar7,uVar6)" ( identifier , identifier , identifier ))) ;)) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE 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 { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (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 = (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) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT + IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression (parenthesized_expression ( (binary_expression IDENT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;)) (return_statement return ;) })))
(function_definition "void FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_002ae990(undefined8 param_1,long param_2,undefined8 param_3)" (identifier "FUN_002ae990") (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ushort *puVar5;\n  ulong uVar6;\n  undefined8 uVar7;\n  uint uVar8;\n  char *pcVar9;\n  ushort uVar10;\n  long lVar11;\n  uint uVar12;\n  ushort *local_50;\n  long local_48;\n  int local_40;\n  \n  if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }\n  uVar2 = *(ulong *)(param_2 + 0x70);\n  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);\n  uVar4 = *(ulong *)(param_2 + 0x38);\n  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);\n  iVar1 = *(int *)(param_2 + 0x78);\n  if (iVar1 == 0) {\n    return;\n  }\n  uVar10 = *puVar5;\n  if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }\nLAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ushort *puVar5;" (type_identifier "ushort") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "char *pcVar9;" (primitive_type "char") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "ushort uVar10;" (type_identifier "ushort") (identifier "uVar10") (; ";")) (declaration "long lVar11;" (sized_type_specifier "long" (long "long")) (identifier "lVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "ushort *local_50;" (type_identifier "ushort") (pointer_declarator "*local_50" (* "*") (identifier "local_50")) (; ";")) (declaration "long local_48;" (sized_type_specifier "long" (long "long")) (identifier "local_48") (; ";")) (declaration "int local_40;" (primitive_type "int") (identifier "local_40") (; ";")) (if_statement "if (*(long *)(param_2 + 0x68) == 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(*(long *)(param_2 + 0x68) == 0)" (( "(") (binary_expression "*(long *)(param_2 + 0x68) == 0" (pointer_expression "*(long *)(param_2 + 0x68)" (* "*") (cast_expression "(long *)(param_2 + 0x68)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x68)" (( "(") (binary_expression "param_2 + 0x68" (identifier "param_2") (+ "+") (number_literal "0x68")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar2 = *(ulong *)(param_2 + 0x70);" (assignment_expression "uVar2 = *(ulong *)(param_2 + 0x70)" (identifier "uVar2") (= "=") (pointer_expression "*(ulong *)(param_2 + 0x70)" (* "*") (cast_expression "(ulong *)(param_2 + 0x70)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x70)" (( "(") (binary_expression "param_2 + 0x70" (identifier "param_2") (+ "+") (number_literal "0x70")) () ")"))))) (; ";")) (expression_statement "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);" (assignment_expression "lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(*(long *)(param_2 + 0x30) + 0x10)" (* "*") (cast_expression "(long *)(*(long *)(param_2 + 0x30) + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_2 + 0x30) + 0x10)" (( "(") (binary_expression "*(long *)(param_2 + 0x30) + 0x10" (pointer_expression "*(long *)(param_2 + 0x30)" (* "*") (cast_expression "(long *)(param_2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(ulong *)(param_2 + 0x38);" (assignment_expression "uVar4 = *(ulong *)(param_2 + 0x38)" (identifier "uVar4") (= "=") (pointer_expression "*(ulong *)(param_2 + 0x38)" (* "*") (cast_expression "(ulong *)(param_2 + 0x38)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);" (assignment_expression "puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" (identifier "puVar5") (= "=") (pointer_expression "*(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" (* "*") (cast_expression "(ushort **)(*(long *)(param_2 + 0x68) + 0x10)" (( "(") (type_descriptor "ushort **" (type_identifier "ushort") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(param_2 + 0x68) + 0x10)" (( "(") (binary_expression "*(long *)(param_2 + 0x68) + 0x10" (pointer_expression "*(long *)(param_2 + 0x68)" (* "*") (cast_expression "(long *)(param_2 + 0x68)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x68)" (( "(") (binary_expression "param_2 + 0x68" (identifier "param_2") (+ "+") (number_literal "0x68")) () ")")))) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_2 + 0x78);" (assignment_expression "iVar1 = *(int *)(param_2 + 0x78)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_2 + 0x78)" (* "*") (cast_expression "(int *)(param_2 + 0x78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x78)" (( "(") (binary_expression "param_2 + 0x78" (identifier "param_2") (+ "+") (number_literal "0x78")) () ")"))))) (; ";")) (if_statement "if (iVar1 == 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar10 = *puVar5;" (assignment_expression "uVar10 = *puVar5" (identifier "uVar10") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (if_statement "if (uVar10 == 1) {\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }\n  else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" (if "if") (parenthesized_expression "(uVar10 == 1)" (( "(") (binary_expression "uVar10 == 1" (identifier "uVar10") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    uVar6 = (ulong)*(uint *)(puVar5 + 4);\n    if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }\n    pcVar9 = "verneed vn_aux field out of range: %u";\nLAB_002aeb2f:\n    uVar7 = gettext(pcVar9);\n  }" ({ "{") (expression_statement "uVar6 = (ulong)*(uint *)(puVar5 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(puVar5 + 4)" (identifier "uVar6") (= "=") (binary_expression "(ulong)*(uint *)(puVar5 + 4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(puVar5 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar5 + 4)" (( "(") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (uVar6 < uVar2) {\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" (if "if") (parenthesized_expression "(uVar6 < uVar2)" (( "(") (binary_expression "uVar6 < uVar2" (identifier "uVar6") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n      local_40 = 0;\n      local_48 = 0;\n      local_50 = puVar5;\n      do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);\n    }" ({ "{") (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" (identifier "local_48") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = puVar5;" (assignment_expression "local_50 = puVar5" (identifier "local_50") (= "=") (identifier "puVar5")) (; ";")) (do_statement "do {\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      } while (local_48 + uVar6 < uVar2);" (do "do") (compound_statement "{\n        uVar10 = local_50[1];\n        lVar11 = (long)local_50 + uVar6;\n        if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }\n        uVar6 = (ulong)*(uint *)(local_50 + 6);\n        if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }\n        local_50 = (ushort *)((long)local_50 + uVar6);\n        local_40 = local_40 + 1;\n        if (iVar1 == local_40) {\n          return;\n        }\n        uVar10 = *local_50;\n        if (uVar10 != 1) goto LAB_002aeb71;\n        uVar6 = (ulong)*(uint *)(local_50 + 4);\n        local_48 = (long)local_50 - (long)puVar5;\n      }" ({ "{") (expression_statement "uVar10 = local_50[1];" (assignment_expression "uVar10 = local_50[1]" (identifier "uVar10") (= "=") (subscript_expression "local_50[1]" (identifier "local_50") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "lVar11 = (long)local_50 + uVar6;" (assignment_expression "lVar11 = (long)local_50 + uVar6" (identifier "lVar11") (= "=") (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (+ "+") (identifier "uVar6"))) (; ";")) (if_statement "if (uVar10 != 0) {\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar8 = *(uint *)(lVar11 + 8);\n          uVar6 = (ulong)uVar8;\n          if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }\n          uVar12 = 0;\n          while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }\n        }" ({ "{") (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)(lVar11 + 8)" (* "*") (cast_expression "(uint *)(lVar11 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 8)" (( "(") (binary_expression "lVar11 + 8" (identifier "lVar11") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8"))) (; ";")) (if_statement "if (uVar4 <= uVar6) {\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" (if "if") (parenthesized_expression "(uVar4 <= uVar6)" (( "(") (binary_expression "uVar4 <= uVar6" (identifier "uVar4") (<= "<=") (identifier "uVar6")) () ")")) (compound_statement "{\nLAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");\n            uVar6 = (ulong)uVar8;\n            goto LAB_002aeaa8;\n          }" ({ "{") (labeled_statement "LAB_002aeb40:\n            uVar7 = gettext("vernaux vna_name field out of range: %u");" (statement_identifier "LAB_002aeb40") (: ":") (expression_statement "uVar7 = gettext("vernaux vna_name field out of range: %u");" (assignment_expression "uVar7 = gettext("vernaux vna_name field out of range: %u")" (identifier "uVar7") (= "=") (call_expression "gettext("vernaux vna_name field out of range: %u")" (identifier "gettext") (argument_list "("vernaux vna_name field out of range: %u")" (( "(") (string_literal ""vernaux vna_name field out of range: %u"" (" """) (string_content "vernaux vna_name field out of range: %u") (" """)) () ")")))) (; ";"))) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8"))) (; ";")) (goto_statement "goto LAB_002aeaa8;" (goto "goto") (statement_identifier "LAB_002aeaa8") (; ";")) (} "}"))) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" (identifier "uVar12") (= "=") (number_literal "0")) (; ";")) (while_statement "while( true ) {\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);\n            uVar8 = *(uint *)(lVar11 + 0xc);\n            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }\n            uVar12 = uVar12 + 1;\n            lVar11 = lVar11 + (ulong)uVar8;\n            if (uVar10 == uVar12) break;\n            uVar8 = *(uint *)(lVar11 + 8);\n            uVar6 = (ulong)uVar8;\n            if (uVar4 <= uVar6) goto LAB_002aeb40;\n          }" ({ "{") (expression_statement "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);" (call_expression "FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" (identifier "FUN_002ae710") (argument_list "(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") (, ",") (pointer_expression "*(undefined2 *)(lVar11 + 6)" (* "*") (cast_expression "(undefined2 *)(lVar11 + 6)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 6)" (( "(") (binary_expression "lVar11 + 6" (identifier "lVar11") (+ "+") (number_literal "6")) () ")")))) (, ",") (binary_expression "uVar6 + lVar3" (identifier "uVar6") (+ "+") (identifier "lVar3")) () ")"))) (; ";")) (expression_statement "uVar8 = *(uint *)(lVar11 + 0xc);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 0xc)" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)(lVar11 + 0xc)" (* "*") (cast_expression "(uint *)(lVar11 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0xc)" (( "(") (binary_expression "lVar11 + 0xc" (identifier "lVar11") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" (if "if") (parenthesized_expression "(uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8)" (( "(") (binary_expression "uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8" (identifier "uVar2") (<= "<=") (binary_expression "(lVar11 - (long)puVar5) + (ulong)uVar8" (parenthesized_expression "(lVar11 - (long)puVar5)" (( "(") (binary_expression "lVar11 - (long)puVar5" (identifier "lVar11") (- "-") (cast_expression "(long)puVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar5"))) () ")")) (+ "+") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8")))) () ")")) (compound_statement "{\n              uVar7 = gettext("verneed vna_next field out of range: %u");\n              uVar6 = (ulong)uVar8;\n              goto LAB_002aeaa8;\n            }" ({ "{") (expression_statement "uVar7 = gettext("verneed vna_next field out of range: %u");" (assignment_expression "uVar7 = gettext("verneed vna_next field out of range: %u")" (identifier "uVar7") (= "=") (call_expression "gettext("verneed vna_next field out of range: %u")" (identifier "gettext") (argument_list "("verneed vna_next field out of range: %u")" (( "(") (string_literal ""verneed vna_next field out of range: %u"" (" """) (string_content "verneed vna_next field out of range: %u") (" """)) () ")")))) (; ";")) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8"))) (; ";")) (goto_statement "goto LAB_002aeaa8;" (goto "goto") (statement_identifier "LAB_002aeaa8") (; ";")) (} "}"))) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" (identifier "uVar12") (= "=") (binary_expression "uVar12 + 1" (identifier "uVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar11 = lVar11 + (ulong)uVar8;" (assignment_expression "lVar11 = lVar11 + (ulong)uVar8" (identifier "lVar11") (= "=") (binary_expression "lVar11 + (ulong)uVar8" (identifier "lVar11") (+ "+") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8")))) (; ";")) (if_statement "if (uVar10 == uVar12) break;" (if "if") (parenthesized_expression "(uVar10 == uVar12)" (( "(") (binary_expression "uVar10 == uVar12" (identifier "uVar10") (== "==") (identifier "uVar12")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar8 = *(uint *)(lVar11 + 8);" (assignment_expression "uVar8 = *(uint *)(lVar11 + 8)" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)(lVar11 + 8)" (* "*") (cast_expression "(uint *)(lVar11 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 8)" (( "(") (binary_expression "lVar11 + 8" (identifier "lVar11") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar6 = (ulong)uVar8;" (assignment_expression "uVar6 = (ulong)uVar8" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8"))) (; ";")) (if_statement "if (uVar4 <= uVar6) goto LAB_002aeb40;" (if "if") (parenthesized_expression "(uVar4 <= uVar6)" (( "(") (binary_expression "uVar4 <= uVar6" (identifier "uVar4") (<= "<=") (identifier "uVar6")) () ")")) (goto_statement "goto LAB_002aeb40;" (goto "goto") (statement_identifier "LAB_002aeb40") (; ";"))) (} "}"))) (} "}"))) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 6);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 6)" (identifier "uVar6") (= "=") (binary_expression "(ulong)*(uint *)(local_50 + 6)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(local_50 + 6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_50 + 6)" (( "(") (binary_expression "local_50 + 6" (identifier "local_50") (+ "+") (number_literal "6")) () ")"))))) (; ";")) (if_statement "if (uVar2 <= local_48 + uVar6) {\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" (if "if") (parenthesized_expression "(uVar2 <= local_48 + uVar6)" (( "(") (binary_expression "uVar2 <= local_48 + uVar6" (identifier "uVar2") (<= "<=") (binary_expression "local_48 + uVar6" (identifier "local_48") (+ "+") (identifier "uVar6"))) () ")")) (compound_statement "{\n          pcVar9 = "verneed vn_next field out of range: %u";\n          goto LAB_002aeb2f;\n        }" ({ "{") (expression_statement "pcVar9 = "verneed vn_next field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_next field out of range: %u"" (identifier "pcVar9") (= "=") (string_literal ""verneed vn_next field out of range: %u"" (" """) (string_content "verneed vn_next field out of range: %u") (" """))) (; ";")) (goto_statement "goto LAB_002aeb2f;" (goto "goto") (statement_identifier "LAB_002aeb2f") (; ";")) (} "}"))) (expression_statement "local_50 = (ushort *)((long)local_50 + uVar6);" (assignment_expression "local_50 = (ushort *)((long)local_50 + uVar6)" (identifier "local_50") (= "=") (cast_expression "(ushort *)((long)local_50 + uVar6)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)local_50 + uVar6)" (( "(") (binary_expression "(long)local_50 + uVar6" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (+ "+") (identifier "uVar6")) () ")")))) (; ";")) (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" (identifier "local_40") (= "=") (binary_expression "local_40 + 1" (identifier "local_40") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar1 == local_40) {\n          return;\n        }" (if "if") (parenthesized_expression "(iVar1 == local_40)" (( "(") (binary_expression "iVar1 == local_40" (identifier "iVar1") (== "==") (identifier "local_40")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar10 = *local_50;" (assignment_expression "uVar10 = *local_50" (identifier "uVar10") (= "=") (pointer_expression "*local_50" (* "*") (identifier "local_50"))) (; ";")) (if_statement "if (uVar10 != 1) goto LAB_002aeb71;" (if "if") (parenthesized_expression "(uVar10 != 1)" (( "(") (binary_expression "uVar10 != 1" (identifier "uVar10") (!= "!=") (number_literal "1")) () ")")) (goto_statement "goto LAB_002aeb71;" (goto "goto") (statement_identifier "LAB_002aeb71") (; ";"))) (expression_statement "uVar6 = (ulong)*(uint *)(local_50 + 4);" (assignment_expression "uVar6 = (ulong)*(uint *)(local_50 + 4)" (identifier "uVar6") (= "=") (binary_expression "(ulong)*(uint *)(local_50 + 4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(local_50 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_50 + 4)" (( "(") (binary_expression "local_50 + 4" (identifier "local_50") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "local_48 = (long)local_50 - (long)puVar5;" (assignment_expression "local_48 = (long)local_50 - (long)puVar5" (identifier "local_48") (= "=") (binary_expression "(long)local_50 - (long)puVar5" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (- "-") (cast_expression "(long)puVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar5")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_48 + uVar6 < uVar2)" (( "(") (binary_expression "local_48 + uVar6 < uVar2" (binary_expression "local_48 + uVar6" (identifier "local_48") (+ "+") (identifier "uVar6")) (< "<") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (expression_statement "pcVar9 = "verneed vn_aux field out of range: %u";" (assignment_expression "pcVar9 = "verneed vn_aux field out of range: %u"" (identifier "pcVar9") (= "=") (string_literal ""verneed vn_aux field out of range: %u"" (" """) (string_content "verneed vn_aux field out of range: %u") (" """))) (; ";")) (labeled_statement "LAB_002aeb2f:\n    uVar7 = gettext(pcVar9);" (statement_identifier "LAB_002aeb2f") (: ":") (expression_statement "uVar7 = gettext(pcVar9);" (assignment_expression "uVar7 = gettext(pcVar9)" (identifier "uVar7") (= "=") (call_expression "gettext(pcVar9)" (identifier "gettext") (argument_list "(pcVar9)" (( "(") (identifier "pcVar9") () ")")))) (; ";"))) (} "}")) (else_clause "else {\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" (else "else") (compound_statement "{\nLAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");\n    uVar6 = (ulong)uVar10;\n  }" ({ "{") (labeled_statement "LAB_002aeb71:\n    uVar7 = gettext("unexpected verneed version %u");" (statement_identifier "LAB_002aeb71") (: ":") (expression_statement "uVar7 = gettext("unexpected verneed version %u");" (assignment_expression "uVar7 = gettext("unexpected verneed version %u")" (identifier "uVar7") (= "=") (call_expression "gettext("unexpected verneed version %u")" (identifier "gettext") (argument_list "("unexpected verneed version %u")" (( "(") (string_literal ""unexpected verneed version %u"" (" """) (string_content "unexpected verneed version %u") (" """)) () ")")))) (; ";"))) (expression_statement "uVar6 = (ulong)uVar10;" (assignment_expression "uVar6 = (ulong)uVar10" (identifier "uVar6") (= "=") (cast_expression "(ulong)uVar10" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar10"))) (; ";")) (} "}")))) (labeled_statement "LAB_002aeaa8:\n  FUN_001cf7b0(param_1,uVar7,uVar6);" (statement_identifier "LAB_002aeaa8") (: ":") (expression_statement "FUN_001cf7b0(param_1,uVar7,uVar6);" (call_expression "FUN_001cf7b0(param_1,uVar7,uVar6)" (identifier "FUN_001cf7b0") (argument_list "(param_1,uVar7,uVar6)" (( "(") (identifier "param_1") (, ",") (identifier "uVar7") (, ",") (identifier "uVar6") () ")"))) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void make_verneed_map(Sized_dynobj<64,_false> * this, Read_symbols_data
   * sd, Version_map * version_map) */

void __thiscall
gold::Sized_dynobj<64,_false>::make_verneed_map
          (Sized_dynobj<64,_false> *this,Read_symbols_data *sd,Version_map *version_map)

{
  type_4 var_1;
  type_1 var_5;
  type_2 *var_10;
  type_1 var_7;
  type_3 *var_3;
  type_1 var_4;
  char *pcVar7;
  type_4 uVar8;
  type_3 var_2;
  long var_6;
  type_4 var_11;
  type_3 *var_12;
  long var_13;
  type_4 var_14;
  
  if (sd->verneed == (type_5 *)0x0) {
    return;
  }
  var_5 = sd->verneed_size;
  var_10 = sd->symbol_names->data_;
  var_7 = sd->symbol_names_size;
  var_3 = (type_3 *)sd->verneed->data_;
  var_1 = sd->verneed_info;
  if (var_1 == 0) {
    return;
  }
  var_2 = *var_3;
  if (var_2 == 1) {
    var_4 = (type_1)*(type_4 *)(var_3 + 4);
    if (var_4 < var_5) {
      var_14 = 0;
      var_13 = 0;
      var_12 = var_3;
      do {
        var_2 = var_12[1];
        var_6 = (long)var_12 + var_4;
        if (var_2 != 0) {
          uVar8 = *(type_4 *)(var_6 + 8);
          var_4 = (type_1)uVar8;
          if (var_7 <= var_4) {
LAB_002aeb40:
            pcVar7 = (char *)var_8("vernaux vna_name field out of range: %u");
            var_4 = (type_1)uVar8;
            goto LAB_002aeaa8;
          }
          var_11 = 0;
          while( true ) {
            var_9(this,version_map,(type_4)*(type_3 *)(var_6 + 6),(char *)(var_10 + var_4))
            ;
            uVar8 = *(type_4 *)(var_6 + 0xc);
            if (var_5 <= (var_6 - (long)var_3) + (type_1)uVar8) {
              pcVar7 = (char *)var_8("verneed vna_next field out of range: %u");
              var_4 = (type_1)uVar8;
              goto LAB_002aeaa8;
            }
            var_11 = var_11 + 1;
            var_6 = var_6 + (type_1)uVar8;
            if (var_2 == var_11) break;
            uVar8 = *(type_4 *)(var_6 + 8);
            var_4 = (type_1)uVar8;
            if (var_7 <= var_4) goto LAB_002aeb40;
          }
        }
        var_4 = (type_1)*(type_4 *)(var_12 + 6);
        if (var_5 <= var_13 + var_4) {
          pcVar7 = "verneed vn_next field out of range: %u";
          goto LAB_002aeb2f;
        }
        var_12 = (type_3 *)((long)var_12 + var_4);
        var_14 = var_14 + 1;
        if (var_1 == var_14) {
          return;
        }
        var_2 = *var_12;
        if (var_2 != 1) goto LAB_002aeb71;
        var_4 = (type_1)*(type_4 *)(var_12 + 4);
        var_13 = (long)var_12 - (long)var_3;
      } while (var_13 + var_4 < var_5);
    }
    pcVar7 = "verneed vn_aux field out of range: %u";
LAB_002aeb2f:
    pcVar7 = (char *)var_8(pcVar7);
  }
  else {
LAB_002aeb71:
    pcVar7 = (char *)var_8("unexpected verneed version %u");
    var_4 = (type_1)var_2;
  }
LAB_002aeaa8:
  Object::var_15((type_6 *)this,pcVar7,var_4);
  return;
}


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

void MASKED(undefined8 param_1,long param_2,undefined8 param_3)

{
  int iVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  ushort *puVar5;
  ulong uVar6;
  undefined8 uVar7;
  uint uVar8;
  char *pcVar9;
  ushort uVar10;
  long lVar11;
  uint uVar12;
  ushort *local_50;
  long local_48;
  int local_40;
  
  if (*(long *)(param_2 + 0x68) == 0) {
    return;
  }
  uVar2 = *(ulong *)(param_2 + 0x70);
  lVar3 = *(long *)(*(long *)(param_2 + 0x30) + 0x10);
  uVar4 = *(ulong *)(param_2 + 0x38);
  puVar5 = *(ushort **)(*(long *)(param_2 + 0x68) + 0x10);
  iVar1 = *(int *)(param_2 + 0x78);
  if (iVar1 == 0) {
    return;
  }
  uVar10 = *puVar5;
  if (uVar10 == 1) {
    uVar6 = (ulong)*(uint *)(puVar5 + 4);
    if (uVar6 < uVar2) {
      local_40 = 0;
      local_48 = 0;
      local_50 = puVar5;
      do {
        uVar10 = local_50[1];
        lVar11 = (long)local_50 + uVar6;
        if (uVar10 != 0) {
          uVar8 = *(uint *)(lVar11 + 8);
          uVar6 = (ulong)uVar8;
          if (uVar4 <= uVar6) {
LAB_002aeb40:
            uVar7 = gettext("vernaux vna_name field out of range: %u");
            uVar6 = (ulong)uVar8;
            goto LAB_002aeaa8;
          }
          uVar12 = 0;
          while( true ) {
            FUN_002ae710(param_1,param_3,*(undefined2 *)(lVar11 + 6),uVar6 + lVar3);
            uVar8 = *(uint *)(lVar11 + 0xc);
            if (uVar2 <= (lVar11 - (long)puVar5) + (ulong)uVar8) {
              uVar7 = gettext("verneed vna_next field out of range: %u");
              uVar6 = (ulong)uVar8;
              goto LAB_002aeaa8;
            }
            uVar12 = uVar12 + 1;
            lVar11 = lVar11 + (ulong)uVar8;
            if (uVar10 == uVar12) break;
            uVar8 = *(uint *)(lVar11 + 8);
            uVar6 = (ulong)uVar8;
            if (uVar4 <= uVar6) goto LAB_002aeb40;
          }
        }
        uVar6 = (ulong)*(uint *)(local_50 + 6);
        if (uVar2 <= local_48 + uVar6) {
          pcVar9 = "verneed vn_next field out of range: %u";
          goto LAB_002aeb2f;
        }
        local_50 = (ushort *)((long)local_50 + uVar6);
        local_40 = local_40 + 1;
        if (iVar1 == local_40) {
          return;
        }
        uVar10 = *local_50;
        if (uVar10 != 1) goto LAB_002aeb71;
        uVar6 = (ulong)*(uint *)(local_50 + 4);
        local_48 = (long)local_50 - (long)puVar5;
      } while (local_48 + uVar6 < uVar2);
    }
    pcVar9 = "verneed vn_aux field out of range: %u";
LAB_002aeb2f:
    uVar7 = gettext(pcVar9);
  }
  else {
LAB_002aeb71:
    uVar7 = gettext("unexpected verneed version %u");
    uVar6 = (ulong)uVar10;
  }
LAB_002aeaa8:
  FUN_001cf7b0(param_1,uVar7,uVar6);
  return;
}

