
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 gldelf_iamcu_find_exp_assignment(etree_type *exp)

{
  etree_union *peVar1;
  node_tree_enum nVar2;
  char *fmt;
  int iVar3;
  undefined4 uVar4;
  asection *paVar5;
  byte *pbVar6;
  bool bVar7;
  bool bVar8;
  byte bVar9;
  
  bVar9 = 0;
LAB_00046f08:
  nVar2 = (exp->type).node_class;
  do {
    if (etree_provided < nVar2) {
_L319:
      return;
    }
    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];
    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +
            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];
    bVar8 = iVar3 == 0;
    switch(iVar3) {
    case 0x46f20:
      bVar7 = false;
      uVar4 = 0;
      bVar8 = true;
      break;
    case 0x46f45:
      goto _L319;
    case 0x46f50:
      exp = (etree_type *)(exp->rel).section;
      goto LAB_00046f08;
    case 0x46f58:
      goto _L326;
    case 0x46f70:
      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);
      goto LAB_00046f3c;
    default:
      uVar4 = 1;
    }
    iVar3 = 2;
    paVar5 = (exp->rel).section;
    pbVar6 = (byte *)0xae313;
    do {
      if (iVar3 == 0) break;
      iVar3 = iVar3 + -1;
      bVar7 = *(byte *)&paVar5->name < *pbVar6;
      bVar8 = *(byte *)&paVar5->name == *pbVar6;
      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);
      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;
    } while (bVar8);
    if (((!bVar7 && !bVar8) != bVar7) &&
       (iVar3 = bfd_elf_record_link_assignment
                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,
                           (exp->trinary).rhs), iVar3 == 0)) {
      peVar1 = (exp->binary).lhs;
      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);
      einfo(fmt,peVar1);
    }
LAB_00046f3c:
    exp = (exp->binary).rhs;
    nVar2 = (exp->type).node_class;
  } while( true );
_L326:
  gldelf_iamcu_find_exp_assignment((exp->binary).lhs);
  gldelf_iamcu_find_exp_assignment((exp->binary).rhs);
  exp = (etree_type *)(exp->assign).hidden;
  goto LAB_00046f08;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 FUN_00046ee0(int param_1)

{
  uint uVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  byte *pbVar5;
  byte *pbVar6;
  bool bVar7;
  bool bVar8;
  byte bVar9;
  
  bVar9 = 0;
code_r0x00046f08:
  uVar1 = *(uint *)(param_1 + 0xc);
  do {
    if (6 < uVar1) {
LAB_00046f45:
      return;
    }
    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);
    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);
    bVar8 = iVar3 == 0;
    switch(iVar3) {
    case 0x46f20:
      bVar7 = false;
      uVar4 = 0;
      bVar8 = true;
      break;
    case 0x46f45:
      goto LAB_00046f45;
    case 0x46f50:
      param_1 = *(int *)(param_1 + 0x10);
      goto code_r0x00046f08;
    case 0x46f58:
      goto code_r0x00046f58;
    case 0x46f70:
      FUN_00046ee0();
      goto code_r0x00046f3c;
    default:
      uVar4 = 1;
    }
    iVar3 = 2;
    pbVar5 = *(byte **)(param_1 + 0x10);
    pbVar6 = (byte *)0xae313;
    do {
      if (iVar3 == 0) break;
      iVar3 = iVar3 + -1;
      bVar7 = *pbVar5 < *pbVar6;
      bVar8 = *pbVar5 == *pbVar6;
      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;
      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;
    } while (bVar8);
    if (((!bVar7 && !bVar8) != bVar7) &&
       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,
                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {
      uVar4 = *(undefined4 *)(param_1 + 0x10);
      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);
      FUN_00034d20(uVar2,uVar4);
    }
code_r0x00046f3c:
    param_1 = *(int *)(param_1 + 0x14);
    uVar1 = *(uint *)(param_1 + 0xc);
  } while( true );
code_r0x00046f58:
  FUN_00046ee0();
  FUN_00046ee0();
  param_1 = *(int *)(param_1 + 0x18);
  goto code_r0x00046f08;
}


PUSH EBP
MOV EBP,EAX
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00017b80
ADD EBX,0x187115
SUB ESP,0x1c
LEA EAX,[EBX + 0xffee0313]
MOV dword ptr [ESP + 0x8],EAX
LEA EAX,[EBX + 0x23e0]
MOV dword ptr [ESP + 0xc],EAX
CMP dword ptr [EBP + 0xc],0x6
JA 0x00046f45
MOV EAX,dword ptr [EBP + 0xc]
MOV EDX,dword ptr [EBX + EAX*0x4 + 0xfff68320]
ADD EDX,EBX
JMP EDX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_00046ee0(int param_1)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}\n\n" comment (function_definition "void __regparm3 FUN_00046ee0(int param_1)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00046ee0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "byte bVar9;" type_identifier identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (labeled_statement "code_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);" statement_identifier : (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;)) (do_statement "do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );" do (compound_statement "{\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  }" { (if_statement "if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }" if (parenthesized_expression "(6 < uVar1)" ( (binary_expression "6 < uVar1" number_literal < identifier) )) (compound_statement "{\nLAB_00046f45:\n      return;\n    }" { (labeled_statement "LAB_00046f45:\n      return;" statement_identifier : (return_statement "return;" return ;)) })) (expression_statement "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" identifier = (binary_expression "0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" number_literal < (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" * (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" & identifier) + (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) * number_literal)) )))))) ;) (expression_statement "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" identifier = (binary_expression "(int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (cast_expression "(int)&__DT_PLTGOT" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&__DT_PLTGOT" & identifier)) + (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" * (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" & identifier) + (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) * number_literal)) )))))) ;) (expression_statement "bVar8 = iVar3 == 0;" (assignment_expression "bVar8 = iVar3 == 0" identifier = (binary_expression "iVar3 == 0" identifier == number_literal)) ;) (switch_statement "switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" switch (parenthesized_expression "(iVar3)" ( identifier )) (compound_statement "{\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" { (case_statement "case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;" case number_literal : (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" identifier = false) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x46f45:\n      goto LAB_00046f45;" case number_literal : (goto_statement "goto LAB_00046f45;" goto statement_identifier ;)) (case_statement "case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;" case number_literal : (expression_statement "param_1 = *(int *)(param_1 + 0x10);" (assignment_expression "param_1 = *(int *)(param_1 + 0x10)" identifier = (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (goto_statement "goto code_r0x00046f08;" goto statement_identifier ;)) (case_statement "case 0x46f58:\n      goto code_r0x00046f58;" case number_literal : (goto_statement "goto code_r0x00046f58;" goto statement_identifier ;)) (case_statement "case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;" case number_literal : (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto code_r0x00046f3c;" goto statement_identifier ;)) (case_statement "default:\n      uVar4 = 1;" default : (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;)) })) (expression_statement "iVar3 = 2;" (assignment_expression "iVar3 = 2" identifier = number_literal) ;) (expression_statement "pbVar5 = *(byte **)(param_1 + 0x10);" (assignment_expression "pbVar5 = *(byte **)(param_1 + 0x10)" identifier = (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "pbVar6 = (byte *)0xae313;" (assignment_expression "pbVar6 = (byte *)0xae313" identifier = (cast_expression "(byte *)0xae313" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);" do (compound_statement "{\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    }" { (if_statement "if (iVar3 == 0) break;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "bVar7 = *pbVar5 < *pbVar6;" (assignment_expression "bVar7 = *pbVar5 < *pbVar6" identifier = (binary_expression "*pbVar5 < *pbVar6" (pointer_expression "*pbVar5" * identifier) < (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "bVar8 = *pbVar5 == *pbVar6;" (assignment_expression "bVar8 = *pbVar5 == *pbVar6" identifier = (binary_expression "*pbVar5 == *pbVar6" (pointer_expression "*pbVar5" * identifier) == (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1" identifier = (binary_expression "pbVar5 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar5 + (uint)bVar9 * -2" identifier + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1" identifier = (binary_expression "pbVar6 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar6 + (uint)bVar9 * -2" identifier + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar8)" ( identifier )) ;) (if_statement "if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" if (parenthesized_expression "(((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0))" ( (binary_expression "((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" (parenthesized_expression "((!bVar7 && !bVar8) != bVar7)" ( (binary_expression "(!bVar7 && !bVar8) != bVar7" (parenthesized_expression "(!bVar7 && !bVar8)" ( (binary_expression "!bVar7 && !bVar8" (unary_expression "!bVar7" ! identifier) && (unary_expression "!bVar8" ! identifier)) )) != identifier) )) && (parenthesized_expression "(iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" ( (comma_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0" (assignment_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" identifier = (call_expression "func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" identifier (argument_list "(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" ( identifier , (pointer_expression "&DAT_001d03e0" & identifier) , (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" { (expression_statement "uVar4 = *(undefined4 *)(param_1 + 0x10);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x10)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x10)" * (cast_expression "(undefined4 *)(param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);" (assignment_expression "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier = (call_expression "dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier (argument_list "(0,"%F%P: failed to record assignment to %s: %E\n",5)" ( number_literal , (string_literal ""%F%P: failed to record assignment to %s: %E\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "FUN_00034d20(uVar2,uVar4);" (call_expression "FUN_00034d20(uVar2,uVar4)" identifier (argument_list "(uVar2,uVar4)" ( identifier , identifier ))) ;) })) (labeled_statement "code_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);" statement_identifier : (expression_statement "param_1 = *(int *)(param_1 + 0x14);" (assignment_expression "param_1 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;)) (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (labeled_statement "code_r0x00046f58:\n  FUN_00046ee0();" statement_identifier : (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;)) (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;) (expression_statement "param_1 = *(int *)(param_1 + 0x18);" (assignment_expression "param_1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (goto_statement "goto code_r0x00046f08;" goto statement_identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 gldelf_iamcu_find_exp_assignment(etree_type *exp)\n\n{\n  etree_union *peVar1;\n  node_tree_enum nVar2;\n  char *fmt;\n  int iVar3;\n  undefined4 uVar4;\n  asection *paVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\nLAB_00046f08:\n  nVar2 = (exp->type).node_class;\n  do {\n    if (etree_provided < nVar2) {\n_L319:\n      return;\n    }\n    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    paVar5 = (exp->rel).section;\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }\nLAB_00046f3c:\n    exp = (exp->binary).rhs;\n    nVar2 = (exp->type).node_class;\n  } while( true );\n_L326:\n  gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n  gldelf_iamcu_find_exp_assignment((exp->binary).rhs);\n  exp = (etree_type *)(exp->assign).hidden;\n  goto LAB_00046f08;\n}\n\n" comment (function_definition "void __regparm3 gldelf_iamcu_find_exp_assignment(etree_type *exp)\n\n{\n  etree_union *peVar1;\n  node_tree_enum nVar2;\n  char *fmt;\n  int iVar3;\n  undefined4 uVar4;\n  asection *paVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\nLAB_00046f08:\n  nVar2 = (exp->type).node_class;\n  do {\n    if (etree_provided < nVar2) {\n_L319:\n      return;\n    }\n    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    paVar5 = (exp->rel).section;\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }\nLAB_00046f3c:\n    exp = (exp->binary).rhs;\n    nVar2 = (exp->type).node_class;\n  } while( true );\n_L326:\n  gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n  gldelf_iamcu_find_exp_assignment((exp->binary).rhs);\n  exp = (etree_type *)(exp->assign).hidden;\n  goto LAB_00046f08;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "gldelf_iamcu_find_exp_assignment(etree_type *exp)" identifier (parameter_list "(etree_type *exp)" ( (parameter_declaration "etree_type *exp" type_identifier (pointer_declarator "*exp" * identifier)) ))) (compound_statement "{\n  etree_union *peVar1;\n  node_tree_enum nVar2;\n  char *fmt;\n  int iVar3;\n  undefined4 uVar4;\n  asection *paVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\nLAB_00046f08:\n  nVar2 = (exp->type).node_class;\n  do {\n    if (etree_provided < nVar2) {\n_L319:\n      return;\n    }\n    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    paVar5 = (exp->rel).section;\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }\nLAB_00046f3c:\n    exp = (exp->binary).rhs;\n    nVar2 = (exp->type).node_class;\n  } while( true );\n_L326:\n  gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n  gldelf_iamcu_find_exp_assignment((exp->binary).rhs);\n  exp = (etree_type *)(exp->assign).hidden;\n  goto LAB_00046f08;\n}" { (declaration "etree_union *peVar1;" type_identifier (pointer_declarator "*peVar1" * identifier) ;) (declaration "node_tree_enum nVar2;" type_identifier identifier ;) (declaration "char *fmt;" primitive_type (pointer_declarator "*fmt" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "asection *paVar5;" type_identifier (pointer_declarator "*paVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "byte bVar9;" type_identifier identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (labeled_statement "LAB_00046f08:\n  nVar2 = (exp->type).node_class;" statement_identifier : (expression_statement "nVar2 = (exp->type).node_class;" (assignment_expression "nVar2 = (exp->type).node_class" identifier = (field_expression "(exp->type).node_class" (parenthesized_expression "(exp->type)" ( (field_expression "exp->type" identifier -> field_identifier) )) . field_identifier)) ;)) (do_statement "do {\n    if (etree_provided < nVar2) {\n_L319:\n      return;\n    }\n    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    paVar5 = (exp->rel).section;\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }\nLAB_00046f3c:\n    exp = (exp->binary).rhs;\n    nVar2 = (exp->type).node_class;\n  } while( true );" do (compound_statement "{\n    if (etree_provided < nVar2) {\n_L319:\n      return;\n    }\n    bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    paVar5 = (exp->rel).section;\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }\nLAB_00046f3c:\n    exp = (exp->binary).rhs;\n    nVar2 = (exp->type).node_class;\n  }" { (if_statement "if (etree_provided < nVar2) {\n_L319:\n      return;\n    }" if (parenthesized_expression "(etree_provided < nVar2)" ( (binary_expression "etree_provided < nVar2" identifier < identifier) )) (compound_statement "{\n_L319:\n      return;\n    }" { (labeled_statement "_L319:\n      return;" statement_identifier : (return_statement "return;" return ;)) })) (expression_statement "bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];" (assignment_expression "bVar7 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" identifier = (binary_expression "0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" number_literal < (subscript_expression "(&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" (parenthesized_expression "(&switchD_00046f1a::switchdataD_00136320)" ( (ERROR "&switchD_00046f1a::" (pointer_expression "&switchD_00046f1a" & identifier) : :) identifier )) [ (field_expression "(exp->type).node_class" (parenthesized_expression "(exp->type)" ( (field_expression "exp->type" identifier -> field_identifier) )) . field_identifier) ]))) ;) (expression_statement "iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];" (assignment_expression "iVar3 = (int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" identifier = (binary_expression "(int)&_GLOBAL_OFFSET_TABLE_ +\n            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" (cast_expression "(int)&_GLOBAL_OFFSET_TABLE_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&_GLOBAL_OFFSET_TABLE_" & identifier)) + (subscript_expression "(&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class]" (parenthesized_expression "(&switchD_00046f1a::switchdataD_00136320)" ( (ERROR "&switchD_00046f1a::" (pointer_expression "&switchD_00046f1a" & identifier) : :) identifier )) [ (field_expression "(exp->type).node_class" (parenthesized_expression "(exp->type)" ( (field_expression "exp->type" identifier -> field_identifier) )) . field_identifier) ]))) ;) (expression_statement "bVar8 = iVar3 == 0;" (assignment_expression "bVar8 = iVar3 == 0" identifier = (binary_expression "iVar3 == 0" identifier == number_literal)) ;) (switch_statement "switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }" switch (parenthesized_expression "(iVar3)" ( identifier )) (compound_statement "{\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto _L319;\n    case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;\n    case 0x46f58:\n      goto _L326;\n    case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;\n    default:\n      uVar4 = 1;\n    }" { (case_statement "case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;" case number_literal : (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" identifier = false) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x46f45:\n      goto _L319;" case number_literal : (goto_statement "goto _L319;" goto statement_identifier ;)) (case_statement "case 0x46f50:\n      exp = (etree_type *)(exp->rel).section;\n      goto LAB_00046f08;" case number_literal : (expression_statement "exp = (etree_type *)(exp->rel).section;" (assignment_expression "exp = (etree_type *)(exp->rel).section" identifier = (cast_expression "(etree_type *)(exp->rel).section" ( (type_descriptor "etree_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(exp->rel).section" (parenthesized_expression "(exp->rel)" ( (field_expression "exp->rel" identifier -> field_identifier) )) . field_identifier))) ;) (goto_statement "goto LAB_00046f08;" goto statement_identifier ;)) (case_statement "case 0x46f58:\n      goto _L326;" case number_literal : (goto_statement "goto _L326;" goto statement_identifier ;)) (case_statement "case 0x46f70:\n      gldelf_iamcu_find_exp_assignment((exp->binary).lhs);\n      goto LAB_00046f3c;" case number_literal : (expression_statement "gldelf_iamcu_find_exp_assignment((exp->binary).lhs);" (call_expression "gldelf_iamcu_find_exp_assignment((exp->binary).lhs)" identifier (argument_list "((exp->binary).lhs)" ( (field_expression "(exp->binary).lhs" (parenthesized_expression "(exp->binary)" ( (field_expression "exp->binary" identifier -> field_identifier) )) . field_identifier) ))) ;) (goto_statement "goto LAB_00046f3c;" goto statement_identifier ;)) (case_statement "default:\n      uVar4 = 1;" default : (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;)) })) (expression_statement "iVar3 = 2;" (assignment_expression "iVar3 = 2" identifier = number_literal) ;) (expression_statement "paVar5 = (exp->rel).section;" (assignment_expression "paVar5 = (exp->rel).section" identifier = (field_expression "(exp->rel).section" (parenthesized_expression "(exp->rel)" ( (field_expression "exp->rel" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pbVar6 = (byte *)0xae313;" (assignment_expression "pbVar6 = (byte *)0xae313" identifier = (cast_expression "(byte *)0xae313" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);" do (compound_statement "{\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *(byte *)&paVar5->name < *pbVar6;\n      bVar8 = *(byte *)&paVar5->name == *pbVar6;\n      paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    }" { (if_statement "if (iVar3 == 0) break;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "bVar7 = *(byte *)&paVar5->name < *pbVar6;" (assignment_expression "bVar7 = *(byte *)&paVar5->name < *pbVar6" identifier = (binary_expression "*(byte *)&paVar5->name < *pbVar6" (pointer_expression "*(byte *)&paVar5->name" * (cast_expression "(byte *)&paVar5->name" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&paVar5->name" & (field_expression "paVar5->name" identifier -> field_identifier)))) < (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "bVar8 = *(byte *)&paVar5->name == *pbVar6;" (assignment_expression "bVar8 = *(byte *)&paVar5->name == *pbVar6" identifier = (binary_expression "*(byte *)&paVar5->name == *pbVar6" (pointer_expression "*(byte *)&paVar5->name" * (cast_expression "(byte *)&paVar5->name" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&paVar5->name" & (field_expression "paVar5->name" identifier -> field_identifier)))) == (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1);" (assignment_expression "paVar5 = (asection *)((int)paVar5 + (uint)bVar9 * -2 + 1)" identifier = (cast_expression "(asection *)((int)paVar5 + (uint)bVar9 * -2 + 1)" ( (type_descriptor "asection *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)paVar5 + (uint)bVar9 * -2 + 1)" ( (binary_expression "(int)paVar5 + (uint)bVar9 * -2 + 1" (binary_expression "(int)paVar5 + (uint)bVar9 * -2" (cast_expression "(int)paVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) (expression_statement "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1" identifier = (binary_expression "pbVar6 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar6 + (uint)bVar9 * -2" identifier + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar8)" ( identifier )) ;) (if_statement "if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)) {\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }" if (parenthesized_expression "(((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0))" ( (binary_expression "((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)" (parenthesized_expression "((!bVar7 && !bVar8) != bVar7)" ( (binary_expression "(!bVar7 && !bVar8) != bVar7" (parenthesized_expression "(!bVar7 && !bVar8)" ( (binary_expression "!bVar7 && !bVar8" (unary_expression "!bVar7" ! identifier) && (unary_expression "!bVar8" ! identifier)) )) != identifier) )) && (parenthesized_expression "(iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0)" ( (comma_expression "iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs), iVar3 == 0" (assignment_expression "iVar3 = bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs)" identifier = (call_expression "bfd_elf_record_link_assignment\n                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs)" identifier (argument_list "(link_info.output_bfd,&link_info,(exp->rel).section,uVar4,\n                           (exp->trinary).rhs)" ( (field_expression "link_info.output_bfd" identifier . field_identifier) , (pointer_expression "&link_info" & identifier) , (field_expression "(exp->rel).section" (parenthesized_expression "(exp->rel)" ( (field_expression "exp->rel" identifier -> field_identifier) )) . field_identifier) , identifier , (field_expression "(exp->trinary).rhs" (parenthesized_expression "(exp->trinary)" ( (field_expression "exp->trinary" identifier -> field_identifier) )) . field_identifier) )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      peVar1 = (exp->binary).lhs;\n      fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      einfo(fmt,peVar1);\n    }" { (expression_statement "peVar1 = (exp->binary).lhs;" (assignment_expression "peVar1 = (exp->binary).lhs" identifier = (field_expression "(exp->binary).lhs" (parenthesized_expression "(exp->binary)" ( (field_expression "exp->binary" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);" (assignment_expression "fmt = (char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier (argument_list "(0,"%F%P: failed to record assignment to %s: %E\n",5)" ( number_literal , (string_literal ""%F%P: failed to record assignment to %s: %E\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "einfo(fmt,peVar1);" (call_expression "einfo(fmt,peVar1)" identifier (argument_list "(fmt,peVar1)" ( identifier , identifier ))) ;) })) (labeled_statement "LAB_00046f3c:\n    exp = (exp->binary).rhs;" statement_identifier : (expression_statement "exp = (exp->binary).rhs;" (assignment_expression "exp = (exp->binary).rhs" identifier = (field_expression "(exp->binary).rhs" (parenthesized_expression "(exp->binary)" ( (field_expression "exp->binary" identifier -> field_identifier) )) . field_identifier)) ;)) (expression_statement "nVar2 = (exp->type).node_class;" (assignment_expression "nVar2 = (exp->type).node_class" identifier = (field_expression "(exp->type).node_class" (parenthesized_expression "(exp->type)" ( (field_expression "exp->type" identifier -> field_identifier) )) . field_identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (labeled_statement "_L326:\n  gldelf_iamcu_find_exp_assignment((exp->binary).lhs);" statement_identifier : (expression_statement "gldelf_iamcu_find_exp_assignment((exp->binary).lhs);" (call_expression "gldelf_iamcu_find_exp_assignment((exp->binary).lhs)" identifier (argument_list "((exp->binary).lhs)" ( (field_expression "(exp->binary).lhs" (parenthesized_expression "(exp->binary)" ( (field_expression "exp->binary" identifier -> field_identifier) )) . field_identifier) ))) ;)) (expression_statement "gldelf_iamcu_find_exp_assignment((exp->binary).rhs);" (call_expression "gldelf_iamcu_find_exp_assignment((exp->binary).rhs)" identifier (argument_list "((exp->binary).rhs)" ( (field_expression "(exp->binary).rhs" (parenthesized_expression "(exp->binary)" ( (field_expression "exp->binary" identifier -> field_identifier) )) . field_identifier) ))) ;) (expression_statement "exp = (etree_type *)(exp->assign).hidden;" (assignment_expression "exp = (etree_type *)(exp->assign).hidden" identifier = (cast_expression "(etree_type *)(exp->assign).hidden" ( (type_descriptor "etree_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(exp->assign).hidden" (parenthesized_expression "(exp->assign)" ( (field_expression "exp->assign" identifier -> field_identifier) )) . field_identifier))) ;) (goto_statement "goto LAB_00046f08;" goto statement_identifier ;) })))
(translation_unit "void __regparm3 FUN_00046ee0(int param_1)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}\n\n" (function_definition "void __regparm3 FUN_00046ee0(int param_1)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00046ee0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "byte bVar9;" type_identifier identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (labeled_statement "code_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);" statement_identifier : (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;)) (do_statement "do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );" do (compound_statement "{\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  }" { (if_statement "if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }" if (parenthesized_expression "(6 < uVar1)" ( (binary_expression "6 < uVar1" number_literal < identifier) )) (compound_statement "{\nLAB_00046f45:\n      return;\n    }" { (labeled_statement "LAB_00046f45:\n      return;" statement_identifier : (return_statement "return;" return ;)) })) (expression_statement "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" identifier = (binary_expression "0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" number_literal < (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" * (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" & identifier) + (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) * number_literal)) )))))) ;) (expression_statement "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" identifier = (binary_expression "(int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (cast_expression "(int)&__DT_PLTGOT" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&__DT_PLTGOT" & identifier)) + (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" * (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" ( (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" & identifier) + (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) * number_literal)) )))))) ;) (expression_statement "bVar8 = iVar3 == 0;" (assignment_expression "bVar8 = iVar3 == 0" identifier = (binary_expression "iVar3 == 0" identifier == number_literal)) ;) (switch_statement "switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" switch (parenthesized_expression "(iVar3)" ( identifier )) (compound_statement "{\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" { (case_statement "case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;" case number_literal : (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" identifier = false) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" identifier = true) ;) (break_statement "break;" break ;)) (case_statement "case 0x46f45:\n      goto LAB_00046f45;" case number_literal : (goto_statement "goto LAB_00046f45;" goto statement_identifier ;)) (case_statement "case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;" case number_literal : (expression_statement "param_1 = *(int *)(param_1 + 0x10);" (assignment_expression "param_1 = *(int *)(param_1 + 0x10)" identifier = (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (goto_statement "goto code_r0x00046f08;" goto statement_identifier ;)) (case_statement "case 0x46f58:\n      goto code_r0x00046f58;" case number_literal : (goto_statement "goto code_r0x00046f58;" goto statement_identifier ;)) (case_statement "case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;" case number_literal : (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto code_r0x00046f3c;" goto statement_identifier ;)) (case_statement "default:\n      uVar4 = 1;" default : (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;)) })) (expression_statement "iVar3 = 2;" (assignment_expression "iVar3 = 2" identifier = number_literal) ;) (expression_statement "pbVar5 = *(byte **)(param_1 + 0x10);" (assignment_expression "pbVar5 = *(byte **)(param_1 + 0x10)" identifier = (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "pbVar6 = (byte *)0xae313;" (assignment_expression "pbVar6 = (byte *)0xae313" identifier = (cast_expression "(byte *)0xae313" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);" do (compound_statement "{\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    }" { (if_statement "if (iVar3 == 0) break;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "bVar7 = *pbVar5 < *pbVar6;" (assignment_expression "bVar7 = *pbVar5 < *pbVar6" identifier = (binary_expression "*pbVar5 < *pbVar6" (pointer_expression "*pbVar5" * identifier) < (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "bVar8 = *pbVar5 == *pbVar6;" (assignment_expression "bVar8 = *pbVar5 == *pbVar6" identifier = (binary_expression "*pbVar5 == *pbVar6" (pointer_expression "*pbVar5" * identifier) == (pointer_expression "*pbVar6" * identifier))) ;) (expression_statement "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1" identifier = (binary_expression "pbVar5 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar5 + (uint)bVar9 * -2" identifier + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1" identifier = (binary_expression "pbVar6 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar6 + (uint)bVar9 * -2" identifier + (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar8)" ( identifier )) ;) (if_statement "if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" if (parenthesized_expression "(((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0))" ( (binary_expression "((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" (parenthesized_expression "((!bVar7 && !bVar8) != bVar7)" ( (binary_expression "(!bVar7 && !bVar8) != bVar7" (parenthesized_expression "(!bVar7 && !bVar8)" ( (binary_expression "!bVar7 && !bVar8" (unary_expression "!bVar7" ! identifier) && (unary_expression "!bVar8" ! identifier)) )) != identifier) )) && (parenthesized_expression "(iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" ( (comma_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0" (assignment_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" identifier = (call_expression "func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" identifier (argument_list "(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" ( identifier , (pointer_expression "&DAT_001d03e0" & identifier) , (pointer_expression "*(byte **)(param_1 + 0x10)" * (cast_expression "(byte **)(param_1 + 0x10)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" { (expression_statement "uVar4 = *(undefined4 *)(param_1 + 0x10);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x10)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x10)" * (cast_expression "(undefined4 *)(param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);" (assignment_expression "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier = (call_expression "dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" identifier (argument_list "(0,"%F%P: failed to record assignment to %s: %E\n",5)" ( number_literal , (string_literal ""%F%P: failed to record assignment to %s: %E\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "FUN_00034d20(uVar2,uVar4);" (call_expression "FUN_00034d20(uVar2,uVar4)" identifier (argument_list "(uVar2,uVar4)" ( identifier , identifier ))) ;) })) (labeled_statement "code_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);" statement_identifier : (expression_statement "param_1 = *(int *)(param_1 + 0x14);" (assignment_expression "param_1 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;)) (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (labeled_statement "code_r0x00046f58:\n  FUN_00046ee0();" statement_identifier : (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;)) (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" identifier (argument_list "()" ( ))) ;) (expression_statement "param_1 = *(int *)(param_1 + 0x18);" (assignment_expression "param_1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (goto_statement "goto code_r0x00046f08;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (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 LIT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & IDENT)) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (switch_statement switch (parenthesized_expression ( IDENT )) (compound_statement { (case_statement case LIT : (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (break_statement break ;)) (case_statement case LIT : (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;)) (case_statement case LIT : (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( ))) ;) (goto_statement goto statement_identifier ;)) (case_statement default : (expression_statement (assignment_expression IDENT = LIT) ;)) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) != IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( BOOL )) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) })))
(function_definition "void __regparm3 FUN_00046ee0(int param_1)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00046ee0(int param_1)" (identifier "FUN_00046ee0") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  uint uVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  bool bVar7;\n  bool bVar8;\n  byte bVar9;\n  \n  bVar9 = 0;\ncode_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);\n  do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );\ncode_r0x00046f58:\n  FUN_00046ee0();\n  FUN_00046ee0();\n  param_1 = *(int *)(param_1 + 0x18);\n  goto code_r0x00046f08;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (declaration "bool bVar8;" (primitive_type "bool") (identifier "bVar8") (; ";")) (declaration "byte bVar9;" (type_identifier "byte") (identifier "bVar9") (; ";")) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" (identifier "bVar9") (= "=") (number_literal "0")) (; ";")) (labeled_statement "code_r0x00046f08:\n  uVar1 = *(uint *)(param_1 + 0xc);" (statement_identifier "code_r0x00046f08") (: ":") (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";"))) (do_statement "do {\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  } while( true );" (do "do") (compound_statement "{\n    if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }\n    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);\n    bVar8 = iVar3 == 0;\n    switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }\n    iVar3 = 2;\n    pbVar5 = *(byte **)(param_1 + 0x10);\n    pbVar6 = (byte *)0xae313;\n    do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);\n    if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }\ncode_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);\n    uVar1 = *(uint *)(param_1 + 0xc);\n  }" ({ "{") (if_statement "if (6 < uVar1) {\nLAB_00046f45:\n      return;\n    }" (if "if") (parenthesized_expression "(6 < uVar1)" (( "(") (binary_expression "6 < uVar1" (number_literal "6") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\nLAB_00046f45:\n      return;\n    }" ({ "{") (labeled_statement "LAB_00046f45:\n      return;" (statement_identifier "LAB_00046f45") (: ":") (return_statement "return;" (return "return") (; ";"))) (} "}"))) (expression_statement "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (identifier "bVar7") (= "=") (binary_expression "0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (number_literal "0xffe31fff") (< "<") (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (* "*") (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (( "(") (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" (& "&") (identifier "DAT_00136320")) (+ "+") (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (* "*") (number_literal "4"))) () ")")))))) (; ";")) (expression_statement "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);" (assignment_expression "iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (identifier "iVar3") (= "=") (binary_expression "(int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (cast_expression "(int)&__DT_PLTGOT" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&__DT_PLTGOT" (& "&") (identifier "__DT_PLTGOT"))) (+ "+") (pointer_expression "*(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (* "*") (cast_expression "(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4)" (( "(") (binary_expression "&DAT_00136320 + *(int *)(param_1 + 0xc) * 4" (pointer_expression "&DAT_00136320" (& "&") (identifier "DAT_00136320")) (+ "+") (binary_expression "*(int *)(param_1 + 0xc) * 4" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (* "*") (number_literal "4"))) () ")")))))) (; ";")) (expression_statement "bVar8 = iVar3 == 0;" (assignment_expression "bVar8 = iVar3 == 0" (identifier "bVar8") (= "=") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0"))) (; ";")) (switch_statement "switch(iVar3) {\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" (switch "switch") (parenthesized_expression "(iVar3)" (( "(") (identifier "iVar3") () ")")) (compound_statement "{\n    case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;\n    case 0x46f45:\n      goto LAB_00046f45;\n    case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;\n    case 0x46f58:\n      goto code_r0x00046f58;\n    case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;\n    default:\n      uVar4 = 1;\n    }" ({ "{") (case_statement "case 0x46f20:\n      bVar7 = false;\n      uVar4 = 0;\n      bVar8 = true;\n      break;" (case "case") (number_literal "0x46f20") (: ":") (expression_statement "bVar7 = false;" (assignment_expression "bVar7 = false" (identifier "bVar7") (= "=") (false "false")) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" (identifier "bVar8") (= "=") (true "true")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x46f45:\n      goto LAB_00046f45;" (case "case") (number_literal "0x46f45") (: ":") (goto_statement "goto LAB_00046f45;" (goto "goto") (statement_identifier "LAB_00046f45") (; ";"))) (case_statement "case 0x46f50:\n      param_1 = *(int *)(param_1 + 0x10);\n      goto code_r0x00046f08;" (case "case") (number_literal "0x46f50") (: ":") (expression_statement "param_1 = *(int *)(param_1 + 0x10);" (assignment_expression "param_1 = *(int *)(param_1 + 0x10)" (identifier "param_1") (= "=") (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (goto_statement "goto code_r0x00046f08;" (goto "goto") (statement_identifier "code_r0x00046f08") (; ";"))) (case_statement "case 0x46f58:\n      goto code_r0x00046f58;" (case "case") (number_literal "0x46f58") (: ":") (goto_statement "goto code_r0x00046f58;" (goto "goto") (statement_identifier "code_r0x00046f58") (; ";"))) (case_statement "case 0x46f70:\n      FUN_00046ee0();\n      goto code_r0x00046f3c;" (case "case") (number_literal "0x46f70") (: ":") (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" (identifier "FUN_00046ee0") (argument_list "()" (( "(") () ")"))) (; ";")) (goto_statement "goto code_r0x00046f3c;" (goto "goto") (statement_identifier "code_r0x00046f3c") (; ";"))) (case_statement "default:\n      uVar4 = 1;" (default "default") (: ":") (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" (identifier "uVar4") (= "=") (number_literal "1")) (; ";"))) (} "}"))) (expression_statement "iVar3 = 2;" (assignment_expression "iVar3 = 2" (identifier "iVar3") (= "=") (number_literal "2")) (; ";")) (expression_statement "pbVar5 = *(byte **)(param_1 + 0x10);" (assignment_expression "pbVar5 = *(byte **)(param_1 + 0x10)" (identifier "pbVar5") (= "=") (pointer_expression "*(byte **)(param_1 + 0x10)" (* "*") (cast_expression "(byte **)(param_1 + 0x10)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "pbVar6 = (byte *)0xae313;" (assignment_expression "pbVar6 = (byte *)0xae313" (identifier "pbVar6") (= "=") (cast_expression "(byte *)0xae313" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xae313"))) (; ";")) (do_statement "do {\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    } while (bVar8);" (do "do") (compound_statement "{\n      if (iVar3 == 0) break;\n      iVar3 = iVar3 + -1;\n      bVar7 = *pbVar5 < *pbVar6;\n      bVar8 = *pbVar5 == *pbVar6;\n      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;\n      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;\n    }" ({ "{") (if_statement "if (iVar3 == 0) break;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar7 = *pbVar5 < *pbVar6;" (assignment_expression "bVar7 = *pbVar5 < *pbVar6" (identifier "bVar7") (= "=") (binary_expression "*pbVar5 < *pbVar6" (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")) (< "<") (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")))) (; ";")) (expression_statement "bVar8 = *pbVar5 == *pbVar6;" (assignment_expression "bVar8 = *pbVar5 == *pbVar6" (identifier "bVar8") (= "=") (binary_expression "*pbVar5 == *pbVar6" (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")) (== "==") (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")))) (; ";")) (expression_statement "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar5 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar5 + (uint)bVar9 * -2" (identifier "pbVar5") (+ "+") (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar9")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1" (identifier "pbVar6") (= "=") (binary_expression "pbVar6 + (uint)bVar9 * -2 + 1" (binary_expression "pbVar6 + (uint)bVar9 * -2" (identifier "pbVar6") (+ "+") (binary_expression "(uint)bVar9 * -2" (cast_expression "(uint)bVar9" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar9")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar8)" (( "(") (identifier "bVar8") () ")")) (; ";")) (if_statement "if (((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" (if "if") (parenthesized_expression "(((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0))" (( "(") (binary_expression "((!bVar7 && !bVar8) != bVar7) &&\n       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" (parenthesized_expression "((!bVar7 && !bVar8) != bVar7)" (( "(") (binary_expression "(!bVar7 && !bVar8) != bVar7" (parenthesized_expression "(!bVar7 && !bVar8)" (( "(") (binary_expression "!bVar7 && !bVar8" (unary_expression "!bVar7" (! "!") (identifier "bVar7")) (&& "&&") (unary_expression "!bVar8" (! "!") (identifier "bVar8"))) () ")")) (!= "!=") (identifier "bVar7")) () ")")) (&& "&&") (parenthesized_expression "(iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)" (( "(") (comma_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0" (assignment_expression "iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" (identifier "iVar3") (= "=") (call_expression "func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" (identifier "func_0x00016100") (argument_list "(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,\n                                *(undefined4 *)(param_1 + 0x18))" (( "(") (identifier "DAT_001d0414") (, ",") (pointer_expression "&DAT_001d03e0" (& "&") (identifier "DAT_001d03e0")) (, ",") (pointer_expression "*(byte **)(param_1 + 0x10)" (* "*") (cast_expression "(byte **)(param_1 + 0x10)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (, ",") (identifier "uVar4") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) () ")")))) (, ",") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      uVar4 = *(undefined4 *)(param_1 + 0x10);\n      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);\n      FUN_00034d20(uVar2,uVar4);\n    }" ({ "{") (expression_statement "uVar4 = *(undefined4 *)(param_1 + 0x10);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x10)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined4 *)(param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);" (assignment_expression "uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" (identifier "uVar2") (= "=") (call_expression "dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5)" (identifier "dcgettext") (argument_list "(0,"%F%P: failed to record assignment to %s: %E\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%F%P: failed to record assignment to %s: %E\n"" (" """) (string_content "%F%P: failed to record assignment to %s: %E") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00034d20(uVar2,uVar4);" (call_expression "FUN_00034d20(uVar2,uVar4)" (identifier "FUN_00034d20") (argument_list "(uVar2,uVar4)" (( "(") (identifier "uVar2") (, ",") (identifier "uVar4") () ")"))) (; ";")) (} "}"))) (labeled_statement "code_r0x00046f3c:\n    param_1 = *(int *)(param_1 + 0x14);" (statement_identifier "code_r0x00046f3c") (: ":") (expression_statement "param_1 = *(int *)(param_1 + 0x14);" (assignment_expression "param_1 = *(int *)(param_1 + 0x14)" (identifier "param_1") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";"))) (expression_statement "uVar1 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0xc)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (labeled_statement "code_r0x00046f58:\n  FUN_00046ee0();" (statement_identifier "code_r0x00046f58") (: ":") (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" (identifier "FUN_00046ee0") (argument_list "()" (( "(") () ")"))) (; ";"))) (expression_statement "FUN_00046ee0();" (call_expression "FUN_00046ee0()" (identifier "FUN_00046ee0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "param_1 = *(int *)(param_1 + 0x18);" (assignment_expression "param_1 = *(int *)(param_1 + 0x18)" (identifier "param_1") (= "=") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (goto_statement "goto code_r0x00046f08;" (goto "goto") (statement_identifier "code_r0x00046f08") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 function_1(type_1 *exp)

{
  type_2 *peVar1;
  type_3 var_2;
  char *fmt;
  int var_3;
  type_4 uVar4;
  type_5 *paVar5;
  type_6 *var_4;
  bool var_5;
  bool bVar8;
  type_6 bVar9;
  
  bVar9 = 0;
LAB_00046f08:
  var_2 = (exp->type).node_class;
  do {
    if (var_1 < var_2) {
_L319:
      return;
    }
    var_5 = 0xffe31fff < (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];
    var_3 = (int)&_GLOBAL_OFFSET_TABLE_ +
            (&switchD_00046f1a::switchdataD_00136320)[(exp->type).node_class];
    bVar8 = var_3 == 0;
    switch(var_3) {
    case 0x46f20:
      var_5 = false;
      uVar4 = 0;
      bVar8 = true;
      break;
    case 0x46f45:
      goto _L319;
    case 0x46f50:
      exp = (type_1 *)(exp->rel).section;
      goto LAB_00046f08;
    case 0x46f58:
      goto _L326;
    case 0x46f70:
      function_1((exp->binary).lhs);
      goto LAB_00046f3c;
    default:
      uVar4 = 1;
    }
    var_3 = 2;
    paVar5 = (exp->rel).section;
    var_4 = (type_6 *)0xae313;
    do {
      if (var_3 == 0) break;
      var_3 = var_3 + -1;
      var_5 = *(type_6 *)&paVar5->name < *var_4;
      bVar8 = *(type_6 *)&paVar5->name == *var_4;
      paVar5 = (type_5 *)((int)paVar5 + (type_7)bVar9 * -2 + 1);
      var_4 = var_4 + (type_7)bVar9 * -2 + 1;
    } while (bVar8);
    if (((!var_5 && !bVar8) != var_5) &&
       (var_3 = var_6
                          (link_info.output_bfd,&link_info,(exp->rel).section,uVar4,
                           (exp->trinary).rhs), var_3 == 0)) {
      peVar1 = (exp->binary).lhs;
      fmt = (char *)var_7(0,"%F%P: failed to record assignment to %s: %E\n",5);
      var_8(fmt,peVar1);
    }
LAB_00046f3c:
    exp = (exp->binary).rhs;
    var_2 = (exp->type).node_class;
  } while( true );
_L326:
  function_1((exp->binary).lhs);
  function_1((exp->binary).rhs);
  exp = (type_1 *)(exp->assign).hidden;
  goto LAB_00046f08;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 MASKED(int param_1)

{
  uint uVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  byte *pbVar5;
  byte *pbVar6;
  bool bVar7;
  bool bVar8;
  byte bVar9;
  
  bVar9 = 0;
code_r0x00046f08:
  uVar1 = *(uint *)(param_1 + 0xc);
  do {
    if (6 < uVar1) {
LAB_00046f45:
      return;
    }
    bVar7 = 0xffe31fff < *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);
    iVar3 = (int)&__DT_PLTGOT + *(uint *)(&DAT_00136320 + *(int *)(param_1 + 0xc) * 4);
    bVar8 = iVar3 == 0;
    switch(iVar3) {
    case 0x46f20:
      bVar7 = false;
      uVar4 = 0;
      bVar8 = true;
      break;
    case 0x46f45:
      goto LAB_00046f45;
    case 0x46f50:
      param_1 = *(int *)(param_1 + 0x10);
      goto code_r0x00046f08;
    case 0x46f58:
      goto code_r0x00046f58;
    case 0x46f70:
      MASKED();
      goto code_r0x00046f3c;
    default:
      uVar4 = 1;
    }
    iVar3 = 2;
    pbVar5 = *(byte **)(param_1 + 0x10);
    pbVar6 = (byte *)0xae313;
    do {
      if (iVar3 == 0) break;
      iVar3 = iVar3 + -1;
      bVar7 = *pbVar5 < *pbVar6;
      bVar8 = *pbVar5 == *pbVar6;
      pbVar5 = pbVar5 + (uint)bVar9 * -2 + 1;
      pbVar6 = pbVar6 + (uint)bVar9 * -2 + 1;
    } while (bVar8);
    if (((!bVar7 && !bVar8) != bVar7) &&
       (iVar3 = func_0x00016100(DAT_001d0414,&DAT_001d03e0,*(byte **)(param_1 + 0x10),uVar4,
                                *(undefined4 *)(param_1 + 0x18)), iVar3 == 0)) {
      uVar4 = *(undefined4 *)(param_1 + 0x10);
      uVar2 = dcgettext(0,"%F%P: failed to record assignment to %s: %E\n",5);
      FUN_00034d20(uVar2,uVar4);
    }
code_r0x00046f3c:
    param_1 = *(int *)(param_1 + 0x14);
    uVar1 = *(uint *)(param_1 + 0xc);
  } while( true );
code_r0x00046f58:
  MASKED();
  MASKED();
  param_1 = *(int *)(param_1 + 0x18);
  goto code_r0x00046f08;
}

