
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: bool do_file_has_changed(Sized_incremental_binary<64,_true> * this,
   uint n) */

bool __thiscall
gold::Sized_incremental_binary<64,_true>::do_file_has_changed
          (Sized_incremental_binary<64,_true> *this,uint n)

{
  ulong *puVar1;
  Script_info *pSVar2;
  pointer ppIVar3;
  Input_argument *pIVar4;
  uchar *puVar5;
  bool bVar6;
  int iVar7;
  uint uVar8;
  Incremental_disposition IVar9;
  undefined4 extraout_var;
  ulong uVar10;
  ulong uVar11;
  undefined4 in_register_00000034;
  char *filename;
  Timespec new_mtime;
  
  uVar11 = CONCAT44(in_register_00000034,n);
  if ((this->inputs_reader_).input_file_count_ <= n) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset");
  }
  pSVar2 = (this->super_Incremental_binary).script_map_.
           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl.
           _M_start[n];
  if (pSVar2 != (Script_info *)0x0) {
    uVar11 = (ulong)pSVar2->input_file_index_;
  }
  iVar7 = (*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,uVar11);
  uVar8 = (**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))();
  if (((uVar8 != 0) &&
      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.
                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>
                 ._M_impl._M_start,
      (ulong)uVar8 <=
      (ulong)((long)(this->super_Incremental_binary).input_args_map_.
                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>
                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&
     (pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0)) {
    if (pIVar4->is_file_ == false) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/options.h",0x828,"file");
    }
    IVar9 = (pIVar4->file_).options_.incremental_disposition_;
    if (IVar9 == INCREMENTAL_STARTUP) {
      if (parameters->options_ == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");
      }
      IVar9 = parameters->options_->incremental_startup_disposition_;
    }
    if (IVar9 != INCREMENTAL_CHECK) {
      return IVar9 == INCREMENTAL_CHANGED;
    }
  }
  puVar5 = (this->inputs_reader_).p_;
  filename = (char *)0x0;
  uVar10 = (ulong)(n * 0x18 + 0x10);
  uVar8 = *(uint *)(puVar5 + uVar10);
  uVar11 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);
  if (uVar11 < (this->inputs_reader_).strtab_.usable_size_) {
    filename = (this->inputs_reader_).strtab_.base_ + uVar11;
  }
  puVar1 = (ulong *)(puVar5 + uVar10 + 8);
  uVar11 = *puVar1;
  uVar8 = (uint)puVar1[1];
  new_mtime.seconds = 0;
  new_mtime.nanoseconds = 0;
  bVar6 = get_mtime(filename,&new_mtime);
  if (bVar6) {
    uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |
             uVar11 << 0x38;
    if ((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)) {
      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)
              < new_mtime.nanoseconds;
    }
    return bVar6;
  }
  return true;
}



ulong FUN_0019add0(long *param_1,ulong param_2)

{
  ulong *puVar1;
  int iVar2;
  char *pcVar3;
  uint uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  uint uVar8;
  long lVar9;
  ulong local_28;
  int local_20;
  
  uVar8 = (uint)param_2;
  if (*(uint *)(param_1 + 0x23) <= uVar8) {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");
  }
  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);
  if (lVar9 != 0) {
    param_2 = (ulong)*(uint *)(lVar9 + 0x20);
  }
  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);
  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);
  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&
     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {
    if (*pcVar3 == '\0') {
                    /* WARNING: Subroutine does not return */
      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);
    }
    iVar2 = *(int *)(pcVar3 + 0x60);
    if (iVar2 == 0) {
      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
      }
      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);
    }
    if (iVar2 != 1) {
      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);
    }
  }
  lVar9 = 0;
  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);
  uVar8 = *(uint *)(param_1[0x20] + uVar6);
  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);
  if (uVar7 < (ulong)param_1[0x22]) {
    lVar9 = param_1[0x21] + uVar7;
  }
  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);
  uVar7 = *puVar1;
  uVar8 = (uint)puVar1[1];
  local_28 = 0;
  local_20 = 0;
  uVar6 = FUN_00186ab0(lVar9,&local_28);
  if ((char)uVar6 != '\0') {
    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |
            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |
            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;
    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {
      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |
                           uVar8 << 0x18) < local_20);
    }
    return uVar6;
  }
  return 1;
}


PUSH RBP
PUSH RBX
SUB RSP,0x18
CMP ESI,dword ptr [RDI + 0x118]
JNC 0x0019aef4
MOV RDX,qword ptr [RDI + 0x38]
MOV EAX,ESI
MOV RBX,RDI
MOV EBP,ESI
MOV RAX,qword ptr [RDX + RAX*0x8]
TEST RAX,RAX
JZ 0x0019adf9
MOV ESI,dword ptr [RAX + 0x20]
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x50]
MOV RDX,qword ptr [RAX]
MOV RDI,RAX
CALL qword ptr [RDX + 0x28]
TEST EAX,EAX
JZ 0x0019ae70
MOV RSI,qword ptr [RBX + 0x8]
MOV RDX,qword ptr [RBX + 0x10]
MOV ECX,EAX
SUB RDX,RSI
SAR RDX,0x3
CMP RCX,RDX
JA 0x0019ae70
SUB EAX,0x1
MOV RAX,qword ptr [RSI + RAX*0x8]
TEST RAX,RAX
JZ 0x0019ae70
CMP byte ptr [RAX],0x0
JZ 0x0019af0c
MOV EAX,dword ptr [RAX + 0x60]
TEST EAX,EAX
JNZ 0x0019ae5b
MOV RAX,qword ptr [0x004586c8]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0019af24
MOV EAX,dword ptr [RAX + 0x91f4]
CMP EAX,0x1
JZ 0x0019ae70
CMP EAX,0x2
SETZ AL
ADD RSP,0x18
POP RBX
POP RBP
RET
LEA EAX,[RBP + RBP*0x2]
MOV RCX,qword ptr [RBX + 0x100]
MOV RSI,qword ptr [RBX + 0x108]
XOR EDI,EDI
LEA EDX,[0x10 + RAX*0x8]
MOV EAX,dword ptr [RCX + RDX*0x1]
BSWAP EAX
MOV EAX,EAX
CMP RAX,qword ptr [RBX + 0x110]
JNC 0x0019ae9f
LEA RDI,[RSI + RAX*0x1]
LEA RAX,[RCX + RDX*0x1 + 0x8]
MOV RSI,RSP
MOV RBX,qword ptr [RAX]
MOV EBP,dword ptr [RAX + 0x8]
MOV qword ptr [RSP],0x0
MOV dword ptr [RSP + 0x8],0x0
CALL 0x00186ab0
TEST AL,AL
JZ 0x0019aee8
BSWAP RBX
CMP qword ptr [RSP],RBX
JG 0x0019ae66
MOV EAX,0x0
JNZ 0x0019ae66
BSWAP EBP
CMP dword ptr [RSP + 0x8],EBP
SETG AL
JMP 0x0019ae66
ADD RSP,0x18
MOV EAX,0x1
POP RBX
POP RBP
RET
LEA RDX,[0x38ae90]
MOV ESI,0x45c
LEA RDI,[0x38a1be]
CALL 0x0018dcf0
LEA RDX,[0x38c608]
MOV ESI,0x828
LEA RDI,[0x3887fe]
CALL 0x0018dcf0
LEA RDX,[0x38bf88]
MOV ESI,0x5c
LEA RDI,[0x380279]
CALL 0x0018dcf0
(translation_unit "ulong FUN_0019add0(long *param_1,ulong param_2)\n\n{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}\n\n" (function_definition "ulong FUN_0019add0(long *param_1,ulong param_2)\n\n{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_0019add0(long *param_1,ulong param_2)" identifier (parameter_list "(long *param_1,ulong param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_28;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar8 = (uint)param_2;" (assignment_expression "uVar8 = (uint)param_2" identifier = (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" if (parenthesized_expression "(*(uint *)(param_1 + 0x23) <= uVar8)" ( (binary_expression "*(uint *)(param_1 + 0x23) <= uVar8" (pointer_expression "*(uint *)(param_1 + 0x23)" * (cast_expression "(uint *)(param_1 + 0x23)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x23)" ( (binary_expression "param_1 + 0x23" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" { comment (expression_statement "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");" (call_expression "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset")" identifier (argument_list "("../../gold/incremental.h",0x45c,"input_file_offset")" ( (string_literal ""../../gold/incremental.h"" " string_content ") , number_literal , (string_literal ""input_file_offset"" " string_content ") ))) ;) })) (expression_statement "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);" (assignment_expression "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" identifier = (pointer_expression "*(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" * (cast_expression "(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[7] + (param_2 & 0xffffffff) * 8)" ( (binary_expression "param_1[7] + (param_2 & 0xffffffff) * 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + (binary_expression "(param_2 & 0xffffffff) * 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) * number_literal)) ))))) ;) (if_statement "if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" { (expression_statement "param_2 = (ulong)*(uint *)(lVar9 + 0x20);" (assignment_expression "param_2 = (ulong)*(uint *)(lVar9 + 0x20)" identifier = (binary_expression "(ulong)*(uint *)(lVar9 + 0x20)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(lVar9 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) ))))) ;) })) (expression_statement "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);" (assignment_expression "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" identifier = (cast_expression "(long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*param_1 + 0x50))(param_1,param_2)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_2)" ( identifier , identifier ))))) ;) (expression_statement "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);" (assignment_expression "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5)" identifier = (call_expression "(**(code **)(*plVar5 + 0x28))(plVar5)" (parenthesized_expression "(**(code **)(*plVar5 + 0x28))" ( (pointer_expression "**(code **)(*plVar5 + 0x28)" * (pointer_expression "*(code **)(*plVar5 + 0x28)" * (cast_expression "(code **)(*plVar5 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar5 + 0x28)" ( (binary_expression "*plVar5 + 0x28" (pointer_expression "*plVar5" * identifier) + number_literal) ))))) )) (argument_list "(plVar5)" ( identifier )))) ;) (if_statement "if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" if (parenthesized_expression "(((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0))" ( (binary_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" (parenthesized_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)))" ( (binary_expression "(uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) && (parenthesized_expression "((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" ( (binary_expression "(ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) <= (call_expression "(ulong)(param_1[2] - param_1[1] >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - param_1[1] >> 3)" ( (binary_expression "param_1[2] - param_1[1] >> 3" (binary_expression "param_1[2] - param_1[1]" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (subscript_expression "param_1[1]" identifier [ number_literal ])) >> number_literal) )))) ))) )) && (parenthesized_expression "(pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" ( (comma_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0" (assignment_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" identifier = (pointer_expression "*(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" * (cast_expression "(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[1] + (ulong)(uVar4 - 1) * 8)" ( (binary_expression "param_1[1] + (ulong)(uVar4 - 1) * 8" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (binary_expression "(ulong)(uVar4 - 1) * 8" (call_expression "(ulong)(uVar4 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar4 - 1)" ( (binary_expression "uVar4 - 1" identifier - number_literal) ))) * number_literal)) ))))) , (binary_expression "pcVar3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" { (if_statement "if (*pcVar3 == '\0') {\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" if (parenthesized_expression "(*pcVar3 == '\0')" ( (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" { comment (expression_statement "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);" (call_expression "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608)" identifier (argument_list "("../../gold/options.h",0x828,&DAT_0038c608)" ( (string_literal ""../../gold/options.h"" " string_content ") , number_literal , (pointer_expression "&DAT_0038c608" & identifier) ))) ;) })) (expression_statement "iVar2 = *(int *)(pcVar3 + 0x60);" (assignment_expression "iVar2 = *(int *)(pcVar3 + 0x60)" identifier = (pointer_expression "*(int *)(pcVar3 + 0x60)" * (cast_expression "(int *)(pcVar3 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar3 + 0x60)" ( (binary_expression "pcVar3 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" { (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" if (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" { comment (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (expression_statement "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);" (assignment_expression "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" identifier = (pointer_expression "*(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" * (cast_expression "(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) })) (if_statement "if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" if (parenthesized_expression "(iVar2 != 1)" ( (binary_expression "iVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" { (return_statement "return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);" return (cast_expression "(ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" identifier (argument_list "((int3)((uint)iVar2 >> 8),iVar2 == 2)" ( (call_expression "(int3)((uint)iVar2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "((uint)iVar2 >> 8)" ( (binary_expression "(uint)iVar2 >> 8" (cast_expression "(uint)iVar2" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) ))) , (binary_expression "iVar2 == 2" identifier == number_literal) )))) ;) })) })) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = (ulong)(uVar8 * 0x18 + 0x10);" (assignment_expression "uVar6 = (ulong)(uVar8 * 0x18 + 0x10)" identifier = (call_expression "(ulong)(uVar8 * 0x18 + 0x10)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 * 0x18 + 0x10)" ( (binary_expression "uVar8 * 0x18 + 0x10" (binary_expression "uVar8 * 0x18" identifier * number_literal) + number_literal) )))) ;) (expression_statement "uVar8 = *(uint *)(param_1[0x20] + uVar6);" (assignment_expression "uVar8 = *(uint *)(param_1[0x20] + uVar6)" identifier = (pointer_expression "*(uint *)(param_1[0x20] + uVar6)" * (cast_expression "(uint *)(param_1[0x20] + uVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x20] + uVar6)" ( (binary_expression "param_1[0x20] + uVar6" (subscript_expression "param_1[0x20]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);" (assignment_expression "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" identifier = (call_expression "(ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) )))) ;) (if_statement "if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }" if (parenthesized_expression "(uVar7 < (ulong)param_1[0x22])" ( (binary_expression "uVar7 < (ulong)param_1[0x22]" identifier < (cast_expression "(ulong)param_1[0x22]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ]))) )) (compound_statement "{\n    lVar9 = param_1[0x21] + uVar7;\n  }" { (expression_statement "lVar9 = param_1[0x21] + uVar7;" (assignment_expression "lVar9 = param_1[0x21] + uVar7" identifier = (binary_expression "param_1[0x21] + uVar7" (subscript_expression "param_1[0x21]" identifier [ number_literal ]) + identifier)) ;) })) (expression_statement "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);" (assignment_expression "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6)" identifier = (cast_expression "(ulong *)(param_1[0x20] + 8 + uVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x20] + 8 + uVar6)" ( (binary_expression "param_1[0x20] + 8 + uVar6" (binary_expression "param_1[0x20] + 8" (subscript_expression "param_1[0x20]" identifier [ number_literal ]) + number_literal) + identifier) )))) ;) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = (uint)puVar1[1];" (assignment_expression "uVar8 = (uint)puVar1[1]" identifier = (cast_expression "(uint)puVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar1[1]" identifier [ number_literal ]))) ;) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = FUN_00186ab0(lVar9,&local_28);" (assignment_expression "uVar6 = FUN_00186ab0(lVar9,&local_28)" identifier = (call_expression "FUN_00186ab0(lVar9,&local_28)" identifier (argument_list "(lVar9,&local_28)" ( identifier , (pointer_expression "&local_28" & identifier) )))) ;) (if_statement "if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" if (parenthesized_expression "((char)uVar6 != '\0')" ( (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" { (expression_statement "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;" (assignment_expression "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" identifier = (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28" (binary_expression "uVar7 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar7 & 0xff000000000000)" ( (binary_expression "uVar7 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar7 & 0xff0000000000)" ( (binary_expression "uVar7 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00000000) >> 8" (parenthesized_expression "(uVar7 & 0xff00000000)" ( (binary_expression "uVar7 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff000000) << 8" (parenthesized_expression "(uVar7 & 0xff000000)" ( (binary_expression "uVar7 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar7 & 0xff0000) << 0x18" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar7 & 0xff00) << 0x28" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x38" identifier << number_literal))) ;) (if_statement "if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" if (parenthesized_expression "(((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7))" ( (binary_expression "((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)" (parenthesized_expression "((long)local_28 <= (long)uVar7)" ( (binary_expression "(long)local_28 <= (long)uVar7" (cast_expression "(long)local_28" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "(uVar6 = 0, local_28 == uVar7)" ( (comma_expression "uVar6 = 0, local_28 == uVar7" (assignment_expression "uVar6 = 0" identifier = number_literal) , (binary_expression "local_28 == uVar7" identifier == identifier)) ))) )) (compound_statement "{\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" { (expression_statement "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);" (assignment_expression "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" identifier = (call_expression "(ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" ( (binary_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20" (cast_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) ))) < identifier) )))) ;) })) (return_statement "return uVar6;" return identifier ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original prototype: bool do_file_has_changed(Sized_incremental_binary<64,_true> * this,\n   uint n) */\n\nbool __thiscall\ngold::Sized_incremental_binary<64,_true>::do_file_has_changed\n          (Sized_incremental_binary<64,_true> *this,uint n)\n\n{\n  ulong *puVar1;\n  Script_info *pSVar2;\n  pointer ppIVar3;\n  Input_argument *pIVar4;\n  uchar *puVar5;\n  bool bVar6;\n  int iVar7;\n  uint uVar8;\n  Incremental_disposition IVar9;\n  undefined4 extraout_var;\n  ulong uVar10;\n  ulong uVar11;\n  undefined4 in_register_00000034;\n  char *filename;\n  Timespec new_mtime;\n  \n  uVar11 = CONCAT44(in_register_00000034,n);\n  if ((this->inputs_reader_).input_file_count_ <= n) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl.\n           _M_start[n];\n  if (pSVar2 != (Script_info *)0x0) {\n    uVar11 = (ulong)pSVar2->input_file_index_;\n  }\n  iVar7 = (*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,uVar11);\n  uVar8 = (**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))();\n  if (((uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&\n     (pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0)) {\n    if (pIVar4->is_file_ == false) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/options.h",0x828,"file");\n    }\n    IVar9 = (pIVar4->file_).options_.incremental_disposition_;\n    if (IVar9 == INCREMENTAL_STARTUP) {\n      if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }\n      IVar9 = parameters->options_->incremental_startup_disposition_;\n    }\n    if (IVar9 != INCREMENTAL_CHECK) {\n      return IVar9 == INCREMENTAL_CHANGED;\n    }\n  }\n  puVar5 = (this->inputs_reader_).p_;\n  filename = (char *)0x0;\n  uVar10 = (ulong)(n * 0x18 + 0x10);\n  uVar8 = *(uint *)(puVar5 + uVar10);\n  uVar11 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar11 < (this->inputs_reader_).strtab_.usable_size_) {\n    filename = (this->inputs_reader_).strtab_.base_ + uVar11;\n  }\n  puVar1 = (ulong *)(puVar5 + uVar10 + 8);\n  uVar11 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  new_mtime.seconds = 0;\n  new_mtime.nanoseconds = 0;\n  bVar6 = get_mtime(filename,&new_mtime);\n  if (bVar6) {\n    uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38;\n    if ((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)) {\n      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;\n    }\n    return bVar6;\n  }\n  return true;\n}\n\n" comment comment comment (declaration "bool __thiscall\ngold::Sized_incremental_binary<64,_true>::do_file_has_changed\n          (Sized_incremental_binary<64,_true> *this,uint n)\n\n{\n  ulong *puVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_true>::do_file_has_changed\n          (Sized_incremental_binary<64,_true> *this,uint n)\n\n{\n  ulong" identifier > : : (function_declarator "do_file_has_changed\n          (Sized_incremental_binary<64,_true> *this,uint n)" identifier (parameter_list "(Sized_incremental_binary<64,_true> *this,uint n)" ( (parameter_declaration "Sized_incremental_binary" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_true> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint n" type_identifier identifier) ))) { identifier) (pointer_declarator "*puVar1" * identifier) ;) (declaration "Script_info *pSVar2;" type_identifier (pointer_declarator "*pSVar2" * identifier) ;) (declaration "pointer ppIVar3;" type_identifier identifier ;) (declaration "Input_argument *pIVar4;" type_identifier (pointer_declarator "*pIVar4" * identifier) ;) (declaration "uchar *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "Incremental_disposition IVar9;" type_identifier identifier ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "undefined4 in_register_00000034;" type_identifier identifier ;) (declaration "char *filename;" primitive_type (pointer_declarator "*filename" * identifier) ;) (declaration "Timespec new_mtime;" type_identifier identifier ;) (expression_statement "uVar11 = CONCAT44(in_register_00000034,n);" (assignment_expression "uVar11 = CONCAT44(in_register_00000034,n)" identifier = (call_expression "CONCAT44(in_register_00000034,n)" identifier (argument_list "(in_register_00000034,n)" ( identifier , identifier )))) ;) (if_statement "if ((this->inputs_reader_).input_file_count_ <= n) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" if (parenthesized_expression "((this->inputs_reader_).input_file_count_ <= n)" ( (binary_expression "(this->inputs_reader_).input_file_count_ <= n" (field_expression "(this->inputs_reader_).input_file_count_" (parenthesized_expression "(this->inputs_reader_)" ( (field_expression "this->inputs_reader_" identifier -> field_identifier) )) . field_identifier) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset");" (call_expression "do_gold_unreachable("../../gold/incremental.h",0x45c,"input_file_offset")" identifier (argument_list "("../../gold/incremental.h",0x45c,"input_file_offset")" ( (string_literal ""../../gold/incremental.h"" " string_content ") , number_literal , (string_literal ""input_file_offset"" " string_content ") ))) ;) })) (expression_statement "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl.\n           _M_start[n];" (subscript_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl.\n           _M_start[n]" (field_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl.\n           _M_start" (field_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl" (binary_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_" (binary_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std::allocator<gold" (binary_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold::Script_info*,_std" (assignment_expression "pSVar2 = (this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold" identifier = (binary_expression "(this->super_Incremental_binary).script_map_.\n           super__Vector_base<gold" (field_expression "(this->super_Incremental_binary).script_map_.\n           super__Vector_base" (field_expression "(this->super_Incremental_binary).script_map_" (parenthesized_expression "(this->super_Incremental_binary)" ( (field_expression "this->super_Incremental_binary" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) (ERROR "::Script_info" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Script_info" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) [ identifier ]) ;) (if_statement "if (pSVar2 != (Script_info *)0x0) {\n    uVar11 = (ulong)pSVar2->input_file_index_;\n  }" if (parenthesized_expression "(pSVar2 != (Script_info *)0x0)" ( (binary_expression "pSVar2 != (Script_info *)0x0" identifier != (cast_expression "(Script_info *)0x0" ( (type_descriptor "Script_info *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar11 = (ulong)pSVar2->input_file_index_;\n  }" { (expression_statement "uVar11 = (ulong)pSVar2->input_file_index_;" (assignment_expression "uVar11 = (ulong)pSVar2->input_file_index_" identifier = (cast_expression "(ulong)pSVar2->input_file_index_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "pSVar2->input_file_index_" identifier -> field_identifier))) ;) })) (expression_statement "iVar7 = (*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,uVar11);" (assignment_expression "iVar7 = (*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,uVar11)" identifier = (call_expression "(*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,uVar11)" (parenthesized_expression "(*(this->super_Incremental_binary)._vptr_Incremental_binary[10])" ( (pointer_expression "*(this->super_Incremental_binary)._vptr_Incremental_binary[10]" * (subscript_expression "(this->super_Incremental_binary)._vptr_Incremental_binary[10]" (field_expression "(this->super_Incremental_binary)._vptr_Incremental_binary" (parenthesized_expression "(this->super_Incremental_binary)" ( (field_expression "this->super_Incremental_binary" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(this,uVar11)" ( identifier , identifier )))) ;) (expression_statement "uVar8 = (**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))();" (assignment_expression "uVar8 = (**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))()" identifier = (call_expression "(**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))()" (parenthesized_expression "(**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28))" ( (pointer_expression "**(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28)" * (pointer_expression "*(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28)" * (cast_expression "(code **)(*(long *)CONCAT44(extraout_var,iVar7) + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)CONCAT44(extraout_var,iVar7) + 0x28)" ( (binary_expression "*(long *)CONCAT44(extraout_var,iVar7) + 0x28" (pointer_expression "*(long *)CONCAT44(extraout_var,iVar7)" * (cast_expression "(long *)CONCAT44(extraout_var,iVar7)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(extraout_var,iVar7)" identifier (argument_list "(extraout_var,iVar7)" ( identifier , identifier ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (if_statement "if (((uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&\n     (pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0)) {\n    if (pIVar4->is_file_ == false) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/options.h",0x828,"file");\n    }\n    IVar9 = (pIVar4->file_).options_.incremental_disposition_;\n    if (IVar9 == INCREMENTAL_STARTUP) {\n      if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }\n      IVar9 = parameters->options_->incremental_startup_disposition_;\n    }\n    if (IVar9 != INCREMENTAL_CHECK) {\n      return IVar9 == INCREMENTAL_CHANGED;\n    }\n  }" if (parenthesized_expression "(((uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&\n     (pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0))" ( (binary_expression "((uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&\n     (pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0)" (parenthesized_expression "((uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3)))" ( (binary_expression "(uVar8 != 0) &&\n      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))" (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) && (parenthesized_expression "(ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3))" ( (comma_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start,\n      (ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3)" (field_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl._M_start" (field_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                 ._M_impl" (binary_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_" (binary_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold" (binary_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold::Input_argument*,_std" (assignment_expression "ppIVar3 = (this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold" identifier = (binary_expression "(this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base<const_gold" (field_expression "(this->super_Incremental_binary).input_args_map_.\n                 super__Vector_base" (field_expression "(this->super_Incremental_binary).input_args_map_" (parenthesized_expression "(this->super_Incremental_binary)" ( (field_expression "this->super_Incremental_binary" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) (ERROR "::Input_argument" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Input_argument" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) , (binary_expression "(ulong)uVar8 <=\n      (ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3)" (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) <= (call_expression "(ulong)((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3)" ( (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3 >> 3" (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish - (long)ppIVar3" (field_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl._M_finish" (field_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_>\n                    ._M_impl" (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold::Input_argument*>_" (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std::allocator<const_gold" (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold::Input_argument*,_std" (binary_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base<const_gold" (cast_expression "(long)(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->super_Incremental_binary).input_args_map_.\n                    super__Vector_base" (field_expression "(this->super_Incremental_binary).input_args_map_" (parenthesized_expression "(this->super_Incremental_binary)" ( (field_expression "this->super_Incremental_binary" identifier -> field_identifier) )) . field_identifier) . field_identifier)) < identifier) (ERROR "::Input_argument" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Input_argument" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(long)ppIVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) ))))) ))) )) && (parenthesized_expression "(pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0)" ( (comma_expression "pIVar4 = ppIVar3[uVar8 - 1], pIVar4 != (Input_argument *)0x0" (assignment_expression "pIVar4 = ppIVar3[uVar8 - 1]" identifier = (subscript_expression "ppIVar3[uVar8 - 1]" identifier [ (binary_expression "uVar8 - 1" identifier - number_literal) ])) , (binary_expression "pIVar4 != (Input_argument *)0x0" identifier != (cast_expression "(Input_argument *)0x0" ( (type_descriptor "Input_argument *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if (pIVar4->is_file_ == false) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/options.h",0x828,"file");\n    }\n    IVar9 = (pIVar4->file_).options_.incremental_disposition_;\n    if (IVar9 == INCREMENTAL_STARTUP) {\n      if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }\n      IVar9 = parameters->options_->incremental_startup_disposition_;\n    }\n    if (IVar9 != INCREMENTAL_CHECK) {\n      return IVar9 == INCREMENTAL_CHANGED;\n    }\n  }" { (if_statement "if (pIVar4->is_file_ == false) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/options.h",0x828,"file");\n    }" if (parenthesized_expression "(pIVar4->is_file_ == false)" ( (binary_expression "pIVar4->is_file_ == false" (field_expression "pIVar4->is_file_" identifier -> field_identifier) == false) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/options.h",0x828,"file");\n    }" { comment (expression_statement "do_gold_unreachable("../../gold/options.h",0x828,"file");" (call_expression "do_gold_unreachable("../../gold/options.h",0x828,"file")" identifier (argument_list "("../../gold/options.h",0x828,"file")" ( (string_literal ""../../gold/options.h"" " string_content ") , number_literal , (string_literal ""file"" " string_content ") ))) ;) })) (expression_statement "IVar9 = (pIVar4->file_).options_.incremental_disposition_;" (assignment_expression "IVar9 = (pIVar4->file_).options_.incremental_disposition_" identifier = (field_expression "(pIVar4->file_).options_.incremental_disposition_" (field_expression "(pIVar4->file_).options_" (parenthesized_expression "(pIVar4->file_)" ( (field_expression "pIVar4->file_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (IVar9 == INCREMENTAL_STARTUP) {\n      if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }\n      IVar9 = parameters->options_->incremental_startup_disposition_;\n    }" if (parenthesized_expression "(IVar9 == INCREMENTAL_STARTUP)" ( (binary_expression "IVar9 == INCREMENTAL_STARTUP" identifier == identifier) )) (compound_statement "{\n      if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }\n      IVar9 = parameters->options_->incremental_startup_disposition_;\n    }" { (if_statement "if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }" if (parenthesized_expression "(parameters->options_ == (General_options *)0x0)" ( (binary_expression "parameters->options_ == (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n      }" { comment (expression_statement "do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" (call_expression "do_gold_unreachable("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (expression_statement "IVar9 = parameters->options_->incremental_startup_disposition_;" (assignment_expression "IVar9 = parameters->options_->incremental_startup_disposition_" identifier = (field_expression "parameters->options_->incremental_startup_disposition_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier)) ;) })) (if_statement "if (IVar9 != INCREMENTAL_CHECK) {\n      return IVar9 == INCREMENTAL_CHANGED;\n    }" if (parenthesized_expression "(IVar9 != INCREMENTAL_CHECK)" ( (binary_expression "IVar9 != INCREMENTAL_CHECK" identifier != identifier) )) (compound_statement "{\n      return IVar9 == INCREMENTAL_CHANGED;\n    }" { (return_statement "return IVar9 == INCREMENTAL_CHANGED;" return (binary_expression "IVar9 == INCREMENTAL_CHANGED" identifier == identifier) ;) })) })) (expression_statement "puVar5 = (this->inputs_reader_).p_;" (assignment_expression "puVar5 = (this->inputs_reader_).p_" identifier = (field_expression "(this->inputs_reader_).p_" (parenthesized_expression "(this->inputs_reader_)" ( (field_expression "this->inputs_reader_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "filename = (char *)0x0;" (assignment_expression "filename = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar10 = (ulong)(n * 0x18 + 0x10);" (assignment_expression "uVar10 = (ulong)(n * 0x18 + 0x10)" identifier = (call_expression "(ulong)(n * 0x18 + 0x10)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(n * 0x18 + 0x10)" ( (binary_expression "n * 0x18 + 0x10" (binary_expression "n * 0x18" identifier * number_literal) + number_literal) )))) ;) (expression_statement "uVar8 = *(uint *)(puVar5 + uVar10);" (assignment_expression "uVar8 = *(uint *)(puVar5 + uVar10)" identifier = (pointer_expression "*(uint *)(puVar5 + uVar10)" * (cast_expression "(uint *)(puVar5 + uVar10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + uVar10)" ( (binary_expression "puVar5 + uVar10" identifier + identifier) ))))) ;) (expression_statement "uVar11 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);" (assignment_expression "uVar11 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" identifier = (call_expression "(ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) )))) ;) (if_statement "if (uVar11 < (this->inputs_reader_).strtab_.usable_size_) {\n    filename = (this->inputs_reader_).strtab_.base_ + uVar11;\n  }" if (parenthesized_expression "(uVar11 < (this->inputs_reader_).strtab_.usable_size_)" ( (binary_expression "uVar11 < (this->inputs_reader_).strtab_.usable_size_" identifier < (field_expression "(this->inputs_reader_).strtab_.usable_size_" (field_expression "(this->inputs_reader_).strtab_" (parenthesized_expression "(this->inputs_reader_)" ( (field_expression "this->inputs_reader_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    filename = (this->inputs_reader_).strtab_.base_ + uVar11;\n  }" { (expression_statement "filename = (this->inputs_reader_).strtab_.base_ + uVar11;" (assignment_expression "filename = (this->inputs_reader_).strtab_.base_ + uVar11" identifier = (binary_expression "(this->inputs_reader_).strtab_.base_ + uVar11" (field_expression "(this->inputs_reader_).strtab_.base_" (field_expression "(this->inputs_reader_).strtab_" (parenthesized_expression "(this->inputs_reader_)" ( (field_expression "this->inputs_reader_" identifier -> field_identifier) )) . field_identifier) . field_identifier) + identifier)) ;) })) (expression_statement "puVar1 = (ulong *)(puVar5 + uVar10 + 8);" (assignment_expression "puVar1 = (ulong *)(puVar5 + uVar10 + 8)" identifier = (cast_expression "(ulong *)(puVar5 + uVar10 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + uVar10 + 8)" ( (binary_expression "puVar5 + uVar10 + 8" (binary_expression "puVar5 + uVar10" identifier + identifier) + number_literal) )))) ;) (expression_statement "uVar11 = *puVar1;" (assignment_expression "uVar11 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = (uint)puVar1[1];" (assignment_expression "uVar8 = (uint)puVar1[1]" identifier = (cast_expression "(uint)puVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar1[1]" identifier [ number_literal ]))) ;) (expression_statement "new_mtime.seconds = 0;" (assignment_expression "new_mtime.seconds = 0" (field_expression "new_mtime.seconds" identifier . field_identifier) = number_literal) ;) (expression_statement "new_mtime.nanoseconds = 0;" (assignment_expression "new_mtime.nanoseconds = 0" (field_expression "new_mtime.nanoseconds" identifier . field_identifier) = number_literal) ;) (expression_statement "bVar6 = get_mtime(filename,&new_mtime);" (assignment_expression "bVar6 = get_mtime(filename,&new_mtime)" identifier = (call_expression "get_mtime(filename,&new_mtime)" identifier (argument_list "(filename,&new_mtime)" ( identifier , (pointer_expression "&new_mtime" & identifier) )))) ;) (if_statement "if (bVar6) {\n    uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38;\n    if ((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)) {\n      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;\n    }\n    return bVar6;\n  }" if (parenthesized_expression "(bVar6)" ( identifier )) (compound_statement "{\n    uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38;\n    if ((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)) {\n      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;\n    }\n    return bVar6;\n  }" { (expression_statement "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38;" (assignment_expression "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28 |\n             uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 | (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n             (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n             (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) (if_statement "if ((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)) {\n      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;\n    }" if (parenthesized_expression "((new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11))" ( (binary_expression "(new_mtime.seconds <= (long)uVar11) && (bVar6 = false, new_mtime.seconds == uVar11)" (parenthesized_expression "(new_mtime.seconds <= (long)uVar11)" ( (binary_expression "new_mtime.seconds <= (long)uVar11" (field_expression "new_mtime.seconds" identifier . field_identifier) <= (cast_expression "(long)uVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "(bVar6 = false, new_mtime.seconds == uVar11)" ( (comma_expression "bVar6 = false, new_mtime.seconds == uVar11" (assignment_expression "bVar6 = false" identifier = false) , (binary_expression "new_mtime.seconds == uVar11" (field_expression "new_mtime.seconds" identifier . field_identifier) == identifier)) ))) )) (compound_statement "{\n      bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;\n    }" { (expression_statement "bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds;" (assignment_expression "bVar6 = (int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds" identifier = (binary_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)\n              < new_mtime.nanoseconds" (cast_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) ))) < (field_expression "new_mtime.nanoseconds" identifier . field_identifier))) ;) })) (return_statement "return bVar6;" return identifier ;) })) (return_statement "return true;" return true ;) (ERROR "}" }))
(translation_unit "ulong FUN_0019add0(long *param_1,ulong param_2)\n\n{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}\n\n" (function_definition "ulong FUN_0019add0(long *param_1,ulong param_2)\n\n{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_0019add0(long *param_1,ulong param_2)" identifier (parameter_list "(long *param_1,ulong param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_28;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar8 = (uint)param_2;" (assignment_expression "uVar8 = (uint)param_2" identifier = (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" if (parenthesized_expression "(*(uint *)(param_1 + 0x23) <= uVar8)" ( (binary_expression "*(uint *)(param_1 + 0x23) <= uVar8" (pointer_expression "*(uint *)(param_1 + 0x23)" * (cast_expression "(uint *)(param_1 + 0x23)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x23)" ( (binary_expression "param_1 + 0x23" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" { (expression_statement "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");" (call_expression "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset")" identifier (argument_list "("../../gold/incremental.h",0x45c,"input_file_offset")" ( (string_literal ""../../gold/incremental.h"" " string_content ") , number_literal , (string_literal ""input_file_offset"" " string_content ") ))) ;) })) (expression_statement "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);" (assignment_expression "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" identifier = (pointer_expression "*(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" * (cast_expression "(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[7] + (param_2 & 0xffffffff) * 8)" ( (binary_expression "param_1[7] + (param_2 & 0xffffffff) * 8" (subscript_expression "param_1[7]" identifier [ number_literal ]) + (binary_expression "(param_2 & 0xffffffff) * 8" (parenthesized_expression "(param_2 & 0xffffffff)" ( (binary_expression "param_2 & 0xffffffff" identifier & number_literal) )) * number_literal)) ))))) ;) (if_statement "if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" { (expression_statement "param_2 = (ulong)*(uint *)(lVar9 + 0x20);" (assignment_expression "param_2 = (ulong)*(uint *)(lVar9 + 0x20)" identifier = (binary_expression "(ulong)*(uint *)(lVar9 + 0x20)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(lVar9 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) ))))) ;) })) (expression_statement "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);" (assignment_expression "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" identifier = (cast_expression "(long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*param_1 + 0x50))(param_1,param_2)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_2)" ( identifier , identifier ))))) ;) (expression_statement "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);" (assignment_expression "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5)" identifier = (call_expression "(**(code **)(*plVar5 + 0x28))(plVar5)" (parenthesized_expression "(**(code **)(*plVar5 + 0x28))" ( (pointer_expression "**(code **)(*plVar5 + 0x28)" * (pointer_expression "*(code **)(*plVar5 + 0x28)" * (cast_expression "(code **)(*plVar5 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar5 + 0x28)" ( (binary_expression "*plVar5 + 0x28" (pointer_expression "*plVar5" * identifier) + number_literal) ))))) )) (argument_list "(plVar5)" ( identifier )))) ;) (if_statement "if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" if (parenthesized_expression "(((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0))" ( (binary_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" (parenthesized_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)))" ( (binary_expression "(uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) && (parenthesized_expression "((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" ( (binary_expression "(ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) <= (call_expression "(ulong)(param_1[2] - param_1[1] >> 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - param_1[1] >> 3)" ( (binary_expression "param_1[2] - param_1[1] >> 3" (binary_expression "param_1[2] - param_1[1]" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (subscript_expression "param_1[1]" identifier [ number_literal ])) >> number_literal) )))) ))) )) && (parenthesized_expression "(pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" ( (comma_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0" (assignment_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" identifier = (pointer_expression "*(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" * (cast_expression "(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[1] + (ulong)(uVar4 - 1) * 8)" ( (binary_expression "param_1[1] + (ulong)(uVar4 - 1) * 8" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (binary_expression "(ulong)(uVar4 - 1) * 8" (call_expression "(ulong)(uVar4 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar4 - 1)" ( (binary_expression "uVar4 - 1" identifier - number_literal) ))) * number_literal)) ))))) , (binary_expression "pcVar3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" { (if_statement "if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" if (parenthesized_expression "(*pcVar3 == '\0')" ( (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" { (expression_statement "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);" (call_expression "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608)" identifier (argument_list "("../../gold/options.h",0x828,&DAT_0038c608)" ( (string_literal ""../../gold/options.h"" " string_content ") , number_literal , (pointer_expression "&DAT_0038c608" & identifier) ))) ;) })) (expression_statement "iVar2 = *(int *)(pcVar3 + 0x60);" (assignment_expression "iVar2 = *(int *)(pcVar3 + 0x60)" identifier = (pointer_expression "*(int *)(pcVar3 + 0x60)" * (cast_expression "(int *)(pcVar3 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar3 + 0x60)" ( (binary_expression "pcVar3 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" { (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" if (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" { (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (expression_statement "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);" (assignment_expression "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" identifier = (pointer_expression "*(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" * (cast_expression "(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) })) (if_statement "if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" if (parenthesized_expression "(iVar2 != 1)" ( (binary_expression "iVar2 != 1" identifier != number_literal) )) (compound_statement "{\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" { (return_statement "return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);" return (cast_expression "(ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" identifier (argument_list "((int3)((uint)iVar2 >> 8),iVar2 == 2)" ( (call_expression "(int3)((uint)iVar2 >> 8)" (parenthesized_expression "(int3)" ( identifier )) (argument_list "((uint)iVar2 >> 8)" ( (binary_expression "(uint)iVar2 >> 8" (cast_expression "(uint)iVar2" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) ))) , (binary_expression "iVar2 == 2" identifier == number_literal) )))) ;) })) })) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = (ulong)(uVar8 * 0x18 + 0x10);" (assignment_expression "uVar6 = (ulong)(uVar8 * 0x18 + 0x10)" identifier = (call_expression "(ulong)(uVar8 * 0x18 + 0x10)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 * 0x18 + 0x10)" ( (binary_expression "uVar8 * 0x18 + 0x10" (binary_expression "uVar8 * 0x18" identifier * number_literal) + number_literal) )))) ;) (expression_statement "uVar8 = *(uint *)(param_1[0x20] + uVar6);" (assignment_expression "uVar8 = *(uint *)(param_1[0x20] + uVar6)" identifier = (pointer_expression "*(uint *)(param_1[0x20] + uVar6)" * (cast_expression "(uint *)(param_1[0x20] + uVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x20] + uVar6)" ( (binary_expression "param_1[0x20] + uVar6" (subscript_expression "param_1[0x20]" identifier [ number_literal ]) + identifier) ))))) ;) (expression_statement "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);" (assignment_expression "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" identifier = (call_expression "(ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) )))) ;) (if_statement "if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }" if (parenthesized_expression "(uVar7 < (ulong)param_1[0x22])" ( (binary_expression "uVar7 < (ulong)param_1[0x22]" identifier < (cast_expression "(ulong)param_1[0x22]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ]))) )) (compound_statement "{\n    lVar9 = param_1[0x21] + uVar7;\n  }" { (expression_statement "lVar9 = param_1[0x21] + uVar7;" (assignment_expression "lVar9 = param_1[0x21] + uVar7" identifier = (binary_expression "param_1[0x21] + uVar7" (subscript_expression "param_1[0x21]" identifier [ number_literal ]) + identifier)) ;) })) (expression_statement "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);" (assignment_expression "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6)" identifier = (cast_expression "(ulong *)(param_1[0x20] + 8 + uVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x20] + 8 + uVar6)" ( (binary_expression "param_1[0x20] + 8 + uVar6" (binary_expression "param_1[0x20] + 8" (subscript_expression "param_1[0x20]" identifier [ number_literal ]) + number_literal) + identifier) )))) ;) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "uVar8 = (uint)puVar1[1];" (assignment_expression "uVar8 = (uint)puVar1[1]" identifier = (cast_expression "(uint)puVar1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar1[1]" identifier [ number_literal ]))) ;) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) (expression_statement "uVar6 = FUN_00186ab0(lVar9,&local_28);" (assignment_expression "uVar6 = FUN_00186ab0(lVar9,&local_28)" identifier = (call_expression "FUN_00186ab0(lVar9,&local_28)" identifier (argument_list "(lVar9,&local_28)" ( identifier , (pointer_expression "&local_28" & identifier) )))) ;) (if_statement "if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" if (parenthesized_expression "((char)uVar6 != '\0')" ( (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" { (expression_statement "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;" (assignment_expression "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" identifier = (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28" (binary_expression "uVar7 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar7 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar7 & 0xff000000000000)" ( (binary_expression "uVar7 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar7 & 0xff0000000000)" ( (binary_expression "uVar7 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff00000000) >> 8" (parenthesized_expression "(uVar7 & 0xff00000000)" ( (binary_expression "uVar7 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar7 & 0xff000000) << 8" (parenthesized_expression "(uVar7 & 0xff000000)" ( (binary_expression "uVar7 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar7 & 0xff0000) << 0x18" (parenthesized_expression "(uVar7 & 0xff0000)" ( (binary_expression "uVar7 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar7 & 0xff00) << 0x28" (parenthesized_expression "(uVar7 & 0xff00)" ( (binary_expression "uVar7 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar7 << 0x38" identifier << number_literal))) ;) (if_statement "if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" if (parenthesized_expression "(((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7))" ( (binary_expression "((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)" (parenthesized_expression "((long)local_28 <= (long)uVar7)" ( (binary_expression "(long)local_28 <= (long)uVar7" (cast_expression "(long)local_28" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "(uVar6 = 0, local_28 == uVar7)" ( (comma_expression "uVar6 = 0, local_28 == uVar7" (assignment_expression "uVar6 = 0" identifier = number_literal) , (binary_expression "local_28 == uVar7" identifier == identifier)) ))) )) (compound_statement "{\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" { (expression_statement "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);" (assignment_expression "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" identifier = (call_expression "(ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" ( (binary_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20" (cast_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" ( (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" ( (binary_expression "uVar8 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" ( (binary_expression "uVar8 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar8 << 0x18" identifier << number_literal)) ))) < identifier) )))) ;) })) (return_statement "return uVar6;" return identifier ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (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) ))))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ])) >> LIT) )))) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) * LIT)) ))))) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & 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 == LIT) )) (compound_statement { (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 { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (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) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) , (binary_expression IDENT == LIT) )))) ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_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 (subscript_expression IDENT [ LIT ]) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression IDENT == IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) ))) < IDENT) )))) ;) })) (return_statement return IDENT ;) })) (return_statement return LIT ;) })))
(function_definition "ulong FUN_0019add0(long *param_1,ulong param_2)\n\n{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" (type_identifier "ulong") (function_declarator "FUN_0019add0(long *param_1,ulong param_2)" (identifier "FUN_0019add0") (parameter_list "(long *param_1,ulong param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) () ")"))) (compound_statement "{\n  ulong *puVar1;\n  int iVar2;\n  char *pcVar3;\n  uint uVar4;\n  long *plVar5;\n  ulong uVar6;\n  ulong uVar7;\n  uint uVar8;\n  long lVar9;\n  ulong local_28;\n  int local_20;\n  \n  uVar8 = (uint)param_2;\n  if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }\n  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);\n  if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }\n  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);\n  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);\n  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }\n  lVar9 = 0;\n  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);\n  uVar8 = *(uint *)(param_1[0x20] + uVar6);\n  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);\n  if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }\n  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);\n  uVar7 = *puVar1;\n  uVar8 = (uint)puVar1[1];\n  local_28 = 0;\n  local_20 = 0;\n  uVar6 = FUN_00186ab0(lVar9,&local_28);\n  if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }\n  return 1;\n}" ({ "{") (declaration "ulong *puVar1;" (type_identifier "ulong") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "ulong local_28;" (type_identifier "ulong") (identifier "local_28") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "uVar8 = (uint)param_2;" (assignment_expression "uVar8 = (uint)param_2" (identifier "uVar8") (= "=") (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2"))) (; ";")) (if_statement "if (*(uint *)(param_1 + 0x23) <= uVar8) {\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" (if "if") (parenthesized_expression "(*(uint *)(param_1 + 0x23) <= uVar8)" (( "(") (binary_expression "*(uint *)(param_1 + 0x23) <= uVar8" (pointer_expression "*(uint *)(param_1 + 0x23)" (* "*") (cast_expression "(uint *)(param_1 + 0x23)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x23)" (( "(") (binary_expression "param_1 + 0x23" (identifier "param_1") (+ "+") (number_literal "0x23")) () ")")))) (<= "<=") (identifier "uVar8")) () ")")) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");\n  }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");" (call_expression "FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset")" (identifier "FUN_0018dcf0") (argument_list "("../../gold/incremental.h",0x45c,"input_file_offset")" (( "(") (string_literal ""../../gold/incremental.h"" (" """) (string_content "../../gold/incremental.h") (" """)) (, ",") (number_literal "0x45c") (, ",") (string_literal ""input_file_offset"" (" """) (string_content "input_file_offset") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);" (assignment_expression "lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" (* "*") (cast_expression "(long *)(param_1[7] + (param_2 & 0xffffffff) * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[7] + (param_2 & 0xffffffff) * 8)" (( "(") (binary_expression "param_1[7] + (param_2 & 0xffffffff) * 8" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (+ "+") (binary_expression "(param_2 & 0xffffffff) * 8" (parenthesized_expression "(param_2 & 0xffffffff)" (( "(") (binary_expression "param_2 & 0xffffffff" (identifier "param_2") (& "&") (number_literal "0xffffffff")) () ")")) (* "*") (number_literal "8"))) () ")"))))) (; ";")) (if_statement "if (lVar9 != 0) {\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" (if "if") (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    param_2 = (ulong)*(uint *)(lVar9 + 0x20);\n  }" ({ "{") (expression_statement "param_2 = (ulong)*(uint *)(lVar9 + 0x20);" (assignment_expression "param_2 = (ulong)*(uint *)(lVar9 + 0x20)" (identifier "param_2") (= "=") (binary_expression "(ulong)*(uint *)(lVar9 + 0x20)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(lVar9 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x20)" (( "(") (binary_expression "lVar9 + 0x20" (identifier "lVar9") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (} "}"))) (expression_statement "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);" (assignment_expression "plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" (identifier "plVar5") (= "=") (cast_expression "(long *)(**(code **)(*param_1 + 0x50))(param_1,param_2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(*param_1 + 0x50))(param_1,param_2)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x50)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x50)" (* "*") (cast_expression "(code **)(*param_1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x50)" (( "(") (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")"))))) (; ";")) (expression_statement "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);" (assignment_expression "uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*plVar5 + 0x28))(plVar5)" (parenthesized_expression "(**(code **)(*plVar5 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar5 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar5 + 0x28)" (* "*") (cast_expression "(code **)(*plVar5 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar5 + 0x28)" (( "(") (binary_expression "*plVar5 + 0x28" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar5)" (( "(") (identifier "plVar5") () ")")))) (; ";")) (if_statement "if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" (if "if") (parenthesized_expression "(((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0))" (( "(") (binary_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&\n     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" (parenthesized_expression "((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)))" (( "(") (binary_expression "(uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))" (( "(") (binary_expression "(ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3)" (cast_expression "(ulong)uVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar4")) (<= "<=") (call_expression "(ulong)(param_1[2] - param_1[1] >> 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[2] - param_1[1] >> 3)" (( "(") (binary_expression "param_1[2] - param_1[1] >> 3" (binary_expression "param_1[2] - param_1[1]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (- "-") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (>> ">>") (number_literal "3")) () ")")))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)" (( "(") (comma_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0" (assignment_expression "pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" (identifier "pcVar3") (= "=") (pointer_expression "*(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" (* "*") (cast_expression "(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1[1] + (ulong)(uVar4 - 1) * 8)" (( "(") (binary_expression "param_1[1] + (ulong)(uVar4 - 1) * 8" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (binary_expression "(ulong)(uVar4 - 1) * 8" (call_expression "(ulong)(uVar4 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar4 - 1)" (( "(") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1")) () ")"))) (* "*") (number_literal "8"))) () ")"))))) (, ",") (binary_expression "pcVar3 != (char *)0x0" (identifier "pcVar3") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\n    if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }\n    iVar2 = *(int *)(pcVar3 + 0x60);\n    if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }\n    if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }\n  }" ({ "{") (if_statement "if (*pcVar3 == '\0') {\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" (if "if") (parenthesized_expression "(*pcVar3 == '\0')" (( "(") (binary_expression "*pcVar3 == '\0'" (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                    \n      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);\n    }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);" (call_expression "FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608)" (identifier "FUN_0018dcf0") (argument_list "("../../gold/options.h",0x828,&DAT_0038c608)" (( "(") (string_literal ""../../gold/options.h"" (" """) (string_content "../../gold/options.h") (" """)) (, ",") (number_literal "0x828") (, ",") (pointer_expression "&DAT_0038c608" (& "&") (identifier "DAT_0038c608")) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar2 = *(int *)(pcVar3 + 0x60);" (assignment_expression "iVar2 = *(int *)(pcVar3 + 0x60)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(pcVar3 + 0x60)" (* "*") (cast_expression "(int *)(pcVar3 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar3 + 0x60)" (( "(") (binary_expression "pcVar3 + 0x60" (identifier "pcVar3") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (if_statement "if (iVar2 == 0) {\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }\n      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);\n    }" ({ "{") (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" (if "if") (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" (( "(") (binary_expression "PTR_DAT_004586c8 + 0x10" (identifier "PTR_DAT_004586c8") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n      }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" (identifier "FUN_0018dcf0") (argument_list "("../../gold/parameters.h",0x5c,"options")" (( "(") (string_literal ""../../gold/parameters.h"" (" """) (string_content "../../gold/parameters.h") (" """)) (, ",") (number_literal "0x5c") (, ",") (string_literal ""options"" (" """) (string_content "options") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);" (assignment_expression "iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" (* "*") (cast_expression "(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4)" (( "(") (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" (( "(") (binary_expression "PTR_DAT_004586c8 + 0x10" (identifier "PTR_DAT_004586c8") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x91f4")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (iVar2 != 1) {\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" (if "if") (parenthesized_expression "(iVar2 != 1)" (( "(") (binary_expression "iVar2 != 1" (identifier "iVar2") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);\n    }" ({ "{") (return_statement "return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);" (return "return") (cast_expression "(ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (call_expression "CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2)" (identifier "CONCAT31") (argument_list "((int3)((uint)iVar2 >> 8),iVar2 == 2)" (( "(") (call_expression "(int3)((uint)iVar2 >> 8)" (parenthesized_expression "(int3)" (( "(") (identifier "int3") () ")")) (argument_list "((uint)iVar2 >> 8)" (( "(") (binary_expression "(uint)iVar2 >> 8" (cast_expression "(uint)iVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "iVar2")) (>> ">>") (number_literal "8")) () ")"))) (, ",") (binary_expression "iVar2 == 2" (identifier "iVar2") (== "==") (number_literal "2")) () ")")))) (; ";")) (} "}"))) (} "}"))) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" (identifier "lVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar6 = (ulong)(uVar8 * 0x18 + 0x10);" (assignment_expression "uVar6 = (ulong)(uVar8 * 0x18 + 0x10)" (identifier "uVar6") (= "=") (call_expression "(ulong)(uVar8 * 0x18 + 0x10)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar8 * 0x18 + 0x10)" (( "(") (binary_expression "uVar8 * 0x18 + 0x10" (binary_expression "uVar8 * 0x18" (identifier "uVar8") (* "*") (number_literal "0x18")) (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "uVar8 = *(uint *)(param_1[0x20] + uVar6);" (assignment_expression "uVar8 = *(uint *)(param_1[0x20] + uVar6)" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)(param_1[0x20] + uVar6)" (* "*") (cast_expression "(uint *)(param_1[0x20] + uVar6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x20] + uVar6)" (( "(") (binary_expression "param_1[0x20] + uVar6" (subscript_expression "param_1[0x20]" (identifier "param_1") ([ "[") (number_literal "0x20") (] "]")) (+ "+") (identifier "uVar6")) () ")"))))) (; ";")) (expression_statement "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);" (assignment_expression "uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (identifier "uVar7") (= "=") (call_expression "(ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18)" (( "(") (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" (identifier "uVar8") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" (( "(") (binary_expression "uVar8 & 0xff0000" (identifier "uVar8") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" (( "(") (binary_expression "uVar8 & 0xff00" (identifier "uVar8") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar8 << 0x18" (identifier "uVar8") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (if_statement "if (uVar7 < (ulong)param_1[0x22]) {\n    lVar9 = param_1[0x21] + uVar7;\n  }" (if "if") (parenthesized_expression "(uVar7 < (ulong)param_1[0x22])" (( "(") (binary_expression "uVar7 < (ulong)param_1[0x22]" (identifier "uVar7") (< "<") (cast_expression "(ulong)param_1[0x22]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_1[0x22]" (identifier "param_1") ([ "[") (number_literal "0x22") (] "]")))) () ")")) (compound_statement "{\n    lVar9 = param_1[0x21] + uVar7;\n  }" ({ "{") (expression_statement "lVar9 = param_1[0x21] + uVar7;" (assignment_expression "lVar9 = param_1[0x21] + uVar7" (identifier "lVar9") (= "=") (binary_expression "param_1[0x21] + uVar7" (subscript_expression "param_1[0x21]" (identifier "param_1") ([ "[") (number_literal "0x21") (] "]")) (+ "+") (identifier "uVar7"))) (; ";")) (} "}"))) (expression_statement "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);" (assignment_expression "puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6)" (identifier "puVar1") (= "=") (cast_expression "(ulong *)(param_1[0x20] + 8 + uVar6)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x20] + 8 + uVar6)" (( "(") (binary_expression "param_1[0x20] + 8 + uVar6" (binary_expression "param_1[0x20] + 8" (subscript_expression "param_1[0x20]" (identifier "param_1") ([ "[") (number_literal "0x20") (] "]")) (+ "+") (number_literal "8")) (+ "+") (identifier "uVar6")) () ")")))) (; ";")) (expression_statement "uVar7 = *puVar1;" (assignment_expression "uVar7 = *puVar1" (identifier "uVar7") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (expression_statement "uVar8 = (uint)puVar1[1];" (assignment_expression "uVar8 = (uint)puVar1[1]" (identifier "uVar8") (= "=") (cast_expression "(uint)puVar1[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" (identifier "local_28") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" (identifier "local_20") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar6 = FUN_00186ab0(lVar9,&local_28);" (assignment_expression "uVar6 = FUN_00186ab0(lVar9,&local_28)" (identifier "uVar6") (= "=") (call_expression "FUN_00186ab0(lVar9,&local_28)" (identifier "FUN_00186ab0") (argument_list "(lVar9,&local_28)" (( "(") (identifier "lVar9") (, ",") (pointer_expression "&local_28" (& "&") (identifier "local_28")) () ")")))) (; ";")) (if_statement "if ((char)uVar6 != '\0') {\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" (if "if") (parenthesized_expression "((char)uVar6 != '\0')" (( "(") (binary_expression "(char)uVar6 != '\0'" (cast_expression "(char)uVar6" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar6")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;\n    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }\n    return uVar6;\n  }" ({ "{") (expression_statement "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;" (assignment_expression "uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" (identifier "uVar7") (= "=") (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |\n            (uVar7 & 0xff00) << 0x28" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |\n            (uVar7 & 0xff00000000) >> 8" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18" (binary_expression "uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28" (binary_expression "uVar7 >> 0x38" (identifier "uVar7") (>> ">>") (number_literal "0x38")) (| "|") (binary_expression "(uVar7 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar7 & 0xff000000000000)" (( "(") (binary_expression "uVar7 & 0xff000000000000" (identifier "uVar7") (& "&") (number_literal "0xff000000000000")) () ")")) (>> ">>") (number_literal "0x28"))) (| "|") (binary_expression "(uVar7 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar7 & 0xff0000000000)" (( "(") (binary_expression "uVar7 & 0xff0000000000" (identifier "uVar7") (& "&") (number_literal "0xff0000000000")) () ")")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "(uVar7 & 0xff00000000) >> 8" (parenthesized_expression "(uVar7 & 0xff00000000)" (( "(") (binary_expression "uVar7 & 0xff00000000" (identifier "uVar7") (& "&") (number_literal "0xff00000000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar7 & 0xff000000) << 8" (parenthesized_expression "(uVar7 & 0xff000000)" (( "(") (binary_expression "uVar7 & 0xff000000" (identifier "uVar7") (& "&") (number_literal "0xff000000")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar7 & 0xff0000) << 0x18" (parenthesized_expression "(uVar7 & 0xff0000)" (( "(") (binary_expression "uVar7 & 0xff0000" (identifier "uVar7") (& "&") (number_literal "0xff0000")) () ")")) (<< "<<") (number_literal "0x18"))) (| "|") (binary_expression "(uVar7 & 0xff00) << 0x28" (parenthesized_expression "(uVar7 & 0xff00)" (( "(") (binary_expression "uVar7 & 0xff00" (identifier "uVar7") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "0x28"))) (| "|") (binary_expression "uVar7 << 0x38" (identifier "uVar7") (<< "<<") (number_literal "0x38")))) (; ";")) (if_statement "if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" (if "if") (parenthesized_expression "(((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7))" (( "(") (binary_expression "((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)" (parenthesized_expression "((long)local_28 <= (long)uVar7)" (( "(") (binary_expression "(long)local_28 <= (long)uVar7" (cast_expression "(long)local_28" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_28")) (<= "<=") (cast_expression "(long)uVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar7"))) () ")")) (&& "&&") (parenthesized_expression "(uVar6 = 0, local_28 == uVar7)" (( "(") (comma_expression "uVar6 = 0, local_28 == uVar7" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (, ",") (binary_expression "local_28 == uVar7" (identifier "local_28") (== "==") (identifier "uVar7"))) () ")"))) () ")")) (compound_statement "{\n      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);\n    }" ({ "{") (expression_statement "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20);" (assignment_expression "uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" (identifier "uVar6") (= "=") (call_expression "(ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20)" (( "(") (binary_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18) < local_20" (cast_expression "(int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18)" (( "(") (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |\n                           uVar8 << 0x18" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8" (binary_expression "uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8" (binary_expression "uVar8 >> 0x18" (identifier "uVar8") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar8 & 0xff0000) >> 8" (parenthesized_expression "(uVar8 & 0xff0000)" (( "(") (binary_expression "uVar8 & 0xff0000" (identifier "uVar8") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar8 & 0xff00) << 8" (parenthesized_expression "(uVar8 & 0xff00)" (( "(") (binary_expression "uVar8 & 0xff00" (identifier "uVar8") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar8 << 0x18" (identifier "uVar8") (<< "<<") (number_literal "0x18"))) () ")"))) (< "<") (identifier "local_20")) () ")")))) (; ";")) (} "}"))) (return_statement "return uVar6;" (return "return") (identifier "uVar6") (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: bool do_file_has_changed(Sized_incremental_binary<64,_true> * this,
   uint n) */

bool __thiscall
var_4::Sized_incremental_binary<64,_true>::do_file_has_changed
          (Sized_incremental_binary<64,_true> *this,type_5 var_2)

{
  type_8 *puVar1;
  type_1 *var_7;
  type_2 ppIVar3;
  type_3 *var_10;
  type_4 *var_15;
  bool bVar6;
  int iVar7;
  type_5 var_8;
  type_6 var_11;
  type_7 extraout_var;
  type_8 var_16;
  type_8 var_17;
  type_7 in_register_00000034;
  char *filename;
  type_9 new_mtime;
  
  var_17 = var_1(in_register_00000034,var_2);
  if ((this->inputs_reader_).input_file_count_ <= var_2) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/incremental.h",0x45c,"input_file_offset");
  }
  var_7 = (this->super_Incremental_binary).script_map_.
           super__Vector_base<var_4::type_1*,var_5::allocator<var_4::type_1*>var_6>._M_impl.
           _M_start[var_2];
  if (var_7 != (type_1 *)0x0) {
    var_17 = (type_8)var_7->input_file_index_;
  }
  iVar7 = (*(this->super_Incremental_binary)._vptr_Incremental_binary[10])(this,var_17);
  var_8 = (**(type_10 **)(*(long *)var_1(extraout_var,iVar7) + 0x28))();
  if (((var_8 != 0) &&
      (ppIVar3 = (this->super_Incremental_binary).input_args_map_.
                 super__Vector_base<var_9::type_3*,var_5::allocator<var_9::type_3*>var_6>
                 ._M_impl._M_start,
      (type_8)var_8 <=
      (type_8)((long)(this->super_Incremental_binary).input_args_map_.
                    super__Vector_base<var_9::type_3*,var_5::allocator<var_9::type_3*>var_6>
                    ._M_impl._M_finish - (long)ppIVar3 >> 3))) &&
     (var_10 = ppIVar3[var_8 - 1], var_10 != (type_3 *)0x0)) {
    if (var_10->is_file_ == false) {
                    /* WARNING: Subroutine does not return */
      var_3("../../gold/options.h",0x828,"file");
    }
    var_11 = (var_10->file_).options_.incremental_disposition_;
    if (var_11 == var_12) {
      if (parameters->options_ == (type_11 *)0x0) {
                    /* WARNING: Subroutine does not return */
        var_3("../../gold/parameters.h",0x5c,"options");
      }
      var_11 = parameters->options_->incremental_startup_disposition_;
    }
    if (var_11 != var_13) {
      return var_11 == var_14;
    }
  }
  var_15 = (this->inputs_reader_).p_;
  filename = (char *)0x0;
  var_16 = (type_8)(var_2 * 0x18 + 0x10);
  var_8 = *(type_5 *)(var_15 + var_16);
  var_17 = (type_8)(var_8 >> 0x18 | (var_8 & 0xff0000) >> 8 | (var_8 & 0xff00) << 8 | var_8 << 0x18);
  if (var_17 < (this->inputs_reader_).strtab_.usable_size_) {
    filename = (this->inputs_reader_).strtab_.base_ + var_17;
  }
  puVar1 = (type_8 *)(var_15 + var_16 + 8);
  var_17 = *puVar1;
  var_8 = (type_5)puVar1[1];
  new_mtime.seconds = 0;
  new_mtime.nanoseconds = 0;
  bVar6 = var_18(filename,&new_mtime);
  if (bVar6) {
    var_17 = var_17 >> 0x38 | (var_17 & 0xff000000000000) >> 0x28 |
             (var_17 & 0xff0000000000) >> 0x18 | (var_17 & 0xff00000000) >> 8 |
             (var_17 & 0xff000000) << 8 | (var_17 & 0xff0000) << 0x18 | (var_17 & 0xff00) << 0x28 |
             var_17 << 0x38;
    if ((new_mtime.seconds <= (long)var_17) && (bVar6 = false, new_mtime.seconds == var_17)) {
      bVar6 = (int)(var_8 >> 0x18 | (var_8 & 0xff0000) >> 8 | (var_8 & 0xff00) << 8 | var_8 << 0x18)
              < new_mtime.nanoseconds;
    }
    return bVar6;
  }
  return true;
}


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

ulong MASKED(long *param_1,ulong param_2)

{
  ulong *puVar1;
  int iVar2;
  char *pcVar3;
  uint uVar4;
  long *plVar5;
  ulong uVar6;
  ulong uVar7;
  uint uVar8;
  long lVar9;
  ulong local_28;
  int local_20;
  
  uVar8 = (uint)param_2;
  if (*(uint *)(param_1 + 0x23) <= uVar8) {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/incremental.h",0x45c,"input_file_offset");
  }
  lVar9 = *(long *)(param_1[7] + (param_2 & 0xffffffff) * 8);
  if (lVar9 != 0) {
    param_2 = (ulong)*(uint *)(lVar9 + 0x20);
  }
  plVar5 = (long *)(**(code **)(*param_1 + 0x50))(param_1,param_2);
  uVar4 = (**(code **)(*plVar5 + 0x28))(plVar5);
  if (((uVar4 != 0) && ((ulong)uVar4 <= (ulong)(param_1[2] - param_1[1] >> 3))) &&
     (pcVar3 = *(char **)(param_1[1] + (ulong)(uVar4 - 1) * 8), pcVar3 != (char *)0x0)) {
    if (*pcVar3 == '\0') {
                    /* WARNING: Subroutine does not return */
      FUN_0018dcf0("../../gold/options.h",0x828,&DAT_0038c608);
    }
    iVar2 = *(int *)(pcVar3 + 0x60);
    if (iVar2 == 0) {
      if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
      }
      iVar2 = *(int *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x91f4);
    }
    if (iVar2 != 1) {
      return (ulong)CONCAT31((int3)((uint)iVar2 >> 8),iVar2 == 2);
    }
  }
  lVar9 = 0;
  uVar6 = (ulong)(uVar8 * 0x18 + 0x10);
  uVar8 = *(uint *)(param_1[0x20] + uVar6);
  uVar7 = (ulong)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 | uVar8 << 0x18);
  if (uVar7 < (ulong)param_1[0x22]) {
    lVar9 = param_1[0x21] + uVar7;
  }
  puVar1 = (ulong *)(param_1[0x20] + 8 + uVar6);
  uVar7 = *puVar1;
  uVar8 = (uint)puVar1[1];
  local_28 = 0;
  local_20 = 0;
  uVar6 = FUN_00186ab0(lVar9,&local_28);
  if ((char)uVar6 != '\0') {
    uVar7 = uVar7 >> 0x38 | (uVar7 & 0xff000000000000) >> 0x28 | (uVar7 & 0xff0000000000) >> 0x18 |
            (uVar7 & 0xff00000000) >> 8 | (uVar7 & 0xff000000) << 8 | (uVar7 & 0xff0000) << 0x18 |
            (uVar7 & 0xff00) << 0x28 | uVar7 << 0x38;
    if (((long)local_28 <= (long)uVar7) && (uVar6 = 0, local_28 == uVar7)) {
      uVar6 = (ulong)((int)(uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 | (uVar8 & 0xff00) << 8 |
                           uVar8 << 0x18) < local_20);
    }
    return uVar6;
  }
  return 1;
}

