
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: bool should_apply_static_reloc(Relocate * this, Mips_symbol<32> * gsym,
   uint r_type, Output_section * output_section, Target_mips<32,_false> * target) */

bool __thiscall
anon_unknown.dwarf_ead2ad::Target_mips<32,_false>::Relocate::should_apply_static_reloc
          (Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,
          Target_mips<32,_false> *target)

{
  Valtype VVar1;
  long lVar2;
  bool bVar3;
  uint uVar4;
  Relocate RVar5;
  undefined4 in_register_00000014;
  
  if (((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0) ||
     (this == (Relocate *)0x0)) {
    return true;
  }
  uVar4 = (int)gsym - 1;
  if (uVar4 < 0xf9) {
    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);
  }
  else {
    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,0);
  }
  if (bVar3) {
    if (gold::parameters->options_ == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");
    }
    if (((((gold::parameters->options_->copyreloc_).value == false) ||
         ((this[7].calculated_value_ & 0x70000) != 0)) ||
        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)) {
      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;
      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {
        RVar5 = (Relocate)(this + 5);
        do {
          if (*(int *)RVar5 == 0) {
            VVar1 = *(Valtype *)((long)RVar5 + 4);
            goto LAB_0029fb73;
          }
          RVar5 = *(Relocate *)((long)RVar5 + 8);
        } while (RVar5 != (Relocate)0x0);
      }
      else {
        VVar1 = this[0xc].calculated_value_;
LAB_0029fb73:
        if (VVar1 != 0xffffffff) {
          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);
          return bVar3;
        }
      }
    }
  }
  return true;
}



undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)

{
  int iVar1;
  char cVar2;
  undefined8 uVar3;
  int *piVar4;
  
  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {
    return 1;
  }
  if (param_2 - 1U < 0xf9) {
    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);
  }
  else {
    cVar2 = FUN_001a5590(param_1,0);
  }
  if (cVar2 != '\0') {
    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_00352af0("../../gold/parameters.h",0x5c,"options");
    }
    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||
         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||
        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||
       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {
      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {
        piVar4 = (int *)(param_1 + 0x28);
        do {
          if (*piVar4 == 0) {
            iVar1 = piVar4[1];
            goto LAB_0029fb73;
          }
          piVar4 = *(int **)(piVar4 + 2);
        } while (piVar4 != (int *)0x0);
      }
      else {
        iVar1 = *(int *)(param_1 + 0x60);
LAB_0029fb73:
        if (iVar1 != -1) {
          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);
          return uVar3;
        }
      }
    }
  }
  return 1;
}


TEST byte ptr [RDX + 0x70],0x2
JZ 0x0029fb98
TEST RDI,RDI
JZ 0x0029fb98
PUSH RBP
LEA EAX,[RSI + -0x1]
XOR ESI,ESI
PUSH RBX
SUB RSP,0x8
CMP EAX,0xf8
JBE 0x0029fb20
MOV RBP,RCX
MOV RBX,RDI
CALL 0x001a5590
TEST AL,AL
JNZ 0x0029fb3c
ADD RSP,0x8
MOV EAX,0x1
POP RBX
POP RBP
RET
MOV ESI,EAX
LEA RAX,[0x55e3e0]
MOV RBP,RCX
MOV RBX,RDI
MOVSX ESI,byte ptr [RAX + RSI*0x1]
CALL 0x001a5590
TEST AL,AL
JZ 0x0029fb14
MOV RAX,qword ptr [0x0067cb08]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0029fbf4
CMP byte ptr [RAX + 0x8619],0x0
JNZ 0x0029fba0
MOV RAX,qword ptr [RBP + 0x20]
TEST RAX,RAX
JZ 0x0029fbc8
CMP qword ptr [RAX + 0xd0],0x0
JZ 0x0029fbc8
CMP dword ptr [RBX + 0x60],-0x1
SETNZ AL
TEST AL,AL
JZ 0x0029fb14
MOV EAX,dword ptr [RBX + 0x20]
XOR ESI,ESI
MOV RDI,RBX
TEST EAX,EAX
SETNZ SIL
ADD RSP,0x8
XOR EDX,EDX
POP RBX
POP RBP
JMP 0x0028d190
MOV EAX,0x1
RET
TEST byte ptr [RBX + 0x3a],0x7
JNZ 0x0029fb59
MOV RAX,qword ptr [RBX + 0x10]
TEST byte ptr [RAX + 0x3c],0x1
JZ 0x0029fb59
MOVZX EAX,byte ptr [RBX + 0x38]
AND EAX,0x7
CMP AL,0x2
JNZ 0x0029fb14
JMP 0x0029fb59
LEA RAX,[RBX + 0x28]
NOP dword ptr [RAX]
MOV EDX,dword ptr [RAX]
TEST EDX,EDX
JZ 0x0029fbe8
MOV RAX,qword ptr [RAX + 0x8]
TEST RAX,RAX
JNZ 0x0029fbd0
JMP 0x0029fb14
CMP dword ptr [RAX + 0x4],-0x1
SETNZ AL
JMP 0x0029fb73
LEA RDX,[0x5610f8]
MOV ESI,0x5c
LEA RDI,[0x52e279]
CALL 0x00352af0
(translation_unit "undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)\n\n{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)\n\n{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)" identifier (parameter_list "(long param_1,int param_2,long param_3,long param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (if_statement "if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0))" ( (binary_expression "((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)" (parenthesized_expression "((*(byte *)(param_3 + 0x70) & 2) == 0)" ( (binary_expression "(*(byte *)(param_3 + 0x70) & 2) == 0" (parenthesized_expression "(*(byte *)(param_3 + 0x70) & 2)" ( (binary_expression "*(byte *)(param_3 + 0x70) & 2" (pointer_expression "*(byte *)(param_3 + 0x70)" * (cast_expression "(byte *)(param_3 + 0x70)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x70)" ( (binary_expression "param_3 + 0x70" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" if (parenthesized_expression "(param_2 - 1U < 0xf9)" ( (binary_expression "param_2 - 1U < 0xf9" (binary_expression "param_2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }" { (expression_statement "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);" (assignment_expression "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" identifier = (call_expression "FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" identifier (argument_list "(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" ( identifier , (cast_expression "(int)(char)(&DAT_0055e3e0)[param_2 - 1U]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)(&DAT_0055e3e0)[param_2 - 1U]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "(&DAT_0055e3e0)[param_2 - 1U]" (parenthesized_expression "(&DAT_0055e3e0)" ( (pointer_expression "&DAT_0055e3e0" & identifier) )) [ (binary_expression "param_2 - 1U" identifier - number_literal) ]))) )))) ;) }) (else_clause "else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" else (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,0);\n  }" { (expression_statement "cVar2 = FUN_001a5590(param_1,0);" (assignment_expression "cVar2 = FUN_001a5590(param_1,0)" identifier = (call_expression "FUN_001a5590(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal )))) ;) }))) (if_statement "if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" { (if_statement "if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" if (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" ( (binary_expression "PTR_DAT_0067cb08 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" { comment (expression_statement "FUN_00352af0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00352af0("../../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 ") ))) ;) })) (if_statement "if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" if (parenthesized_expression "((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2))" ( (binary_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)" (parenthesized_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0))" ( (binary_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" (parenthesized_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0))" ( (binary_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)" (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" * (cast_expression "(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" ( (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" ( (binary_expression "PTR_DAT_0067cb08 + 0x10" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "((*(byte *)(param_1 + 0x3a) & 7) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x3a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" * (cast_expression "(byte *)(param_1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3a)" ( (binary_expression "param_1 + 0x3a" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" ( (binary_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1)" ( (binary_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" * (cast_expression "(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x10) + 0x3c)" ( (binary_expression "*(long *)(param_1 + 0x10) + 0x3c" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) == number_literal) ))) )) || (parenthesized_expression "((*(byte *)(param_1 + 0x38) & 7) == 2)" ( (binary_expression "(*(byte *)(param_1 + 0x38) & 7) == 2" (parenthesized_expression "(*(byte *)(param_1 + 0x38) & 7)" ( (binary_expression "*(byte *)(param_1 + 0x38) & 7" (pointer_expression "*(byte *)(param_1 + 0x38)" * (cast_expression "(byte *)(param_1 + 0x38)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" { (if_statement "if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" if (parenthesized_expression "((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0))" ( (binary_expression "(*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" (parenthesized_expression "(*(long *)(param_4 + 0x20) == 0)" ( (binary_expression "*(long *)(param_4 + 0x20) == 0" (pointer_expression "*(long *)(param_4 + 0x20)" * (cast_expression "(long *)(param_4 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x20)" ( (binary_expression "param_4 + 0x20" identifier + number_literal) )))) == number_literal) )) || (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0" (pointer_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0)" * (cast_expression "(long *)(*(long *)(param_4 + 0x20) + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0x20) + 0xd0)" ( (binary_expression "*(long *)(param_4 + 0x20) + 0xd0" (pointer_expression "*(long *)(param_4 + 0x20)" * (cast_expression "(long *)(param_4 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x20)" ( (binary_expression "param_4 + 0x20" identifier + number_literal) )))) + number_literal) )))) == number_literal) ))) )) (compound_statement "{\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }" { (expression_statement "piVar4 = (int *)(param_1 + 0x28);" (assignment_expression "piVar4 = (int *)(param_1 + 0x28)" identifier = (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) ;) (do_statement "do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);" do (compound_statement "{\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        }" { (if_statement "if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" if (parenthesized_expression "(*piVar4 == 0)" ( (binary_expression "*piVar4 == 0" (pointer_expression "*piVar4" * identifier) == number_literal) )) (compound_statement "{\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" { (expression_statement "iVar1 = piVar4[1];" (assignment_expression "iVar1 = piVar4[1]" identifier = (subscript_expression "piVar4[1]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_0029fb73;" goto statement_identifier ;) })) (expression_statement "piVar4 = *(int **)(piVar4 + 2);" (assignment_expression "piVar4 = *(int **)(piVar4 + 2)" identifier = (pointer_expression "*(int **)(piVar4 + 2)" * (cast_expression "(int **)(piVar4 + 2)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(piVar4 + 2)" ( (binary_expression "piVar4 + 2" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }) (else_clause "else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" else (compound_statement "{\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" { (expression_statement "iVar1 = *(int *)(param_1 + 0x60);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x60)" identifier = (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) ))))) ;) (labeled_statement "LAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" statement_identifier : (if_statement "if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" if (parenthesized_expression "(iVar1 != -1)" ( (binary_expression "iVar1 != -1" identifier != number_literal) )) (compound_statement "{\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" { (expression_statement "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);" (assignment_expression "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" identifier = (call_expression "FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" identifier (argument_list "(param_1,*(int *)(param_1 + 0x20) != 0,0)" ( identifier , (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) != number_literal) , number_literal )))) ;) (return_statement "return uVar3;" 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 should_apply_static_reloc(Relocate * this, Mips_symbol<32> * gsym,\n   uint r_type, Output_section * output_section, Target_mips<32,_false> * target) */\n\nbool __thiscall\nanon_unknown.dwarf_ead2ad::Target_mips<32,_false>::Relocate::should_apply_static_reloc\n          (Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,\n          Target_mips<32,_false> *target)\n\n{\n  Valtype VVar1;\n  long lVar2;\n  bool bVar3;\n  uint uVar4;\n  Relocate RVar5;\n  undefined4 in_register_00000014;\n  \n  if (((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0) ||\n     (this == (Relocate *)0x0)) {\n    return true;\n  }\n  uVar4 = (int)gsym - 1;\n  if (uVar4 < 0xf9) {\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);\n  }\n  else {\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,0);\n  }\n  if (bVar3) {\n    if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n    }\n    if (((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)) {\n      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;\n      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }\n    }\n  }\n  return true;\n}\n\n" comment comment comment (declaration "bool __thiscall\nanon_unknown.dwarf_ead2ad::Target_mips<32,_false>::Relocate::should_apply_static_reloc\n          (Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,\n          Target_mips<32,_false> *target)\n\n{\n  Valtype VVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) identifier (ERROR ".dwarf_ead2ad::Target_mips<32" . identifier : : identifier < number_literal) , (ERROR "_false>::Relocate::should_apply_static_reloc\n          (Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,\n          Target_mips<32,_false> *target)\n\n{\n  Valtype" identifier > : : identifier : : (function_declarator "should_apply_static_reloc\n          (Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,\n          Target_mips<32,_false> *target)" identifier (parameter_list "(Relocate *this,Mips_symbol<32> *gsym,uint r_type,Output_section *output_section,\n          Target_mips<32,_false> *target)" ( (parameter_declaration "Relocate *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Mips_symbol<32> *gsym" type_identifier (ERROR "<32>" < number_literal >) (pointer_declarator "*gsym" * identifier)) , (parameter_declaration "uint r_type" type_identifier identifier) , (parameter_declaration "Output_section *output_section" type_identifier (pointer_declarator "*output_section" * identifier)) , (parameter_declaration "Target_mips" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_false> *target" type_identifier (ERROR ">" >) (pointer_declarator "*target" * identifier)) ))) { identifier) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "Relocate RVar5;" type_identifier identifier ;) (declaration "undefined4 in_register_00000014;" type_identifier identifier ;) (if_statement "if (((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0) ||\n     (this == (Relocate *)0x0)) {\n    return true;\n  }" if (parenthesized_expression "(((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0) ||\n     (this == (Relocate *)0x0))" ( (binary_expression "((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0) ||\n     (this == (Relocate *)0x0)" (parenthesized_expression "((*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0)" ( (binary_expression "(*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2) == 0" (parenthesized_expression "(*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2)" ( (binary_expression "*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70) & 2" (pointer_expression "*(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70)" * (cast_expression "(byte *)(CONCAT44(in_register_00000014,r_type) + 0x70)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(CONCAT44(in_register_00000014,r_type) + 0x70)" ( (binary_expression "CONCAT44(in_register_00000014,r_type) + 0x70" (call_expression "CONCAT44(in_register_00000014,r_type)" identifier (argument_list "(in_register_00000014,r_type)" ( identifier , identifier ))) + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(this == (Relocate *)0x0)" ( (binary_expression "this == (Relocate *)0x0" identifier == (cast_expression "(Relocate *)0x0" ( (type_descriptor "Relocate *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    return true;\n  }" { (return_statement "return true;" return true ;) })) (expression_statement "uVar4 = (int)gsym - 1;" (assignment_expression "uVar4 = (int)gsym - 1" identifier = (binary_expression "(int)gsym - 1" (cast_expression "(int)gsym" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal)) ;) (if_statement "if (uVar4 < 0xf9) {\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);\n  }\n  else {\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,0);\n  }" if (parenthesized_expression "(uVar4 < 0xf9)" ( (binary_expression "uVar4 < 0xf9" identifier < number_literal) )) (compound_statement "{\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);\n  }" { (ERROR "bVar3 = gold::" (assignment_expression "bVar3 = gold" identifier = identifier) : :) (labeled_statement "Symbol::needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);" statement_identifier : (ERROR ":" :) (expression_statement "needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4]);" (call_expression "needs_dynamic_reloc((Symbol *)this,(int)(char)CSWTCH_4890[uVar4])" identifier (argument_list "((Symbol *)this,(int)(char)CSWTCH_4890[uVar4])" ( (cast_expression "(Symbol *)this" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(int)(char)CSWTCH_4890[uVar4]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)CSWTCH_4890[uVar4]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "CSWTCH_4890[uVar4]" identifier [ identifier ]))) ))) ;)) }) (else_clause "else {\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,0);\n  }" else (compound_statement "{\n    bVar3 = gold::Symbol::needs_dynamic_reloc((Symbol *)this,0);\n  }" { (ERROR "bVar3 = gold::" (assignment_expression "bVar3 = gold" identifier = identifier) : :) (labeled_statement "Symbol::needs_dynamic_reloc((Symbol *)this,0);" statement_identifier : (ERROR ":" :) (expression_statement "needs_dynamic_reloc((Symbol *)this,0);" (call_expression "needs_dynamic_reloc((Symbol *)this,0)" identifier (argument_list "((Symbol *)this,0)" ( (cast_expression "(Symbol *)this" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal ))) ;)) }))) (if_statement "if (bVar3) {\n    if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n    }\n    if (((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)) {\n      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;\n      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(bVar3)" ( identifier )) (compound_statement "{\n    if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n    }\n    if (((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)) {\n      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;\n      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }\n    }\n  }" { (if_statement "if (gold::parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n    }" if (parenthesized_expression "(gold::parameters->options_ == (General_options *)0x0)" ( (ERROR "gold::" identifier : :) (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      gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n    }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" statement_identifier : (ERROR ":" :) (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 ") ))) ;)) })) (if_statement "if (((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)) {\n      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;\n      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }\n    }" if (parenthesized_expression "(((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2))" ( (binary_expression "((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)) || ((this[7].calculated_value_ & 7) == 2)" (parenthesized_expression "((((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0))" ( (binary_expression "(((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)) ||\n        ((*(byte *)((long)this[2] + 0x3c) & 1) == 0)" (parenthesized_expression "(((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0))" ( (binary_expression "((gold::parameters->options_->copyreloc_).value == false) ||\n         ((this[7].calculated_value_ & 0x70000) != 0)" (parenthesized_expression "((gold::parameters->options_->copyreloc_).value == false)" ( (binary_expression "(gold::parameters->options_->copyreloc_).value == false" (field_expression "(gold::parameters->options_->copyreloc_).value" (parenthesized_expression "(gold::parameters->options_->copyreloc_)" ( (ERROR "gold::" identifier : :) (field_expression "parameters->options_->copyreloc_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) == false) )) || (parenthesized_expression "((this[7].calculated_value_ & 0x70000) != 0)" ( (binary_expression "(this[7].calculated_value_ & 0x70000) != 0" (parenthesized_expression "(this[7].calculated_value_ & 0x70000)" ( (binary_expression "this[7].calculated_value_ & 0x70000" (field_expression "this[7].calculated_value_" (subscript_expression "this[7]" identifier [ number_literal ]) . field_identifier) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "((*(byte *)((long)this[2] + 0x3c) & 1) == 0)" ( (binary_expression "(*(byte *)((long)this[2] + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)((long)this[2] + 0x3c) & 1)" ( (binary_expression "*(byte *)((long)this[2] + 0x3c) & 1" (pointer_expression "*(byte *)((long)this[2] + 0x3c)" * (cast_expression "(byte *)((long)this[2] + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)this[2] + 0x3c)" ( (binary_expression "(long)this[2] + 0x3c" (cast_expression "(long)this[2]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (subscript_expression "this[2]" identifier [ number_literal ])) + number_literal) )))) & number_literal) )) == number_literal) ))) )) || (parenthesized_expression "((this[7].calculated_value_ & 7) == 2)" ( (binary_expression "(this[7].calculated_value_ & 7) == 2" (parenthesized_expression "(this[7].calculated_value_ & 7)" ( (binary_expression "this[7].calculated_value_ & 7" (field_expression "this[7].calculated_value_" (subscript_expression "this[7]" identifier [ number_literal ]) . field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;\n      if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }\n    }" { (expression_statement "lVar2 = *(long *)&(output_section->super_Output_data).field_0x20;" (assignment_expression "lVar2 = *(long *)&(output_section->super_Output_data).field_0x20" identifier = (pointer_expression "*(long *)&(output_section->super_Output_data).field_0x20" * (cast_expression "(long *)&(output_section->super_Output_data).field_0x20" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(output_section->super_Output_data).field_0x20" & (field_expression "(output_section->super_Output_data).field_0x20" (parenthesized_expression "(output_section->super_Output_data)" ( (field_expression "output_section->super_Output_data" identifier -> field_identifier) )) . field_identifier))))) ;) (if_statement "if ((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)) {\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }\n      else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }" if (parenthesized_expression "((lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0))" ( (binary_expression "(lVar2 == 0) || (*(long *)(lVar2 + 0xd0) == 0)" (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(*(long *)(lVar2 + 0xd0) == 0)" ( (binary_expression "*(long *)(lVar2 + 0xd0) == 0" (pointer_expression "*(long *)(lVar2 + 0xd0)" * (cast_expression "(long *)(lVar2 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xd0)" ( (binary_expression "lVar2 + 0xd0" identifier + number_literal) )))) == number_literal) ))) )) (compound_statement "{\n        RVar5 = (Relocate)(this + 5);\n        do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);\n      }" { (expression_statement "RVar5 = (Relocate)(this + 5);" (assignment_expression "RVar5 = (Relocate)(this + 5)" identifier = (call_expression "(Relocate)(this + 5)" (parenthesized_expression "(Relocate)" ( identifier )) (argument_list "(this + 5)" ( (binary_expression "this + 5" identifier + number_literal) )))) ;) (do_statement "do {\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        } while (RVar5 != (Relocate)0x0);" do (compound_statement "{\n          if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }\n          RVar5 = *(Relocate *)((long)RVar5 + 8);\n        }" { (if_statement "if (*(int *)RVar5 == 0) {\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }" if (parenthesized_expression "(*(int *)RVar5 == 0)" ( (binary_expression "*(int *)RVar5 == 0" (pointer_expression "*(int *)RVar5" * (cast_expression "(int *)RVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n            VVar1 = *(Valtype *)((long)RVar5 + 4);\n            goto LAB_0029fb73;\n          }" { (expression_statement "VVar1 = *(Valtype *)((long)RVar5 + 4);" (assignment_expression "VVar1 = *(Valtype *)((long)RVar5 + 4)" identifier = (pointer_expression "*(Valtype *)((long)RVar5 + 4)" * (cast_expression "(Valtype *)((long)RVar5 + 4)" ( (type_descriptor "Valtype *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)RVar5 + 4)" ( (binary_expression "(long)RVar5 + 4" (cast_expression "(long)RVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (goto_statement "goto LAB_0029fb73;" goto statement_identifier ;) })) (expression_statement "RVar5 = *(Relocate *)((long)RVar5 + 8);" (assignment_expression "RVar5 = *(Relocate *)((long)RVar5 + 8)" identifier = (pointer_expression "*(Relocate *)((long)RVar5 + 8)" * (cast_expression "(Relocate *)((long)RVar5 + 8)" ( (type_descriptor "Relocate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)RVar5 + 8)" ( (binary_expression "(long)RVar5 + 8" (cast_expression "(long)RVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) }) while (parenthesized_expression "(RVar5 != (Relocate)0x0)" ( (binary_expression "RVar5 != (Relocate)0x0" identifier != (cast_expression "(Relocate)0x0" ( (type_descriptor "Relocate" type_identifier) ) number_literal)) )) ;) }) (else_clause "else {\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }" else (compound_statement "{\n        VVar1 = this[0xc].calculated_value_;\nLAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }\n      }" { (expression_statement "VVar1 = this[0xc].calculated_value_;" (assignment_expression "VVar1 = this[0xc].calculated_value_" identifier = (field_expression "this[0xc].calculated_value_" (subscript_expression "this[0xc]" identifier [ number_literal ]) . field_identifier)) ;) (labeled_statement "LAB_0029fb73:\n        if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }" statement_identifier : (if_statement "if (VVar1 != 0xffffffff) {\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }" if (parenthesized_expression "(VVar1 != 0xffffffff)" ( (binary_expression "VVar1 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n          bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);\n          return bVar3;\n        }" { (expression_statement "bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false);" (assignment_expression "bVar3 = symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false)" identifier = (call_expression "symbol_refs_local((Symbol *)this,this[4].calculated_value_ != 0,false)" identifier (argument_list "((Symbol *)this,this[4].calculated_value_ != 0,false)" ( (cast_expression "(Symbol *)this" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "this[4].calculated_value_ != 0" (field_expression "this[4].calculated_value_" (subscript_expression "this[4]" identifier [ number_literal ]) . field_identifier) != number_literal) , false )))) ;) (return_statement "return bVar3;" return identifier ;) }))) }))) })) })) (return_statement "return true;" return true ;) (ERROR "}" }))
(translation_unit "undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)\n\n{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)\n\n{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)" identifier (parameter_list "(long param_1,int param_2,long param_3,long param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (if_statement "if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0))" ( (binary_expression "((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)" (parenthesized_expression "((*(byte *)(param_3 + 0x70) & 2) == 0)" ( (binary_expression "(*(byte *)(param_3 + 0x70) & 2) == 0" (parenthesized_expression "(*(byte *)(param_3 + 0x70) & 2)" ( (binary_expression "*(byte *)(param_3 + 0x70) & 2" (pointer_expression "*(byte *)(param_3 + 0x70)" * (cast_expression "(byte *)(param_3 + 0x70)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x70)" ( (binary_expression "param_3 + 0x70" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" if (parenthesized_expression "(param_2 - 1U < 0xf9)" ( (binary_expression "param_2 - 1U < 0xf9" (binary_expression "param_2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }" { (expression_statement "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);" (assignment_expression "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" identifier = (call_expression "FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" identifier (argument_list "(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" ( identifier , (cast_expression "(int)(char)(&DAT_0055e3e0)[param_2 - 1U]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)(&DAT_0055e3e0)[param_2 - 1U]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "(&DAT_0055e3e0)[param_2 - 1U]" (parenthesized_expression "(&DAT_0055e3e0)" ( (pointer_expression "&DAT_0055e3e0" & identifier) )) [ (binary_expression "param_2 - 1U" identifier - number_literal) ]))) )))) ;) }) (else_clause "else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" else (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,0);\n  }" { (expression_statement "cVar2 = FUN_001a5590(param_1,0);" (assignment_expression "cVar2 = FUN_001a5590(param_1,0)" identifier = (call_expression "FUN_001a5590(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal )))) ;) }))) (if_statement "if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" { (if_statement "if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" if (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" ( (binary_expression "PTR_DAT_0067cb08 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" { (expression_statement "FUN_00352af0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00352af0("../../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 ") ))) ;) })) (if_statement "if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" if (parenthesized_expression "((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2))" ( (binary_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)" (parenthesized_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0))" ( (binary_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" (parenthesized_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0))" ( (binary_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)" (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" * (cast_expression "(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" ( (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" ( (binary_expression "PTR_DAT_0067cb08 + 0x10" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "((*(byte *)(param_1 + 0x3a) & 7) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x3a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" * (cast_expression "(byte *)(param_1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3a)" ( (binary_expression "param_1 + 0x3a" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" ( (binary_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1)" ( (binary_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" * (cast_expression "(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x10) + 0x3c)" ( (binary_expression "*(long *)(param_1 + 0x10) + 0x3c" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + number_literal) )))) & number_literal) )) == number_literal) ))) )) || (parenthesized_expression "((*(byte *)(param_1 + 0x38) & 7) == 2)" ( (binary_expression "(*(byte *)(param_1 + 0x38) & 7) == 2" (parenthesized_expression "(*(byte *)(param_1 + 0x38) & 7)" ( (binary_expression "*(byte *)(param_1 + 0x38) & 7" (pointer_expression "*(byte *)(param_1 + 0x38)" * (cast_expression "(byte *)(param_1 + 0x38)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" { (if_statement "if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" if (parenthesized_expression "((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0))" ( (binary_expression "(*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" (parenthesized_expression "(*(long *)(param_4 + 0x20) == 0)" ( (binary_expression "*(long *)(param_4 + 0x20) == 0" (pointer_expression "*(long *)(param_4 + 0x20)" * (cast_expression "(long *)(param_4 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x20)" ( (binary_expression "param_4 + 0x20" identifier + number_literal) )))) == number_literal) )) || (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0" (pointer_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0)" * (cast_expression "(long *)(*(long *)(param_4 + 0x20) + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0x20) + 0xd0)" ( (binary_expression "*(long *)(param_4 + 0x20) + 0xd0" (pointer_expression "*(long *)(param_4 + 0x20)" * (cast_expression "(long *)(param_4 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x20)" ( (binary_expression "param_4 + 0x20" identifier + number_literal) )))) + number_literal) )))) == number_literal) ))) )) (compound_statement "{\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }" { (expression_statement "piVar4 = (int *)(param_1 + 0x28);" (assignment_expression "piVar4 = (int *)(param_1 + 0x28)" identifier = (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) ;) (do_statement "do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);" do (compound_statement "{\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        }" { (if_statement "if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" if (parenthesized_expression "(*piVar4 == 0)" ( (binary_expression "*piVar4 == 0" (pointer_expression "*piVar4" * identifier) == number_literal) )) (compound_statement "{\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" { (expression_statement "iVar1 = piVar4[1];" (assignment_expression "iVar1 = piVar4[1]" identifier = (subscript_expression "piVar4[1]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_0029fb73;" goto statement_identifier ;) })) (expression_statement "piVar4 = *(int **)(piVar4 + 2);" (assignment_expression "piVar4 = *(int **)(piVar4 + 2)" identifier = (pointer_expression "*(int **)(piVar4 + 2)" * (cast_expression "(int **)(piVar4 + 2)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(piVar4 + 2)" ( (binary_expression "piVar4 + 2" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }) (else_clause "else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" else (compound_statement "{\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" { (expression_statement "iVar1 = *(int *)(param_1 + 0x60);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x60)" identifier = (pointer_expression "*(int *)(param_1 + 0x60)" * (cast_expression "(int *)(param_1 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) ))))) ;) (labeled_statement "LAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" statement_identifier : (if_statement "if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" if (parenthesized_expression "(iVar1 != -1)" ( (binary_expression "iVar1 != -1" identifier != number_literal) )) (compound_statement "{\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" { (expression_statement "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);" (assignment_expression "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" identifier = (call_expression "FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" identifier (argument_list "(param_1,*(int *)(param_1 + 0x20) != 0,0)" ( identifier , (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) != number_literal) , number_literal )))) ;) (return_statement "return uVar3;" 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) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression IDENT - LIT) ]))) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (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 ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) == (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (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) )))) & LIT) )) == LIT) ))) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) , LIT )))) ;) (return_statement return IDENT ;) }))) }))) })) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)\n\n{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" (type_identifier "undefined8") (function_declarator "FUN_0029fae0(long param_1,int param_2,long param_3,long param_4)" (identifier "FUN_0029fae0") (parameter_list "(long param_1,int param_2,long param_3,long param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "long param_4" (sized_type_specifier "long" (long "long")) (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  undefined8 uVar3;\n  int *piVar4;\n  \n  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }\n  if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }\n  if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }\n  return 1;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (if_statement "if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {\n    return 1;\n  }" (if "if") (parenthesized_expression "(((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0))" (( "(") (binary_expression "((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)" (parenthesized_expression "((*(byte *)(param_3 + 0x70) & 2) == 0)" (( "(") (binary_expression "(*(byte *)(param_3 + 0x70) & 2) == 0" (parenthesized_expression "(*(byte *)(param_3 + 0x70) & 2)" (( "(") (binary_expression "*(byte *)(param_3 + 0x70) & 2" (pointer_expression "*(byte *)(param_3 + 0x70)" (* "*") (cast_expression "(byte *)(param_3 + 0x70)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x70)" (( "(") (binary_expression "param_3 + 0x70" (identifier "param_3") (+ "+") (number_literal "0x70")) () ")")))) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (param_2 - 1U < 0xf9) {\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }\n  else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" (if "if") (parenthesized_expression "(param_2 - 1U < 0xf9)" (( "(") (binary_expression "param_2 - 1U < 0xf9" (binary_expression "param_2 - 1U" (identifier "param_2") (- "-") (number_literal "1U")) (< "<") (number_literal "0xf9")) () ")")) (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);\n  }" ({ "{") (expression_statement "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);" (assignment_expression "cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" (identifier "cVar2") (= "=") (call_expression "FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" (identifier "FUN_001a5590") (argument_list "(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U])" (( "(") (identifier "param_1") (, ",") (cast_expression "(int)(char)(&DAT_0055e3e0)[param_2 - 1U]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(char)(&DAT_0055e3e0)[param_2 - 1U]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "(&DAT_0055e3e0)[param_2 - 1U]" (parenthesized_expression "(&DAT_0055e3e0)" (( "(") (pointer_expression "&DAT_0055e3e0" (& "&") (identifier "DAT_0055e3e0")) () ")")) ([ "[") (binary_expression "param_2 - 1U" (identifier "param_2") (- "-") (number_literal "1U")) (] "]")))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n    cVar2 = FUN_001a5590(param_1,0);\n  }" (else "else") (compound_statement "{\n    cVar2 = FUN_001a5590(param_1,0);\n  }" ({ "{") (expression_statement "cVar2 = FUN_001a5590(param_1,0);" (assignment_expression "cVar2 = FUN_001a5590(param_1,0)" (identifier "cVar2") (= "=") (call_expression "FUN_001a5590(param_1,0)" (identifier "FUN_001a5590") (argument_list "(param_1,0)" (( "(") (identifier "param_1") (, ",") (number_literal "0") () ")")))) (; ";")) (} "}")))) (if_statement "if (cVar2 != '\0') {\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }\n    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }\n  }" ({ "{") (if_statement "if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" (if "if") (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" (( "(") (binary_expression "PTR_DAT_0067cb08 + 0x10" (identifier "PTR_DAT_0067cb08") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n      FUN_00352af0("../../gold/parameters.h",0x5c,"options");\n    }" ({ "{") (expression_statement "FUN_00352af0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00352af0("../../gold/parameters.h",0x5c,"options")" (identifier "FUN_00352af0") (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") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" (if "if") (parenthesized_expression "((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2))" (( "(") (binary_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||\n       ((*(byte *)(param_1 + 0x38) & 7) == 2)" (parenthesized_expression "(((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0))" (( "(") (binary_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||\n        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" (parenthesized_expression "((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0))" (( "(") (binary_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||\n         ((*(byte *)(param_1 + 0x3a) & 7) != 0)" (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0')" (( "(") (binary_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" (* "*") (cast_expression "(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619)" (( "(") (binary_expression "*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619" (pointer_expression "*(long *)(PTR_DAT_0067cb08 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0067cb08 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0067cb08 + 0x10)" (( "(") (binary_expression "PTR_DAT_0067cb08 + 0x10" (identifier "PTR_DAT_0067cb08") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x8619")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(param_1 + 0x3a) & 7) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x3a) & 7) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)(param_1 + 0x3a) & 7" (pointer_expression "*(byte *)(param_1 + 0x3a)" (* "*") (cast_expression "(byte *)(param_1 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3a)" (( "(") (binary_expression "param_1 + 0x3a" (identifier "param_1") (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1)" (( "(") (binary_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1" (pointer_expression "*(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" (* "*") (cast_expression "(byte *)(*(long *)(param_1 + 0x10) + 0x3c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x10) + 0x3c)" (( "(") (binary_expression "*(long *)(param_1 + 0x10) + 0x3c" (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x3c")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(param_1 + 0x38) & 7) == 2)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x38) & 7) == 2" (parenthesized_expression "(*(byte *)(param_1 + 0x38) & 7)" (( "(") (binary_expression "*(byte *)(param_1 + 0x38) & 7" (pointer_expression "*(byte *)(param_1 + 0x38)" (* "*") (cast_expression "(byte *)(param_1 + 0x38)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "2")) () ")"))) () ")")) (compound_statement "{\n      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }\n    }" ({ "{") (if_statement "if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }\n      else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" (if "if") (parenthesized_expression "((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0))" (( "(") (binary_expression "(*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" (parenthesized_expression "(*(long *)(param_4 + 0x20) == 0)" (( "(") (binary_expression "*(long *)(param_4 + 0x20) == 0" (pointer_expression "*(long *)(param_4 + 0x20)" (* "*") (cast_expression "(long *)(param_4 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x20)" (( "(") (binary_expression "param_4 + 0x20" (identifier "param_4") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)" (( "(") (binary_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0" (pointer_expression "*(long *)(*(long *)(param_4 + 0x20) + 0xd0)" (* "*") (cast_expression "(long *)(*(long *)(param_4 + 0x20) + 0xd0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_4 + 0x20) + 0xd0)" (( "(") (binary_expression "*(long *)(param_4 + 0x20) + 0xd0" (pointer_expression "*(long *)(param_4 + 0x20)" (* "*") (cast_expression "(long *)(param_4 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x20)" (( "(") (binary_expression "param_4 + 0x20" (identifier "param_4") (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (number_literal "0xd0")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        piVar4 = (int *)(param_1 + 0x28);\n        do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);\n      }" ({ "{") (expression_statement "piVar4 = (int *)(param_1 + 0x28);" (assignment_expression "piVar4 = (int *)(param_1 + 0x28)" (identifier "piVar4") (= "=") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (; ";")) (do_statement "do {\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        } while (piVar4 != (int *)0x0);" (do "do") (compound_statement "{\n          if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }\n          piVar4 = *(int **)(piVar4 + 2);\n        }" ({ "{") (if_statement "if (*piVar4 == 0) {\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" (if "if") (parenthesized_expression "(*piVar4 == 0)" (( "(") (binary_expression "*piVar4 == 0" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            iVar1 = piVar4[1];\n            goto LAB_0029fb73;\n          }" ({ "{") (expression_statement "iVar1 = piVar4[1];" (assignment_expression "iVar1 = piVar4[1]" (identifier "iVar1") (= "=") (subscript_expression "piVar4[1]" (identifier "piVar4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (goto_statement "goto LAB_0029fb73;" (goto "goto") (statement_identifier "LAB_0029fb73") (; ";")) (} "}"))) (expression_statement "piVar4 = *(int **)(piVar4 + 2);" (assignment_expression "piVar4 = *(int **)(piVar4 + 2)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(piVar4 + 2)" (* "*") (cast_expression "(int **)(piVar4 + 2)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(piVar4 + 2)" (( "(") (binary_expression "piVar4 + 2" (identifier "piVar4") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar4 != (int *)0x0)" (( "(") (binary_expression "piVar4 != (int *)0x0" (identifier "piVar4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}")) (else_clause "else {\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" (else "else") (compound_statement "{\n        iVar1 = *(int *)(param_1 + 0x60);\nLAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }\n      }" ({ "{") (expression_statement "iVar1 = *(int *)(param_1 + 0x60);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x60)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x60)" (* "*") (cast_expression "(int *)(param_1 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (labeled_statement "LAB_0029fb73:\n        if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" (statement_identifier "LAB_0029fb73") (: ":") (if_statement "if (iVar1 != -1) {\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" (if "if") (parenthesized_expression "(iVar1 != -1)" (( "(") (binary_expression "iVar1 != -1" (identifier "iVar1") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);\n          return uVar3;\n        }" ({ "{") (expression_statement "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);" (assignment_expression "uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" (identifier "uVar3") (= "=") (call_expression "FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0)" (identifier "FUN_0028d190") (argument_list "(param_1,*(int *)(param_1 + 0x20) != 0,0)" (( "(") (identifier "param_1") (, ",") (binary_expression "*(int *)(param_1 + 0x20) != 0" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "0")) (, ",") (number_literal "0") () ")")))) (; ";")) (return_statement "return uVar3;" (return "return") (identifier "uVar3") (; ";")) (} "}")))) (} "}")))) (} "}"))) (} "}"))) (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 should_apply_static_reloc(Relocate * this, Mips_symbol<32> * gsym,
   uint r_type, Output_section * output_section, Target_mips<32,_false> * target) */

bool __thiscall
anon_unknown.dwarf_ead2ad::Target_mips<32,_false>::type_2::should_apply_static_reloc
          (type_2 *var_2,Mips_symbol<32> *gsym,type_1 r_type,Output_section *output_section,
          Target_mips<32,_false> *target)

{
  type_7 var_8;
  long var_6;
  bool bVar3;
  type_1 var_3;
  type_2 var_7;
  type_3 in_register_00000014;
  
  if (((*(type_4 *)(var_1(in_register_00000014,r_type) + 0x70) & 2) == 0) ||
     (var_2 == (type_2 *)0x0)) {
    return true;
  }
  var_3 = (int)gsym - 1;
  if (var_3 < 0xf9) {
    bVar3 = gold::Symbol::var_4((type_5 *)var_2,(int)(char)CSWTCH_4890[var_3]);
  }
  else {
    bVar3 = gold::Symbol::var_4((type_5 *)var_2,0);
  }
  if (bVar3) {
    if (gold::parameters->options_ == (type_6 *)0x0) {
                    /* WARNING: Subroutine does not return */
      gold::var_5("../../gold/parameters.h",0x5c,"options");
    }
    if (((((gold::parameters->options_->copyreloc_).value == false) ||
         ((var_2[7].calculated_value_ & 0x70000) != 0)) ||
        ((*(type_4 *)((long)var_2[2] + 0x3c) & 1) == 0)) || ((var_2[7].calculated_value_ & 7) == 2)) {
      var_6 = *(long *)&(output_section->super_Output_data).field_0x20;
      if ((var_6 == 0) || (*(long *)(var_6 + 0xd0) == 0)) {
        var_7 = (type_2)(var_2 + 5);
        do {
          if (*(int *)var_7 == 0) {
            var_8 = *(type_7 *)((long)var_7 + 4);
            goto LAB_0029fb73;
          }
          var_7 = *(type_2 *)((long)var_7 + 8);
        } while (var_7 != (type_2)0x0);
      }
      else {
        var_8 = var_2[0xc].calculated_value_;
LAB_0029fb73:
        if (var_8 != 0xffffffff) {
          bVar3 = var_9((type_5 *)var_2,var_2[4].calculated_value_ != 0,false);
          return bVar3;
        }
      }
    }
  }
  return true;
}


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

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

{
  int iVar1;
  char cVar2;
  undefined8 uVar3;
  int *piVar4;
  
  if (((*(byte *)(param_3 + 0x70) & 2) == 0) || (param_1 == 0)) {
    return 1;
  }
  if (param_2 - 1U < 0xf9) {
    cVar2 = FUN_001a5590(param_1,(int)(char)(&DAT_0055e3e0)[param_2 - 1U]);
  }
  else {
    cVar2 = FUN_001a5590(param_1,0);
  }
  if (cVar2 != '\0') {
    if (*(long *)(PTR_DAT_0067cb08 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_00352af0("../../gold/parameters.h",0x5c,"options");
    }
    if ((((*(char *)(*(long *)(PTR_DAT_0067cb08 + 0x10) + 0x8619) == '\0') ||
         ((*(byte *)(param_1 + 0x3a) & 7) != 0)) ||
        ((*(byte *)(*(long *)(param_1 + 0x10) + 0x3c) & 1) == 0)) ||
       ((*(byte *)(param_1 + 0x38) & 7) == 2)) {
      if ((*(long *)(param_4 + 0x20) == 0) || (*(long *)(*(long *)(param_4 + 0x20) + 0xd0) == 0)) {
        piVar4 = (int *)(param_1 + 0x28);
        do {
          if (*piVar4 == 0) {
            iVar1 = piVar4[1];
            goto LAB_0029fb73;
          }
          piVar4 = *(int **)(piVar4 + 2);
        } while (piVar4 != (int *)0x0);
      }
      else {
        iVar1 = *(int *)(param_1 + 0x60);
LAB_0029fb73:
        if (iVar1 != -1) {
          uVar3 = FUN_0028d190(param_1,*(int *)(param_1 + 0x20) != 0,0);
          return uVar3;
        }
      }
    }
  }
  return 1;
}

