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

char * __regparm3 dlang_parse_mangle(string *decl,char *mangled,dlang_symbol_kinds kind)

{
  char *pcVar1;
  char *pcVar2;
  int iVar3;
  int iVar4;
  char *pcVar5;
  string *in_stack_ffffffc4;
  char *in_stack_ffffffc8;
  string mods;
  
  pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind);
  if (pcVar1 == (char *)0x0) {
    return (char *)0x0;
  }
  if (*pcVar1 == 'Z') {
    pcVar1 = pcVar1 + 1;
    goto LAB_001f9a83;
  }
  mods.e = (char *)0x0;
  mods.p = (char *)0x0;
  mods.b = (char *)0x0;
  pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'));
  if (pcVar1 == (char *)0x0) {
LAB_001f9a24:
    pcVar5 = decl->b;
    pcVar2 = decl->p;
  }
  else {
    pcVar5 = decl->b;
    pcVar2 = decl->p;
    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {
      iVar3 = 0;
      if (pcVar5 != pcVar2) {
        iVar3 = (int)pcVar2 - (int)pcVar5;
      }
      pcVar1 = dlang_call_convention(decl,pcVar1);
      if (pcVar1 != (char *)0x0) {
        if (*pcVar1 == '\0') {
          pcVar1 = (char *)0x0;
        }
        else {
          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);
        }
      }
      pcVar5 = decl->b;
      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);
      if (pcVar5 == decl->p) {
        iVar4 = iVar3;
      }
      if (iVar4 < 0) {
        decl->p = pcVar5 + iVar3;
      }
      string_append(decl,"(");
      pcVar1 = dlang_function_args(decl,pcVar1);
      string_append(decl,")");
      if (mods.b != mods.p) {
        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);
      }
      goto LAB_001f9a24;
    }
  }
  if (pcVar5 == pcVar2) {
    pcVar1 = dlang_type(decl,pcVar1);
    pcVar5 = decl->b;
    pcVar2 = decl->p;
    if (pcVar5 != pcVar2) {
      iVar3 = 0;
      goto LAB_001f9a51;
    }
  }
  else {
    iVar3 = (int)pcVar2 - (int)pcVar5;
    pcVar1 = dlang_type(decl,pcVar1);
    pcVar5 = decl->b;
    pcVar2 = decl->p;
    iVar4 = iVar3;
    if (pcVar5 != pcVar2) {
LAB_001f9a51:
      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);
    }
    if (iVar4 < 0) {
      decl->p = pcVar5 + iVar3;
    }
  }
  if (mods.b != (char *)0x0) {
    free(mods.b);
  }
LAB_001f9a83:
  if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {
    return (char *)0x0;
  }
  return pcVar1;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x001f9a1b) */
/* WARNING: Removing unreachable block (ram,0x001f9a6a) */

char * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  pcVar1 = (char *)FUN_001fa0b0();
  if (pcVar1 == (char *)0x0) {
    return (char *)0x0;
  }
  if (*pcVar1 == 'Z') {
    pcVar1 = pcVar1 + 1;
    goto LAB_001f9a83;
  }
  pcVar1 = (char *)FUN_001f8210();
  if (pcVar1 == (char *)0x0) {
LAB_001f9a24:
    iVar4 = *param_1;
    iVar3 = param_1[1];
  }
  else {
    iVar4 = *param_1;
    iVar3 = param_1[1];
    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {
      iVar2 = 0;
      if (iVar4 != iVar3) {
        iVar2 = iVar3 - iVar4;
      }
      pcVar1 = (char *)FUN_001f8120();
      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {
        FUN_001f82d0();
      }
      iVar4 = *param_1;
      iVar3 = iVar2 - (param_1[1] - iVar4);
      if (iVar4 == param_1[1]) {
        iVar3 = iVar2;
      }
      if (iVar3 < 0) {
        param_1[1] = iVar4 + iVar2;
      }
      FUN_001f80d0();
      FUN_001f9730();
      FUN_001f80d0();
      goto LAB_001f9a24;
    }
  }
  if (iVar4 == iVar3) {
    pcVar1 = (char *)FUN_001f90f0();
    iVar4 = *param_1;
    iVar2 = param_1[1];
    if (iVar4 == iVar2) goto LAB_001f9a83;
    iVar3 = 0;
LAB_001f9a51:
    iVar5 = iVar3 - (iVar2 - iVar4);
  }
  else {
    iVar3 = iVar3 - iVar4;
    pcVar1 = (char *)FUN_001f90f0();
    iVar4 = *param_1;
    iVar2 = param_1[1];
    iVar5 = iVar3;
    if (iVar4 != iVar2) goto LAB_001f9a51;
  }
  if (iVar5 < 0) {
    param_1[1] = iVar3 + iVar4;
  }
LAB_001f9a83:
  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {
    return (char *)0x0;
  }
  return pcVar1;
}


PUSH EBP
ADD EDX,0x2
PUSH EDI
PUSH ESI
MOV ESI,EAX
PUSH EBX
CALL 0x00036db0
ADD EBX,0x1b06f2
SUB ESP,0x2c
MOV dword ptr [ESP + 0x8],ECX
XOR ECX,ECX
CALL 0x001fa0b0
TEST EAX,EAX
JZ 0x001f9aa0
MOV EDX,EAX
MOVZX EAX,byte ptr [EAX]
CMP AL,0x5a
JZ 0x001f9a80
CMP AL,0x4d
MOV dword ptr [ESP + 0x1c],0x0
SETZ AL
MOV dword ptr [ESP + 0x18],0x0
MOVZX EAX,AL
MOV dword ptr [ESP + 0x14],0x0
ADD EDX,EAX
LEA EAX,[ESP + 0x14]
CALL 0x001f8210
MOV EDI,EAX
TEST EAX,EAX
JZ 0x001f9a24
MOVZX EAX,byte ptr [EAX]
MOV EDX,dword ptr [ESI]
LEA ECX,[EAX + -0x46]
MOV EAX,dword ptr [ESI + 0x4]
CMP CL,0x13
JA 0x001f9a29
MOV EBP,0x1
SHL EBP,CL
MOV ECX,EBP
AND ECX,0xb9001
JZ 0x001f9a29
MOV ECX,EAX
SUB ECX,EDX
CMP EDX,EAX
MOV EAX,0x0
MOV EDX,EDI
CMOVNZ EAX,ECX
MOV EBP,EAX
MOV EAX,ESI
CALL 0x001f8120
MOV EDI,EAX
TEST EAX,EAX
JZ 0x001f99c8
CMP byte ptr [EAX],0x0
JZ 0x001f9af0
MOV EDX,EAX
MOV EAX,ESI
CALL 0x001f82d0
MOV EDI,EAX
MOV ECX,dword ptr [ESI + 0x4]
MOV EAX,dword ptr [ESI]
MOV EDX,ECX
MOV dword ptr [ESP + 0xc],ECX
MOV ECX,EBP
SUB EDX,EAX
SUB ECX,EDX
CMP EAX,dword ptr [ESP + 0xc]
MOV EDX,ECX
CMOVZ EDX,EBP
TEST EDX,EDX
JS 0x001f9ae0
LEA EDX,[EBX + 0xfff040ac]
MOV EAX,ESI
CALL 0x001f80d0
MOV EDX,EDI
MOV EAX,ESI
CALL 0x001f9730
LEA EDX,[EBX + 0xfff0f3ab]
MOV EDI,EAX
MOV EAX,ESI
CALL 0x001f80d0
MOV EDX,dword ptr [ESP + 0x14]
MOV ECX,dword ptr [ESP + 0x18]
CMP EDX,ECX
JZ 0x001f9a24
SUB ECX,EDX
MOV EAX,ESI
CALL 0x001f8450
MOV EDX,dword ptr [ESI]
MOV EAX,dword ptr [ESI + 0x4]
CMP EDX,EAX
JZ 0x001f9ab0
SUB EAX,EDX
MOV EDX,EDI
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,ESI
CALL 0x001f90f0
MOV EDI,dword ptr [ESI]
MOV EDX,dword ptr [ESI + 0x4]
MOV ECX,dword ptr [ESP + 0xc]
CMP EDI,EDX
JZ 0x001f9ad0
SUB EDX,EDI
MOV EBP,ECX
SUB EBP,EDX
MOV EDX,EBP
TEST EDX,EDX
JNS 0x001f9a62
ADD ECX,EDI
MOV dword ptr [ESI + 0x4],ECX
MOV EDX,dword ptr [ESP + 0x14]
TEST EDX,EDX
JZ 0x001f9a83
MOV dword ptr [ESP + 0xc],EAX
SUB ESP,0xc
PUSH EDX
CALL 0x0002a420
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0xc]
JMP 0x001f9a83
LEA EAX,[EDX + 0x1]
MOV EDX,dword ptr [ESP + 0x8]
TEST EDX,EDX
JNZ 0x001f9a94
TEST EAX,EAX
JZ 0x001f9aa0
CMP byte ptr [EAX],0x0
JNZ 0x001f9aa0
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x2c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,EDI
MOV EAX,ESI
CALL 0x001f90f0
MOV EDI,dword ptr [ESI]
MOV EDX,dword ptr [ESI + 0x4]
CMP EDI,EDX
JZ 0x001f9a62
XOR ECX,ECX
JMP 0x001f9a51
MOV EDX,ECX
JMP 0x001f9a59
ADD EAX,EBP
MOV dword ptr [ESI + 0x4],EAX
JMP 0x001f99ea
XOR EDI,EDI
JMP 0x001f99c8
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Removing unreachable block (ram,0x001f9a1b) */\n/* WARNING: Removing unreachable block (ram,0x001f9a6a) */\n\nchar * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}\n\n" comment comment comment (function_definition "char * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "pcVar1 = (char *)FUN_001fa0b0();" (assignment_expression "pcVar1 = (char *)FUN_001fa0b0()" identifier = (cast_expression "(char *)FUN_001fa0b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001fa0b0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" if (parenthesized_expression "(*pcVar1 == 'Z')" ( (binary_expression "*pcVar1 == 'Z'" (pointer_expression "*pcVar1" * identifier) == (char_literal "'Z'" ' character ')) )) (compound_statement "{\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" { (expression_statement "pcVar1 = pcVar1 + 1;" (assignment_expression "pcVar1 = pcVar1 + 1" identifier = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_001f9a83;" goto statement_identifier ;) })) (expression_statement "pcVar1 = (char *)FUN_001f8210();" (assignment_expression "pcVar1 = (char *)FUN_001f8210()" identifier = (cast_expression "(char *)FUN_001f8210()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f8210()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }" { (labeled_statement "LAB_001f9a24:\n    iVar4 = *param_1;" statement_identifier : (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" else (compound_statement "{\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" { (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" if (parenthesized_expression "(((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0))" ( (binary_expression "((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" (parenthesized_expression "((byte)(*pcVar1 + 0xbaU) < 0x14)" ( (binary_expression "(byte)(*pcVar1 + 0xbaU) < 0x14" (call_expression "(byte)(*pcVar1 + 0xbaU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar1 + 0xbaU)" ( (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) ))) < number_literal) )) && (parenthesized_expression "((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" ( (binary_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0" (parenthesized_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U)" ( (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U" (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f)" number_literal << (parenthesized_expression "(*pcVar1 + 0xbaU & 0x1f)" ( (binary_expression "*pcVar1 + 0xbaU & 0x1f" (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) & number_literal) ))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (if_statement "if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }" if (parenthesized_expression "(iVar4 != iVar3)" ( (binary_expression "iVar4 != iVar3" identifier != identifier) )) (compound_statement "{\n        iVar2 = iVar3 - iVar4;\n      }" { (expression_statement "iVar2 = iVar3 - iVar4;" (assignment_expression "iVar2 = iVar3 - iVar4" identifier = (binary_expression "iVar3 - iVar4" identifier - identifier)) ;) })) (expression_statement "pcVar1 = (char *)FUN_001f8120();" (assignment_expression "pcVar1 = (char *)FUN_001f8120()" identifier = (cast_expression "(char *)FUN_001f8120()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f8120()" identifier (argument_list "()" ( ))))) ;) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }" if (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" ( (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n        FUN_001f82d0();\n      }" { (expression_statement "FUN_001f82d0();" (call_expression "FUN_001f82d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = iVar2 - (param_1[1] - iVar4);" (assignment_expression "iVar3 = iVar2 - (param_1[1] - iVar4)" identifier = (binary_expression "iVar2 - (param_1[1] - iVar4)" identifier - (parenthesized_expression "(param_1[1] - iVar4)" ( (binary_expression "param_1[1] - iVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) - identifier) )))) ;) (if_statement "if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }" if (parenthesized_expression "(iVar4 == param_1[1])" ( (binary_expression "iVar4 == param_1[1]" identifier == (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n        iVar3 = iVar2;\n      }" { (expression_statement "iVar3 = iVar2;" (assignment_expression "iVar3 = iVar2" identifier = identifier) ;) })) (if_statement "if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n        param_1[1] = iVar4 + iVar2;\n      }" { (expression_statement "param_1[1] = iVar4 + iVar2;" (assignment_expression "param_1[1] = iVar4 + iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "iVar4 + iVar2" identifier + identifier)) ;) })) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001f9730();" (call_expression "FUN_001f9730()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_001f9a24;" goto statement_identifier ;) })) }))) (if_statement "if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" if (parenthesized_expression "(iVar4 == iVar3)" ( (binary_expression "iVar4 == iVar3" identifier == identifier) )) (compound_statement "{\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }" { (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" identifier = (cast_expression "(char *)FUN_001f90f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f90f0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar4 == iVar2) goto LAB_001f9a83;" if (parenthesized_expression "(iVar4 == iVar2)" ( (binary_expression "iVar4 == iVar2" identifier == identifier) )) (goto_statement "goto LAB_001f9a83;" goto statement_identifier ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "LAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);" statement_identifier : (expression_statement "iVar5 = iVar3 - (iVar2 - iVar4);" (assignment_expression "iVar5 = iVar3 - (iVar2 - iVar4)" identifier = (binary_expression "iVar3 - (iVar2 - iVar4)" identifier - (parenthesized_expression "(iVar2 - iVar4)" ( (binary_expression "iVar2 - iVar4" identifier - identifier) )))) ;)) }) (else_clause "else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" else (compound_statement "{\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" { (expression_statement "iVar3 = iVar3 - iVar4;" (assignment_expression "iVar3 = iVar3 - iVar4" identifier = (binary_expression "iVar3 - iVar4" identifier - identifier)) ;) (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" identifier = (cast_expression "(char *)FUN_001f90f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f90f0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar3;" (assignment_expression "iVar5 = iVar3" identifier = identifier) ;) (if_statement "if (iVar4 != iVar2) goto LAB_001f9a51;" if (parenthesized_expression "(iVar4 != iVar2)" ( (binary_expression "iVar4 != iVar2" identifier != identifier) )) (goto_statement "goto LAB_001f9a51;" goto statement_identifier ;)) }))) (if_statement "if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n    param_1[1] = iVar3 + iVar4;\n  }" { (expression_statement "param_1[1] = iVar3 + iVar4;" (assignment_expression "param_1[1] = iVar3 + iVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "iVar3 + iVar4" identifier + identifier)) ;) })) (labeled_statement "LAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" statement_identifier : (if_statement "if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))))" ( (binary_expression "(param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) && (parenthesized_expression "((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" ( (parenthesized_expression "(pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))" ( (binary_expression "pcVar1 == (char *)0x0 || (*pcVar1 != '\0')" (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) || (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) ))) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) (return_statement "return pcVar1;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nchar * __regparm3 dlang_parse_mangle(string *decl,char *mangled,dlang_symbol_kinds kind)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  int iVar3;\n  int iVar4;\n  char *pcVar5;\n  string *in_stack_ffffffc4;\n  char *in_stack_ffffffc8;\n  string mods;\n  \n  pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind);\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  mods.e = (char *)0x0;\n  mods.p = (char *)0x0;\n  mods.b = (char *)0x0;\n  pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'));\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n  }\n  else {\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }\n  if (pcVar5 == pcVar2) {\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }\n  }\n  else {\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }\n  if (mods.b != (char *)0x0) {\n    free(mods.b);\n  }\nLAB_001f9a83:\n  if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}\n\n" comment (function_definition "char * __regparm3 dlang_parse_mangle(string *decl,char *mangled,dlang_symbol_kinds kind)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  int iVar3;\n  int iVar4;\n  char *pcVar5;\n  string *in_stack_ffffffc4;\n  char *in_stack_ffffffc8;\n  string mods;\n  \n  pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind);\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  mods.e = (char *)0x0;\n  mods.p = (char *)0x0;\n  mods.b = (char *)0x0;\n  pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'));\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n  }\n  else {\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }\n  if (pcVar5 == pcVar2) {\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }\n  }\n  else {\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }\n  if (mods.b != (char *)0x0) {\n    free(mods.b);\n  }\nLAB_001f9a83:\n  if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" primitive_type (pointer_declarator "* __regparm3 dlang_parse_mangle(string *decl,char *mangled,dlang_symbol_kinds kind)" * (ERROR "__regparm3" identifier) (function_declarator "dlang_parse_mangle(string *decl,char *mangled,dlang_symbol_kinds kind)" identifier (parameter_list "(string *decl,char *mangled,dlang_symbol_kinds kind)" ( (parameter_declaration "string *decl" type_identifier (pointer_declarator "*decl" * identifier)) , (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) , (parameter_declaration "dlang_symbol_kinds kind" type_identifier identifier) )))) (compound_statement "{\n  char *pcVar1;\n  char *pcVar2;\n  int iVar3;\n  int iVar4;\n  char *pcVar5;\n  string *in_stack_ffffffc4;\n  char *in_stack_ffffffc8;\n  string mods;\n  \n  pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind);\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  mods.e = (char *)0x0;\n  mods.p = (char *)0x0;\n  mods.b = (char *)0x0;\n  pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'));\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n  }\n  else {\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }\n  if (pcVar5 == pcVar2) {\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }\n  }\n  else {\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }\n  if (mods.b != (char *)0x0) {\n    free(mods.b);\n  }\nLAB_001f9a83:\n  if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "string *in_stack_ffffffc4;" type_identifier (pointer_declarator "*in_stack_ffffffc4" * identifier) ;) (declaration "char *in_stack_ffffffc8;" primitive_type (pointer_declarator "*in_stack_ffffffc8" * identifier) ;) (declaration "string mods;" type_identifier identifier ;) (expression_statement "pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind);" (assignment_expression "pcVar1 = dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind)" identifier = (call_expression "dlang_parse_qualified(in_stack_ffffffc4,in_stack_ffffffc8,kind)" identifier (argument_list "(in_stack_ffffffc4,in_stack_ffffffc8,kind)" ( identifier , identifier , identifier )))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" if (parenthesized_expression "(*pcVar1 == 'Z')" ( (binary_expression "*pcVar1 == 'Z'" (pointer_expression "*pcVar1" * identifier) == (char_literal "'Z'" ' character ')) )) (compound_statement "{\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" { (expression_statement "pcVar1 = pcVar1 + 1;" (assignment_expression "pcVar1 = pcVar1 + 1" identifier = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_001f9a83;" goto statement_identifier ;) })) (expression_statement "mods.e = (char *)0x0;" (assignment_expression "mods.e = (char *)0x0" (field_expression "mods.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "mods.p = (char *)0x0;" (assignment_expression "mods.p = (char *)0x0" (field_expression "mods.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "mods.b = (char *)0x0;" (assignment_expression "mods.b = (char *)0x0" (field_expression "mods.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'));" (assignment_expression "pcVar1 = dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'))" identifier = (call_expression "dlang_type_modifiers(&mods,pcVar1 + (*pcVar1 == 'M'))" identifier (argument_list "(&mods,pcVar1 + (*pcVar1 == 'M'))" ( (pointer_expression "&mods" & identifier) , (binary_expression "pcVar1 + (*pcVar1 == 'M')" identifier + (parenthesized_expression "(*pcVar1 == 'M')" ( (binary_expression "*pcVar1 == 'M'" (pointer_expression "*pcVar1" * identifier) == (char_literal "'M'" ' character ')) ))) )))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n  }\n  else {\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001f9a24:\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n  }" { (labeled_statement "LAB_001f9a24:\n    pcVar5 = decl->b;" statement_identifier : (expression_statement "pcVar5 = decl->b;" (assignment_expression "pcVar5 = decl->b" identifier = (field_expression "decl->b" identifier -> field_identifier)) ;)) (expression_statement "pcVar2 = decl->p;" (assignment_expression "pcVar2 = decl->p" identifier = (field_expression "decl->p" identifier -> field_identifier)) ;) }) (else_clause "else {\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }" else (compound_statement "{\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }\n  }" { (expression_statement "pcVar5 = decl->b;" (assignment_expression "pcVar5 = decl->b" identifier = (field_expression "decl->b" identifier -> field_identifier)) ;) (expression_statement "pcVar2 = decl->p;" (assignment_expression "pcVar2 = decl->p" identifier = (field_expression "decl->p" identifier -> field_identifier)) ;) (if_statement "if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }" if (parenthesized_expression "(((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0))" ( (binary_expression "((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" (parenthesized_expression "((byte)(*pcVar1 + 0xbaU) < 0x14)" ( (binary_expression "(byte)(*pcVar1 + 0xbaU) < 0x14" (call_expression "(byte)(*pcVar1 + 0xbaU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar1 + 0xbaU)" ( (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) ))) < number_literal) )) && (parenthesized_expression "((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" ( (binary_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0" (parenthesized_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U)" ( (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U" (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f)" number_literal << (parenthesized_expression "(*pcVar1 + 0xbaU & 0x1f)" ( (binary_expression "*pcVar1 + 0xbaU & 0x1f" (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) & number_literal) ))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      iVar3 = 0;\n      if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }\n      pcVar1 = dlang_call_convention(decl,pcVar1);\n      if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }\n      pcVar5 = decl->b;\n      iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);\n      if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }\n      if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }\n      string_append(decl,"(");\n      pcVar1 = dlang_function_args(decl,pcVar1);\n      string_append(decl,")");\n      if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }\n      goto LAB_001f9a24;\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (if_statement "if (pcVar5 != pcVar2) {\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }" if (parenthesized_expression "(pcVar5 != pcVar2)" ( (binary_expression "pcVar5 != pcVar2" identifier != identifier) )) (compound_statement "{\n        iVar3 = (int)pcVar2 - (int)pcVar5;\n      }" { (expression_statement "iVar3 = (int)pcVar2 - (int)pcVar5;" (assignment_expression "iVar3 = (int)pcVar2 - (int)pcVar5" identifier = (binary_expression "(int)pcVar2 - (int)pcVar5" (cast_expression "(int)pcVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier))) ;) })) (expression_statement "pcVar1 = dlang_call_convention(decl,pcVar1);" (assignment_expression "pcVar1 = dlang_call_convention(decl,pcVar1)" identifier = (call_expression "dlang_call_convention(decl,pcVar1)" identifier (argument_list "(decl,pcVar1)" ( identifier , identifier )))) ;) (if_statement "if (pcVar1 != (char *)0x0) {\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }" if (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }\n      }" { (if_statement "if (*pcVar1 == '\0') {\n          pcVar1 = (char *)0x0;\n        }\n        else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }" if (parenthesized_expression "(*pcVar1 == '\0')" ( (binary_expression "*pcVar1 == '\0'" (pointer_expression "*pcVar1" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          pcVar1 = (char *)0x0;\n        }" { (expression_statement "pcVar1 = (char *)0x0;" (assignment_expression "pcVar1 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }" else (compound_statement "{\n          pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);\n        }" { (expression_statement "pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8);" (assignment_expression "pcVar1 = dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8)" identifier = (call_expression "dlang_attributes(in_stack_ffffffc4,in_stack_ffffffc8)" identifier (argument_list "(in_stack_ffffffc4,in_stack_ffffffc8)" ( identifier , identifier )))) ;) }))) })) (expression_statement "pcVar5 = decl->b;" (assignment_expression "pcVar5 = decl->b" identifier = (field_expression "decl->b" identifier -> field_identifier)) ;) (expression_statement "iVar4 = iVar3 - ((int)decl->p - (int)pcVar5);" (assignment_expression "iVar4 = iVar3 - ((int)decl->p - (int)pcVar5)" identifier = (binary_expression "iVar3 - ((int)decl->p - (int)pcVar5)" identifier - (parenthesized_expression "((int)decl->p - (int)pcVar5)" ( (binary_expression "(int)decl->p - (int)pcVar5" (cast_expression "(int)decl->p" ( (type_descriptor "int" primitive_type) ) (field_expression "decl->p" identifier -> field_identifier)) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (if_statement "if (pcVar5 == decl->p) {\n        iVar4 = iVar3;\n      }" if (parenthesized_expression "(pcVar5 == decl->p)" ( (binary_expression "pcVar5 == decl->p" identifier == (field_expression "decl->p" identifier -> field_identifier)) )) (compound_statement "{\n        iVar4 = iVar3;\n      }" { (expression_statement "iVar4 = iVar3;" (assignment_expression "iVar4 = iVar3" identifier = identifier) ;) })) (if_statement "if (iVar4 < 0) {\n        decl->p = pcVar5 + iVar3;\n      }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n        decl->p = pcVar5 + iVar3;\n      }" { (expression_statement "decl->p = pcVar5 + iVar3;" (assignment_expression "decl->p = pcVar5 + iVar3" (field_expression "decl->p" identifier -> field_identifier) = (binary_expression "pcVar5 + iVar3" identifier + identifier)) ;) })) (expression_statement "string_append(decl,"(");" (call_expression "string_append(decl,"(")" identifier (argument_list "(decl,"(")" ( identifier , (string_literal ""("" " string_content ") ))) ;) (expression_statement "pcVar1 = dlang_function_args(decl,pcVar1);" (assignment_expression "pcVar1 = dlang_function_args(decl,pcVar1)" identifier = (call_expression "dlang_function_args(decl,pcVar1)" identifier (argument_list "(decl,pcVar1)" ( identifier , identifier )))) ;) (expression_statement "string_append(decl,")");" (call_expression "string_append(decl,")")" identifier (argument_list "(decl,")")" ( identifier , (string_literal "")"" " string_content ") ))) ;) (if_statement "if (mods.b != mods.p) {\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }" if (parenthesized_expression "(mods.b != mods.p)" ( (binary_expression "mods.b != mods.p" (field_expression "mods.b" identifier . field_identifier) != (field_expression "mods.p" identifier . field_identifier)) )) (compound_statement "{\n        string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);\n      }" { (expression_statement "string_appendn(decl,mods.b,(int)mods.p - (int)mods.b);" (call_expression "string_appendn(decl,mods.b,(int)mods.p - (int)mods.b)" identifier (argument_list "(decl,mods.b,(int)mods.p - (int)mods.b)" ( identifier , (field_expression "mods.b" identifier . field_identifier) , (binary_expression "(int)mods.p - (int)mods.b" (cast_expression "(int)mods.p" ( (type_descriptor "int" primitive_type) ) (field_expression "mods.p" identifier . field_identifier)) - (cast_expression "(int)mods.b" ( (type_descriptor "int" primitive_type) ) (field_expression "mods.b" identifier . field_identifier))) ))) ;) })) (goto_statement "goto LAB_001f9a24;" goto statement_identifier ;) })) }))) (if_statement "if (pcVar5 == pcVar2) {\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }\n  }\n  else {\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }" if (parenthesized_expression "(pcVar5 == pcVar2)" ( (binary_expression "pcVar5 == pcVar2" identifier == identifier) )) (compound_statement "{\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }\n  }" { (expression_statement "pcVar1 = dlang_type(decl,pcVar1);" (assignment_expression "pcVar1 = dlang_type(decl,pcVar1)" identifier = (call_expression "dlang_type(decl,pcVar1)" identifier (argument_list "(decl,pcVar1)" ( identifier , identifier )))) ;) (expression_statement "pcVar5 = decl->b;" (assignment_expression "pcVar5 = decl->b" identifier = (field_expression "decl->b" identifier -> field_identifier)) ;) (expression_statement "pcVar2 = decl->p;" (assignment_expression "pcVar2 = decl->p" identifier = (field_expression "decl->p" identifier -> field_identifier)) ;) (if_statement "if (pcVar5 != pcVar2) {\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }" if (parenthesized_expression "(pcVar5 != pcVar2)" ( (binary_expression "pcVar5 != pcVar2" identifier != identifier) )) (compound_statement "{\n      iVar3 = 0;\n      goto LAB_001f9a51;\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_001f9a51;" goto statement_identifier ;) })) }) (else_clause "else {\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }" else (compound_statement "{\n    iVar3 = (int)pcVar2 - (int)pcVar5;\n    pcVar1 = dlang_type(decl,pcVar1);\n    pcVar5 = decl->b;\n    pcVar2 = decl->p;\n    iVar4 = iVar3;\n    if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }\n    if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }\n  }" { (expression_statement "iVar3 = (int)pcVar2 - (int)pcVar5;" (assignment_expression "iVar3 = (int)pcVar2 - (int)pcVar5" identifier = (binary_expression "(int)pcVar2 - (int)pcVar5" (cast_expression "(int)pcVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pcVar1 = dlang_type(decl,pcVar1);" (assignment_expression "pcVar1 = dlang_type(decl,pcVar1)" identifier = (call_expression "dlang_type(decl,pcVar1)" identifier (argument_list "(decl,pcVar1)" ( identifier , identifier )))) ;) (expression_statement "pcVar5 = decl->b;" (assignment_expression "pcVar5 = decl->b" identifier = (field_expression "decl->b" identifier -> field_identifier)) ;) (expression_statement "pcVar2 = decl->p;" (assignment_expression "pcVar2 = decl->p" identifier = (field_expression "decl->p" identifier -> field_identifier)) ;) (expression_statement "iVar4 = iVar3;" (assignment_expression "iVar4 = iVar3" identifier = identifier) ;) (if_statement "if (pcVar5 != pcVar2) {\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }" if (parenthesized_expression "(pcVar5 != pcVar2)" ( (binary_expression "pcVar5 != pcVar2" identifier != identifier) )) (compound_statement "{\nLAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);\n    }" { (labeled_statement "LAB_001f9a51:\n      iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);" statement_identifier : (expression_statement "iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5);" (assignment_expression "iVar4 = iVar3 - ((int)pcVar2 - (int)pcVar5)" identifier = (binary_expression "iVar3 - ((int)pcVar2 - (int)pcVar5)" identifier - (parenthesized_expression "((int)pcVar2 - (int)pcVar5)" ( (binary_expression "(int)pcVar2 - (int)pcVar5" (cast_expression "(int)pcVar2" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;)) })) (if_statement "if (iVar4 < 0) {\n      decl->p = pcVar5 + iVar3;\n    }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n      decl->p = pcVar5 + iVar3;\n    }" { (expression_statement "decl->p = pcVar5 + iVar3;" (assignment_expression "decl->p = pcVar5 + iVar3" (field_expression "decl->p" identifier -> field_identifier) = (binary_expression "pcVar5 + iVar3" identifier + identifier)) ;) })) }))) (if_statement "if (mods.b != (char *)0x0) {\n    free(mods.b);\n  }" if (parenthesized_expression "(mods.b != (char *)0x0)" ( (binary_expression "mods.b != (char *)0x0" (field_expression "mods.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(mods.b);\n  }" { (expression_statement "free(mods.b);" (call_expression "free(mods.b)" identifier (argument_list "(mods.b)" ( (field_expression "mods.b" identifier . field_identifier) ))) ;) })) (labeled_statement "LAB_001f9a83:\n  if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" statement_identifier : (if_statement "if ((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "((kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))))" ( (binary_expression "(kind == dlang_top_level) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" (parenthesized_expression "(kind == dlang_top_level)" ( (binary_expression "kind == dlang_top_level" identifier == identifier) )) && (parenthesized_expression "((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" ( (parenthesized_expression "(pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))" ( (binary_expression "pcVar1 == (char *)0x0 || (*pcVar1 != '\0')" (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) || (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) ))) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) (return_statement "return pcVar1;" return identifier ;) })))
(translation_unit "char * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}\n\n" (function_definition "char * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(int *param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "pcVar1 = (char *)FUN_001fa0b0();" (assignment_expression "pcVar1 = (char *)FUN_001fa0b0()" identifier = (cast_expression "(char *)FUN_001fa0b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001fa0b0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" if (parenthesized_expression "(*pcVar1 == 'Z')" ( (binary_expression "*pcVar1 == 'Z'" (pointer_expression "*pcVar1" * identifier) == (char_literal "'Z'" ' character ')) )) (compound_statement "{\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" { (expression_statement "pcVar1 = pcVar1 + 1;" (assignment_expression "pcVar1 = pcVar1 + 1" identifier = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_001f9a83;" goto statement_identifier ;) })) (expression_statement "pcVar1 = (char *)FUN_001f8210();" (assignment_expression "pcVar1 = (char *)FUN_001f8210()" identifier = (cast_expression "(char *)FUN_001f8210()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f8210()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" if (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }" { (labeled_statement "LAB_001f9a24:\n    iVar4 = *param_1;" statement_identifier : (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" else (compound_statement "{\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" { (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" if (parenthesized_expression "(((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0))" ( (binary_expression "((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" (parenthesized_expression "((byte)(*pcVar1 + 0xbaU) < 0x14)" ( (binary_expression "(byte)(*pcVar1 + 0xbaU) < 0x14" (call_expression "(byte)(*pcVar1 + 0xbaU)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar1 + 0xbaU)" ( (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) ))) < number_literal) )) && (parenthesized_expression "((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" ( (binary_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0" (parenthesized_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U)" ( (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U" (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f)" number_literal << (parenthesized_expression "(*pcVar1 + 0xbaU & 0x1f)" ( (binary_expression "*pcVar1 + 0xbaU & 0x1f" (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" * identifier) + number_literal) & number_literal) ))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (if_statement "if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }" if (parenthesized_expression "(iVar4 != iVar3)" ( (binary_expression "iVar4 != iVar3" identifier != identifier) )) (compound_statement "{\n        iVar2 = iVar3 - iVar4;\n      }" { (expression_statement "iVar2 = iVar3 - iVar4;" (assignment_expression "iVar2 = iVar3 - iVar4" identifier = (binary_expression "iVar3 - iVar4" identifier - identifier)) ;) })) (expression_statement "pcVar1 = (char *)FUN_001f8120();" (assignment_expression "pcVar1 = (char *)FUN_001f8120()" identifier = (cast_expression "(char *)FUN_001f8120()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f8120()" identifier (argument_list "()" ( ))))) ;) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }" if (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" ( (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n        FUN_001f82d0();\n      }" { (expression_statement "FUN_001f82d0();" (call_expression "FUN_001f82d0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = iVar2 - (param_1[1] - iVar4);" (assignment_expression "iVar3 = iVar2 - (param_1[1] - iVar4)" identifier = (binary_expression "iVar2 - (param_1[1] - iVar4)" identifier - (parenthesized_expression "(param_1[1] - iVar4)" ( (binary_expression "param_1[1] - iVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) - identifier) )))) ;) (if_statement "if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }" if (parenthesized_expression "(iVar4 == param_1[1])" ( (binary_expression "iVar4 == param_1[1]" identifier == (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n        iVar3 = iVar2;\n      }" { (expression_statement "iVar3 = iVar2;" (assignment_expression "iVar3 = iVar2" identifier = identifier) ;) })) (if_statement "if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n        param_1[1] = iVar4 + iVar2;\n      }" { (expression_statement "param_1[1] = iVar4 + iVar2;" (assignment_expression "param_1[1] = iVar4 + iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "iVar4 + iVar2" identifier + identifier)) ;) })) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001f9730();" (call_expression "FUN_001f9730()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto LAB_001f9a24;" goto statement_identifier ;) })) }))) (if_statement "if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" if (parenthesized_expression "(iVar4 == iVar3)" ( (binary_expression "iVar4 == iVar3" identifier == identifier) )) (compound_statement "{\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }" { (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" identifier = (cast_expression "(char *)FUN_001f90f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f90f0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar4 == iVar2) goto LAB_001f9a83;" if (parenthesized_expression "(iVar4 == iVar2)" ( (binary_expression "iVar4 == iVar2" identifier == identifier) )) (goto_statement "goto LAB_001f9a83;" goto statement_identifier ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "LAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);" statement_identifier : (expression_statement "iVar5 = iVar3 - (iVar2 - iVar4);" (assignment_expression "iVar5 = iVar3 - (iVar2 - iVar4)" identifier = (binary_expression "iVar3 - (iVar2 - iVar4)" identifier - (parenthesized_expression "(iVar2 - iVar4)" ( (binary_expression "iVar2 - iVar4" identifier - identifier) )))) ;)) }) (else_clause "else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" else (compound_statement "{\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" { (expression_statement "iVar3 = iVar3 - iVar4;" (assignment_expression "iVar3 = iVar3 - iVar4" identifier = (binary_expression "iVar3 - iVar4" identifier - identifier)) ;) (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" identifier = (cast_expression "(char *)FUN_001f90f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001f90f0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar3;" (assignment_expression "iVar5 = iVar3" identifier = identifier) ;) (if_statement "if (iVar4 != iVar2) goto LAB_001f9a51;" if (parenthesized_expression "(iVar4 != iVar2)" ( (binary_expression "iVar4 != iVar2" identifier != identifier) )) (goto_statement "goto LAB_001f9a51;" goto statement_identifier ;)) }))) (if_statement "if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n    param_1[1] = iVar3 + iVar4;\n  }" { (expression_statement "param_1[1] = iVar3 + iVar4;" (assignment_expression "param_1[1] = iVar3 + iVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "iVar3 + iVar4" identifier + identifier)) ;) })) (labeled_statement "LAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" statement_identifier : (if_statement "if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))))" ( (binary_expression "(param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) && (parenthesized_expression "((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" ( (parenthesized_expression "(pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))" ( (binary_expression "pcVar1 == (char *)0x0 || (*pcVar1 != '\0')" (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) || (parenthesized_expression "(*pcVar1 != '\0')" ( (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) ))) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) }))) (return_statement "return pcVar1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) + LIT) ))) < LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + LIT) & LIT) ))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (goto_statement goto statement_identifier ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) ))) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) }))) (return_statement return IDENT ;) })))
(function_definition "char * __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" (primitive_type "char") (pointer_declarator "* __regparm3 FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_001f9900(int *param_1,undefined4 param_2,int param_3)" (identifier "FUN_001f9900") (parameter_list "(int *param_1,undefined4 param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")")))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  pcVar1 = (char *)FUN_001fa0b0();\n  if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }\n  pcVar1 = (char *)FUN_001f8210();\n  if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }\n  if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }\n  if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }\nLAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }\n  return pcVar1;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (expression_statement "pcVar1 = (char *)FUN_001fa0b0();" (assignment_expression "pcVar1 = (char *)FUN_001fa0b0()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_001fa0b0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001fa0b0()" (identifier "FUN_001fa0b0") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (pcVar1 == (char *)0x0) {\n    return (char *)0x0;\n  }" (if "if") (parenthesized_expression "(pcVar1 == (char *)0x0)" (( "(") (binary_expression "pcVar1 == (char *)0x0" (identifier "pcVar1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (char *)0x0;\n  }" ({ "{") (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (*pcVar1 == 'Z') {\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" (if "if") (parenthesized_expression "(*pcVar1 == 'Z')" (( "(") (binary_expression "*pcVar1 == 'Z'" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (== "==") (char_literal "'Z'" (' "'") (character "Z") (' "'"))) () ")")) (compound_statement "{\n    pcVar1 = pcVar1 + 1;\n    goto LAB_001f9a83;\n  }" ({ "{") (expression_statement "pcVar1 = pcVar1 + 1;" (assignment_expression "pcVar1 = pcVar1 + 1" (identifier "pcVar1") (= "=") (binary_expression "pcVar1 + 1" (identifier "pcVar1") (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto LAB_001f9a83;" (goto "goto") (statement_identifier "LAB_001f9a83") (; ";")) (} "}"))) (expression_statement "pcVar1 = (char *)FUN_001f8210();" (assignment_expression "pcVar1 = (char *)FUN_001f8210()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_001f8210()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001f8210()" (identifier "FUN_001f8210") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (pcVar1 == (char *)0x0) {\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }\n  else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" (if "if") (parenthesized_expression "(pcVar1 == (char *)0x0)" (( "(") (binary_expression "pcVar1 == (char *)0x0" (identifier "pcVar1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_001f9a24:\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n  }" ({ "{") (labeled_statement "LAB_001f9a24:\n    iVar4 = *param_1;" (statement_identifier "LAB_001f9a24") (: ":") (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" (identifier "iVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" (identifier "iVar3") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" (else "else") (compound_statement "{\n    iVar4 = *param_1;\n    iVar3 = param_1[1];\n    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }\n  }" ({ "{") (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" (identifier "iVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar3 = param_1[1];" (assignment_expression "iVar3 = param_1[1]" (identifier "iVar3") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" (if "if") (parenthesized_expression "(((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0))" (( "(") (binary_expression "((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" (parenthesized_expression "((byte)(*pcVar1 + 0xbaU) < 0x14)" (( "(") (binary_expression "(byte)(*pcVar1 + 0xbaU) < 0x14" (call_expression "(byte)(*pcVar1 + 0xbaU)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*pcVar1 + 0xbaU)" (( "(") (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (+ "+") (number_literal "0xbaU")) () ")"))) (< "<") (number_literal "0x14")) () ")")) (&& "&&") (parenthesized_expression "((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)" (( "(") (binary_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0" (parenthesized_expression "(1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U)" (( "(") (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U" (binary_expression "1 << (*pcVar1 + 0xbaU & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(*pcVar1 + 0xbaU & 0x1f)" (( "(") (binary_expression "*pcVar1 + 0xbaU & 0x1f" (binary_expression "*pcVar1 + 0xbaU" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (+ "+") (number_literal "0xbaU")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "0xb9001U")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      iVar2 = 0;\n      if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }\n      pcVar1 = (char *)FUN_001f8120();\n      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }\n      iVar4 = *param_1;\n      iVar3 = iVar2 - (param_1[1] - iVar4);\n      if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }\n      if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }\n      FUN_001f80d0();\n      FUN_001f9730();\n      FUN_001f80d0();\n      goto LAB_001f9a24;\n    }" ({ "{") (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar4 != iVar3) {\n        iVar2 = iVar3 - iVar4;\n      }" (if "if") (parenthesized_expression "(iVar4 != iVar3)" (( "(") (binary_expression "iVar4 != iVar3" (identifier "iVar4") (!= "!=") (identifier "iVar3")) () ")")) (compound_statement "{\n        iVar2 = iVar3 - iVar4;\n      }" ({ "{") (expression_statement "iVar2 = iVar3 - iVar4;" (assignment_expression "iVar2 = iVar3 - iVar4" (identifier "iVar2") (= "=") (binary_expression "iVar3 - iVar4" (identifier "iVar3") (- "-") (identifier "iVar4"))) (; ";")) (} "}"))) (expression_statement "pcVar1 = (char *)FUN_001f8120();" (assignment_expression "pcVar1 = (char *)FUN_001f8120()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_001f8120()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001f8120()" (identifier "FUN_001f8120") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {\n        FUN_001f82d0();\n      }" (if "if") (parenthesized_expression "((pcVar1 != (char *)0x0) && (*pcVar1 != '\0'))" (( "(") (binary_expression "(pcVar1 != (char *)0x0) && (*pcVar1 != '\0')" (parenthesized_expression "(pcVar1 != (char *)0x0)" (( "(") (binary_expression "pcVar1 != (char *)0x0" (identifier "pcVar1") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*pcVar1 != '\0')" (( "(") (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n        FUN_001f82d0();\n      }" ({ "{") (expression_statement "FUN_001f82d0();" (call_expression "FUN_001f82d0()" (identifier "FUN_001f82d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" (identifier "iVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar3 = iVar2 - (param_1[1] - iVar4);" (assignment_expression "iVar3 = iVar2 - (param_1[1] - iVar4)" (identifier "iVar3") (= "=") (binary_expression "iVar2 - (param_1[1] - iVar4)" (identifier "iVar2") (- "-") (parenthesized_expression "(param_1[1] - iVar4)" (( "(") (binary_expression "param_1[1] - iVar4" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (identifier "iVar4")) () ")")))) (; ";")) (if_statement "if (iVar4 == param_1[1]) {\n        iVar3 = iVar2;\n      }" (if "if") (parenthesized_expression "(iVar4 == param_1[1])" (( "(") (binary_expression "iVar4 == param_1[1]" (identifier "iVar4") (== "==") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        iVar3 = iVar2;\n      }" ({ "{") (expression_statement "iVar3 = iVar2;" (assignment_expression "iVar3 = iVar2" (identifier "iVar3") (= "=") (identifier "iVar2")) (; ";")) (} "}"))) (if_statement "if (iVar3 < 0) {\n        param_1[1] = iVar4 + iVar2;\n      }" (if "if") (parenthesized_expression "(iVar3 < 0)" (( "(") (binary_expression "iVar3 < 0" (identifier "iVar3") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        param_1[1] = iVar4 + iVar2;\n      }" ({ "{") (expression_statement "param_1[1] = iVar4 + iVar2;" (assignment_expression "param_1[1] = iVar4 + iVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar4 + iVar2" (identifier "iVar4") (+ "+") (identifier "iVar2"))) (; ";")) (} "}"))) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" (identifier "FUN_001f80d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_001f9730();" (call_expression "FUN_001f9730()" (identifier "FUN_001f9730") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_001f80d0();" (call_expression "FUN_001f80d0()" (identifier "FUN_001f80d0") (argument_list "()" (( "(") () ")"))) (; ";")) (goto_statement "goto LAB_001f9a24;" (goto "goto") (statement_identifier "LAB_001f9a24") (; ";")) (} "}"))) (} "}")))) (if_statement "if (iVar4 == iVar3) {\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }\n  else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" (if "if") (parenthesized_expression "(iVar4 == iVar3)" (( "(") (binary_expression "iVar4 == iVar3" (identifier "iVar4") (== "==") (identifier "iVar3")) () ")")) (compound_statement "{\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    if (iVar4 == iVar2) goto LAB_001f9a83;\n    iVar3 = 0;\nLAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);\n  }" ({ "{") (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_001f90f0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001f90f0()" (identifier "FUN_001f90f0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" (identifier "iVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" (identifier "iVar2") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (iVar4 == iVar2) goto LAB_001f9a83;" (if "if") (parenthesized_expression "(iVar4 == iVar2)" (( "(") (binary_expression "iVar4 == iVar2" (identifier "iVar4") (== "==") (identifier "iVar2")) () ")")) (goto_statement "goto LAB_001f9a83;" (goto "goto") (statement_identifier "LAB_001f9a83") (; ";"))) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_001f9a51:\n    iVar5 = iVar3 - (iVar2 - iVar4);" (statement_identifier "LAB_001f9a51") (: ":") (expression_statement "iVar5 = iVar3 - (iVar2 - iVar4);" (assignment_expression "iVar5 = iVar3 - (iVar2 - iVar4)" (identifier "iVar5") (= "=") (binary_expression "iVar3 - (iVar2 - iVar4)" (identifier "iVar3") (- "-") (parenthesized_expression "(iVar2 - iVar4)" (( "(") (binary_expression "iVar2 - iVar4" (identifier "iVar2") (- "-") (identifier "iVar4")) () ")")))) (; ";"))) (} "}")) (else_clause "else {\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" (else "else") (compound_statement "{\n    iVar3 = iVar3 - iVar4;\n    pcVar1 = (char *)FUN_001f90f0();\n    iVar4 = *param_1;\n    iVar2 = param_1[1];\n    iVar5 = iVar3;\n    if (iVar4 != iVar2) goto LAB_001f9a51;\n  }" ({ "{") (expression_statement "iVar3 = iVar3 - iVar4;" (assignment_expression "iVar3 = iVar3 - iVar4" (identifier "iVar3") (= "=") (binary_expression "iVar3 - iVar4" (identifier "iVar3") (- "-") (identifier "iVar4"))) (; ";")) (expression_statement "pcVar1 = (char *)FUN_001f90f0();" (assignment_expression "pcVar1 = (char *)FUN_001f90f0()" (identifier "pcVar1") (= "=") (cast_expression "(char *)FUN_001f90f0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001f90f0()" (identifier "FUN_001f90f0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "iVar4 = *param_1;" (assignment_expression "iVar4 = *param_1" (identifier "iVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar2 = param_1[1];" (assignment_expression "iVar2 = param_1[1]" (identifier "iVar2") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar5 = iVar3;" (assignment_expression "iVar5 = iVar3" (identifier "iVar5") (= "=") (identifier "iVar3")) (; ";")) (if_statement "if (iVar4 != iVar2) goto LAB_001f9a51;" (if "if") (parenthesized_expression "(iVar4 != iVar2)" (( "(") (binary_expression "iVar4 != iVar2" (identifier "iVar4") (!= "!=") (identifier "iVar2")) () ")")) (goto_statement "goto LAB_001f9a51;" (goto "goto") (statement_identifier "LAB_001f9a51") (; ";"))) (} "}")))) (if_statement "if (iVar5 < 0) {\n    param_1[1] = iVar3 + iVar4;\n  }" (if "if") (parenthesized_expression "(iVar5 < 0)" (( "(") (binary_expression "iVar5 < 0" (identifier "iVar5") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    param_1[1] = iVar3 + iVar4;\n  }" ({ "{") (expression_statement "param_1[1] = iVar3 + iVar4;" (assignment_expression "param_1[1] = iVar3 + iVar4" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar3 + iVar4" (identifier "iVar3") (+ "+") (identifier "iVar4"))) (; ";")) (} "}"))) (labeled_statement "LAB_001f9a83:\n  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" (statement_identifier "LAB_001f9a83") (: ":") (if_statement "if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {\n    return (char *)0x0;\n  }" (if "if") (parenthesized_expression "((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))))" (( "(") (binary_expression "(param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))" (( "(") (parenthesized_expression "(pcVar1 == (char *)0x0 || (*pcVar1 != '\0'))" (( "(") (binary_expression "pcVar1 == (char *)0x0 || (*pcVar1 != '\0')" (binary_expression "pcVar1 == (char *)0x0" (identifier "pcVar1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (|| "||") (parenthesized_expression "(*pcVar1 != '\0')" (( "(") (binary_expression "*pcVar1 != '\0'" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    return (char *)0x0;\n  }" ({ "{") (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))) (return_statement "return pcVar1;" (return "return") (identifier "pcVar1") (; ";")) (} "}")))

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

char * __regparm3 function_1(type_1 *decl,char *mangled,type_2 var_15)

{
  char *var_2;
  char *var_5;
  int var_8;
  int var_9;
  char *var_4;
  type_1 *in_stack_ffffffc4;
  char *in_stack_ffffffc8;
  type_1 mods;
  
  var_2 = var_1(in_stack_ffffffc4,in_stack_ffffffc8,var_15);
  if (var_2 == (char *)0x0) {
    return (char *)0x0;
  }
  if (*var_2 == 'Z') {
    var_2 = var_2 + 1;
    goto LAB_001f9a83;
  }
  mods.e = (char *)0x0;
  mods.p = (char *)0x0;
  mods.b = (char *)0x0;
  var_2 = var_3(&mods,var_2 + (*var_2 == 'M'));
  if (var_2 == (char *)0x0) {
LAB_001f9a24:
    var_4 = decl->b;
    var_5 = decl->p;
  }
  else {
    var_4 = decl->b;
    var_5 = decl->p;
    if (((byte)(*var_2 + 0xbaU) < 0x14) && ((1 << (*var_2 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {
      var_8 = 0;
      if (var_4 != var_5) {
        var_8 = (int)var_5 - (int)var_4;
      }
      var_2 = var_6(decl,var_2);
      if (var_2 != (char *)0x0) {
        if (*var_2 == '\0') {
          var_2 = (char *)0x0;
        }
        else {
          var_2 = var_7(in_stack_ffffffc4,in_stack_ffffffc8);
        }
      }
      var_4 = decl->b;
      var_9 = var_8 - ((int)decl->p - (int)var_4);
      if (var_4 == decl->p) {
        var_9 = var_8;
      }
      if (var_9 < 0) {
        decl->p = var_4 + var_8;
      }
      var_10(decl,"(");
      var_2 = var_11(decl,var_2);
      var_10(decl,")");
      if (mods.b != mods.p) {
        var_12(decl,mods.b,(int)mods.p - (int)mods.b);
      }
      goto LAB_001f9a24;
    }
  }
  if (var_4 == var_5) {
    var_2 = var_13(decl,var_2);
    var_4 = decl->b;
    var_5 = decl->p;
    if (var_4 != var_5) {
      var_8 = 0;
      goto LAB_001f9a51;
    }
  }
  else {
    var_8 = (int)var_5 - (int)var_4;
    var_2 = var_13(decl,var_2);
    var_4 = decl->b;
    var_5 = decl->p;
    var_9 = var_8;
    if (var_4 != var_5) {
LAB_001f9a51:
      var_9 = var_8 - ((int)var_5 - (int)var_4);
    }
    if (var_9 < 0) {
      decl->p = var_4 + var_8;
    }
  }
  if (mods.b != (char *)0x0) {
    var_14(mods.b);
  }
LAB_001f9a83:
  if ((var_15 == var_16) && ((var_2 == (char *)0x0 || (*var_2 != '\0')))) {
    return (char *)0x0;
  }
  return var_2;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x001f9a1b) */
/* WARNING: Removing unreachable block (ram,0x001f9a6a) */

char * __regparm3 MASKED(int *param_1,undefined4 param_2,int param_3)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  pcVar1 = (char *)FUN_001fa0b0();
  if (pcVar1 == (char *)0x0) {
    return (char *)0x0;
  }
  if (*pcVar1 == 'Z') {
    pcVar1 = pcVar1 + 1;
    goto LAB_001f9a83;
  }
  pcVar1 = (char *)FUN_001f8210();
  if (pcVar1 == (char *)0x0) {
LAB_001f9a24:
    iVar4 = *param_1;
    iVar3 = param_1[1];
  }
  else {
    iVar4 = *param_1;
    iVar3 = param_1[1];
    if (((byte)(*pcVar1 + 0xbaU) < 0x14) && ((1 << (*pcVar1 + 0xbaU & 0x1f) & 0xb9001U) != 0)) {
      iVar2 = 0;
      if (iVar4 != iVar3) {
        iVar2 = iVar3 - iVar4;
      }
      pcVar1 = (char *)FUN_001f8120();
      if ((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) {
        FUN_001f82d0();
      }
      iVar4 = *param_1;
      iVar3 = iVar2 - (param_1[1] - iVar4);
      if (iVar4 == param_1[1]) {
        iVar3 = iVar2;
      }
      if (iVar3 < 0) {
        param_1[1] = iVar4 + iVar2;
      }
      FUN_001f80d0();
      FUN_001f9730();
      FUN_001f80d0();
      goto LAB_001f9a24;
    }
  }
  if (iVar4 == iVar3) {
    pcVar1 = (char *)FUN_001f90f0();
    iVar4 = *param_1;
    iVar2 = param_1[1];
    if (iVar4 == iVar2) goto LAB_001f9a83;
    iVar3 = 0;
LAB_001f9a51:
    iVar5 = iVar3 - (iVar2 - iVar4);
  }
  else {
    iVar3 = iVar3 - iVar4;
    pcVar1 = (char *)FUN_001f90f0();
    iVar4 = *param_1;
    iVar2 = param_1[1];
    iVar5 = iVar3;
    if (iVar4 != iVar2) goto LAB_001f9a51;
  }
  if (iVar5 < 0) {
    param_1[1] = iVar3 + iVar4;
  }
LAB_001f9a83:
  if ((param_3 == 0) && ((pcVar1 == (char *)0x0 || (*pcVar1 != '\0')))) {
    return (char *)0x0;
  }
  return pcVar1;
}

