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

bfd_boolean pr_array_type(void *p,bfd_signed_vma lower,bfd_signed_vma upper,bfd_boolean stringp)

{
  pr_handle *info;
  byte *s;
  bfd_boolean bVar1;
  int iVar2;
  byte *pbVar3;
  byte *pbVar4;
  bool bVar5;
  bool bVar6;
  byte bVar7;
  char abl [22];
  char abu [22];
  char ab [50];
  
  bVar7 = 0;
  info = (pr_handle *)((int)p + 8);
  s = (byte *)pop_type(info);
  if (s != (byte *)0x0) {
    if (lower == 0) {
      if (upper == -1) {
        builtin_strncpy(ab,"|[]",4);
      }
      else {
        sprintf(abu,"%ld",upper + 1);
        sprintf(ab,"|[%s]",abu);
      }
    }
    else {
      sprintf(abl,"%ld",lower);
      sprintf(abu,"%ld",upper);
      sprintf(ab,"|[%s:%s]",abl,abu);
    }
    bVar1 = substitute_type((pr_handle *)p,ab);
    bVar5 = false;
    bVar6 = bVar1 == 0;
    if (!bVar6) {
      iVar2 = 4;
      pbVar3 = s;
      pbVar4 = (byte *)0x551da;
      do {
        if (iVar2 == 0) break;
        iVar2 = iVar2 + -1;
        bVar5 = *pbVar3 < *pbVar4;
        bVar6 = *pbVar3 == *pbVar4;
        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;
        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;
      } while (bVar6);
      if ((!bVar5 && !bVar6) == bVar5) {
LAB_00038438:
        if (stringp == 0) {
          return 1;
        }
        bVar1 = append_type(info," /* string */");
        return (uint)(bVar1 != 0);
      }
      bVar1 = append_type(info,":");
      if (bVar1 != 0) {
        bVar1 = append_type(info,(char *)s);
        if (bVar1 != 0) goto LAB_00038438;
      }
    }
  }
  return 0;
}



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

bool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)

{
  byte *pbVar1;
  int iVar2;
  byte *pbVar3;
  bool bVar4;
  bool bVar5;
  byte bVar6;
  char local_7a [22];
  char local_64 [22];
  char local_4e [58];
  undefined4 uStack_14;
  
  bVar6 = 0;
  uStack_14 = 0x38399;
  pbVar1 = (byte *)FUN_00034e50();
  if (pbVar1 != (byte *)0x0) {
    if (param_2 == 0) {
      if (param_3 == -1) {
        builtin_strncpy(local_4e,"|[]",4);
      }
      else {
        sprintf(local_64,"%ld",param_3 + 1);
        sprintf(local_4e,"|[%s]",local_64);
      }
    }
    else {
      sprintf(local_7a,"%ld",param_2);
      sprintf(local_64,"%ld",param_3);
      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);
    }
    iVar2 = FUN_000356f0();
    bVar4 = false;
    bVar5 = iVar2 == 0;
    if (!bVar5) {
      iVar2 = 4;
      pbVar3 = (byte *)0x551da;
      do {
        if (iVar2 == 0) break;
        iVar2 = iVar2 + -1;
        bVar4 = *pbVar1 < *pbVar3;
        bVar5 = *pbVar1 == *pbVar3;
        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;
        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;
      } while (bVar5);
      if ((!bVar4 && !bVar5) == bVar4) {
LAB_00038438:
        if (param_4 == 0) {
          return true;
        }
        iVar2 = FUN_00035640();
        return iVar2 != 0;
      }
      iVar2 = FUN_00035640();
      if (iVar2 != 0) {
        iVar2 = FUN_00035640();
        if (iVar2 != 0) goto LAB_00038438;
      }
    }
  }
  return false;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000143a0
ADD EBX,0x37c67
SUB ESP,0x7c
MOV ESI,dword ptr [ESP + 0x90]
MOV EDI,dword ptr [ESP + 0x94]
LEA EAX,[ESI + 0x8]
MOV dword ptr [ESP + 0x8],EAX
CALL 0x00034e50
TEST EAX,EAX
JZ 0x0003847a
MOV EBP,EAX
TEST EDI,EDI
JNZ 0x00038488
CMP dword ptr [ESP + 0x98],-0x1
JZ 0x000384e0
SUB ESP,0x4
MOV EAX,dword ptr [ESP + 0x9c]
ADD EAX,0x1
PUSH EAX
LEA EAX,[EBX + 0xfffe0cf0]
PUSH EAX
LEA EDI,[ESP + 0x34]
PUSH EDI
CALL 0x000136c0
ADD ESP,0xc
LEA EAX,[EBX + 0xfffe4431]
PUSH EDI
PUSH EAX
LEA EDI,[ESP + 0x4a]
PUSH EDI
CALL 0x000136c0
ADD ESP,0x10
MOV EDX,EDI
MOV EAX,ESI
CALL 0x000356f0
TEST EAX,EAX
JZ 0x0003847a
MOV ECX,0x4
LEA EDI,[EBX + 0xfffe51da]
MOV ESI,EBP
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00038458
MOV EAX,dword ptr [ESP + 0x9c]
TEST EAX,EAX
JNZ 0x000384f8
ADD ESP,0x7c
MOV EAX,0x1
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ESI,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfffe08a8]
MOV EAX,ESI
CALL 0x00035640
TEST EAX,EAX
JZ 0x0003847a
MOV EDX,EBP
MOV EAX,ESI
CALL 0x00035640
TEST EAX,EAX
JNZ 0x00038438
ADD ESP,0x7c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
LEA EDX,[EBX + 0xfffe0cf0]
PUSH EDI
PUSH EDX
LEA EDI,[ESP + 0x1e]
MOV dword ptr [ESP + 0x18],EDX
PUSH EDI
CALL 0x000136c0
ADD ESP,0xc
PUSH dword ptr [ESP + 0x9c]
MOV EDX,dword ptr [ESP + 0x14]
PUSH EDX
LEA EDX,[ESP + 0x34]
PUSH EDX
MOV dword ptr [ESP + 0x1c],EDX
CALL 0x000136c0
MOV EDX,dword ptr [ESP + 0x1c]
LEA EAX,[EBX + 0xfffe4437]
PUSH EDX
PUSH EDI
PUSH EAX
LEA EDI,[ESP + 0x5a]
PUSH EDI
CALL 0x000136c0
ADD ESP,0x20
JMP 0x00038413
MOV dword ptr [ESP + 0x3e],0x5d5b7c
LEA EDI,[ESP + 0x3e]
JMP 0x00038413
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfffe4440]
CALL 0x00035640
TEST EAX,EAX
SETNZ AL
ADD ESP,0x7c
POP EBX
MOVZX EAX,AL
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nbool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}\n\n" comment (function_definition "bool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "char local_7a [22];" primitive_type (array_declarator "local_7a [22]" identifier [ number_literal ]) ;) (declaration "char local_64 [22];" primitive_type (array_declarator "local_64 [22]" identifier [ number_literal ]) ;) (declaration "char local_4e [58];" primitive_type (array_declarator "local_4e [58]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x38399;" (assignment_expression "uStack_14 = 0x38399" identifier = number_literal) ;) (expression_statement "pbVar1 = (byte *)FUN_00034e50();" (assignment_expression "pbVar1 = (byte *)FUN_00034e50()" identifier = (cast_expression "(byte *)FUN_00034e50()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00034e50()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" if (parenthesized_expression "(pbVar1 != (byte *)0x0)" ( (binary_expression "pbVar1 != (byte *)0x0" identifier != (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" { (if_statement "if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }" { (if_statement "if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        builtin_strncpy(local_4e,"|[]",4);\n      }" { (expression_statement "builtin_strncpy(local_4e,"|[]",4);" (call_expression "builtin_strncpy(local_4e,"|[]",4)" identifier (argument_list "(local_4e,"|[]",4)" ( identifier , (string_literal ""|[]"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" else (compound_statement "{\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" { (expression_statement "sprintf(local_64,"%ld",param_3 + 1);" (call_expression "sprintf(local_64,"%ld",param_3 + 1)" identifier (argument_list "(local_64,"%ld",param_3 + 1)" ( identifier , (string_literal ""%ld"" " string_content ") , (binary_expression "param_3 + 1" identifier + number_literal) ))) ;) (expression_statement "sprintf(local_4e,"|[%s]",local_64);" (call_expression "sprintf(local_4e,"|[%s]",local_64)" identifier (argument_list "(local_4e,"|[%s]",local_64)" ( identifier , (string_literal ""|[%s]"" " string_content ") , identifier ))) ;) }))) }) (else_clause "else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" else (compound_statement "{\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" { (expression_statement "sprintf(local_7a,"%ld",param_2);" (call_expression "sprintf(local_7a,"%ld",param_2)" identifier (argument_list "(local_7a,"%ld",param_2)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(local_64,"%ld",param_3);" (call_expression "sprintf(local_64,"%ld",param_3)" identifier (argument_list "(local_64,"%ld",param_3)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(local_4e,"|[%s:%s]",local_7a,local_64);" (call_expression "sprintf(local_4e,"|[%s:%s]",local_7a,local_64)" identifier (argument_list "(local_4e,"|[%s:%s]",local_7a,local_64)" ( identifier , (string_literal ""|[%s:%s]"" " string_content ") , identifier , identifier ))) ;) }))) (expression_statement "iVar2 = FUN_000356f0();" (assignment_expression "iVar2 = FUN_000356f0()" identifier = (call_expression "FUN_000356f0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "bVar5 = iVar2 == 0;" (assignment_expression "bVar5 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;) (if_statement "if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" { (expression_statement "iVar2 = 4;" (assignment_expression "iVar2 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = (byte *)0x551da;" (assignment_expression "pbVar3 = (byte *)0x551da" identifier = (cast_expression "(byte *)0x551da" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);" do (compound_statement "{\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      }" { (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar4 = *pbVar1 < *pbVar3;" (assignment_expression "bVar4 = *pbVar1 < *pbVar3" identifier = (binary_expression "*pbVar1 < *pbVar3" (pointer_expression "*pbVar1" * identifier) < (pointer_expression "*pbVar3" * identifier))) ;) (expression_statement "bVar5 = *pbVar1 == *pbVar3;" (assignment_expression "bVar5 = *pbVar1 == *pbVar3" identifier = (binary_expression "*pbVar1 == *pbVar3" (pointer_expression "*pbVar1" * identifier) == (pointer_expression "*pbVar3" * identifier))) ;) (expression_statement "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "pbVar1 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar1 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "pbVar3 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar3 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar5)" ( identifier )) ;) (if_statement "if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" if (parenthesized_expression "((!bVar4 && !bVar5) == bVar4)" ( (binary_expression "(!bVar4 && !bVar5) == bVar4" (parenthesized_expression "(!bVar4 && !bVar5)" ( (binary_expression "!bVar4 && !bVar5" (unary_expression "!bVar4" ! identifier) && (unary_expression "!bVar5" ! identifier)) )) == identifier) )) (compound_statement "{\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" { (labeled_statement "LAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }" statement_identifier : (if_statement "if (param_4 == 0) {\n          return true;\n        }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n          return true;\n        }" { (return_statement "return true;" return true ;) }))) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar2 != 0;" return (binary_expression "iVar2 != 0" identifier != number_literal) ;) })) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" { (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) goto LAB_00038438;" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00038438;" goto statement_identifier ;)) })) })) })) (return_statement "return false;" return false ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nbfd_boolean pr_array_type(void *p,bfd_signed_vma lower,bfd_signed_vma upper,bfd_boolean stringp)\n\n{\n  pr_handle *info;\n  byte *s;\n  bfd_boolean bVar1;\n  int iVar2;\n  byte *pbVar3;\n  byte *pbVar4;\n  bool bVar5;\n  bool bVar6;\n  byte bVar7;\n  char abl [22];\n  char abu [22];\n  char ab [50];\n  \n  bVar7 = 0;\n  info = (pr_handle *)((int)p + 8);\n  s = (byte *)pop_type(info);\n  if (s != (byte *)0x0) {\n    if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }\n    bVar1 = substitute_type((pr_handle *)p,ab);\n    bVar5 = false;\n    bVar6 = bVar1 == 0;\n    if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return 0;\n}\n\n" comment comment (function_definition "bfd_boolean pr_array_type(void *p,bfd_signed_vma lower,bfd_signed_vma upper,bfd_boolean stringp)\n\n{\n  pr_handle *info;\n  byte *s;\n  bfd_boolean bVar1;\n  int iVar2;\n  byte *pbVar3;\n  byte *pbVar4;\n  bool bVar5;\n  bool bVar6;\n  byte bVar7;\n  char abl [22];\n  char abu [22];\n  char ab [50];\n  \n  bVar7 = 0;\n  info = (pr_handle *)((int)p + 8);\n  s = (byte *)pop_type(info);\n  if (s != (byte *)0x0) {\n    if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }\n    bVar1 = substitute_type((pr_handle *)p,ab);\n    bVar5 = false;\n    bVar6 = bVar1 == 0;\n    if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "pr_array_type(void *p,bfd_signed_vma lower,bfd_signed_vma upper,bfd_boolean stringp)" identifier (parameter_list "(void *p,bfd_signed_vma lower,bfd_signed_vma upper,bfd_boolean stringp)" ( (parameter_declaration "void *p" primitive_type (pointer_declarator "*p" * identifier)) , (parameter_declaration "bfd_signed_vma lower" type_identifier identifier) , (parameter_declaration "bfd_signed_vma upper" type_identifier identifier) , (parameter_declaration "bfd_boolean stringp" type_identifier identifier) ))) (compound_statement "{\n  pr_handle *info;\n  byte *s;\n  bfd_boolean bVar1;\n  int iVar2;\n  byte *pbVar3;\n  byte *pbVar4;\n  bool bVar5;\n  bool bVar6;\n  byte bVar7;\n  char abl [22];\n  char abu [22];\n  char ab [50];\n  \n  bVar7 = 0;\n  info = (pr_handle *)((int)p + 8);\n  s = (byte *)pop_type(info);\n  if (s != (byte *)0x0) {\n    if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }\n    bVar1 = substitute_type((pr_handle *)p,ab);\n    bVar5 = false;\n    bVar6 = bVar1 == 0;\n    if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return 0;\n}" { (declaration "pr_handle *info;" type_identifier (pointer_declarator "*info" * identifier) ;) (declaration "byte *s;" type_identifier (pointer_declarator "*s" * identifier) ;) (declaration "bfd_boolean bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "byte bVar7;" type_identifier identifier ;) (declaration "char abl [22];" primitive_type (array_declarator "abl [22]" identifier [ number_literal ]) ;) (declaration "char abu [22];" primitive_type (array_declarator "abu [22]" identifier [ number_literal ]) ;) (declaration "char ab [50];" primitive_type (array_declarator "ab [50]" identifier [ number_literal ]) ;) (expression_statement "bVar7 = 0;" (assignment_expression "bVar7 = 0" identifier = number_literal) ;) (expression_statement "info = (pr_handle *)((int)p + 8);" (assignment_expression "info = (pr_handle *)((int)p + 8)" identifier = (cast_expression "(pr_handle *)((int)p + 8)" ( (type_descriptor "pr_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)p + 8)" ( (binary_expression "(int)p + 8" (cast_expression "(int)p" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "s = (byte *)pop_type(info);" (assignment_expression "s = (byte *)pop_type(info)" identifier = (cast_expression "(byte *)pop_type(info)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "pop_type(info)" identifier (argument_list "(info)" ( identifier ))))) ;) (if_statement "if (s != (byte *)0x0) {\n    if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }\n    bVar1 = substitute_type((pr_handle *)p,ab);\n    bVar5 = false;\n    bVar6 = bVar1 == 0;\n    if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }\n  }" if (parenthesized_expression "(s != (byte *)0x0)" ( (binary_expression "s != (byte *)0x0" identifier != (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }\n    bVar1 = substitute_type((pr_handle *)p,ab);\n    bVar5 = false;\n    bVar6 = bVar1 == 0;\n    if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }\n  }" { (if_statement "if (lower == 0) {\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }\n    else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }" if (parenthesized_expression "(lower == 0)" ( (binary_expression "lower == 0" identifier == number_literal) )) (compound_statement "{\n      if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }\n    }" { (if_statement "if (upper == -1) {\n        builtin_strncpy(ab,"|[]",4);\n      }\n      else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }" if (parenthesized_expression "(upper == -1)" ( (binary_expression "upper == -1" identifier == number_literal) )) (compound_statement "{\n        builtin_strncpy(ab,"|[]",4);\n      }" { (expression_statement "builtin_strncpy(ab,"|[]",4);" (call_expression "builtin_strncpy(ab,"|[]",4)" identifier (argument_list "(ab,"|[]",4)" ( identifier , (string_literal ""|[]"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }" else (compound_statement "{\n        sprintf(abu,"%ld",upper + 1);\n        sprintf(ab,"|[%s]",abu);\n      }" { (expression_statement "sprintf(abu,"%ld",upper + 1);" (call_expression "sprintf(abu,"%ld",upper + 1)" identifier (argument_list "(abu,"%ld",upper + 1)" ( identifier , (string_literal ""%ld"" " string_content ") , (binary_expression "upper + 1" identifier + number_literal) ))) ;) (expression_statement "sprintf(ab,"|[%s]",abu);" (call_expression "sprintf(ab,"|[%s]",abu)" identifier (argument_list "(ab,"|[%s]",abu)" ( identifier , (string_literal ""|[%s]"" " string_content ") , identifier ))) ;) }))) }) (else_clause "else {\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }" else (compound_statement "{\n      sprintf(abl,"%ld",lower);\n      sprintf(abu,"%ld",upper);\n      sprintf(ab,"|[%s:%s]",abl,abu);\n    }" { (expression_statement "sprintf(abl,"%ld",lower);" (call_expression "sprintf(abl,"%ld",lower)" identifier (argument_list "(abl,"%ld",lower)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(abu,"%ld",upper);" (call_expression "sprintf(abu,"%ld",upper)" identifier (argument_list "(abu,"%ld",upper)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(ab,"|[%s:%s]",abl,abu);" (call_expression "sprintf(ab,"|[%s:%s]",abl,abu)" identifier (argument_list "(ab,"|[%s:%s]",abl,abu)" ( identifier , (string_literal ""|[%s:%s]"" " string_content ") , identifier , identifier ))) ;) }))) (expression_statement "bVar1 = substitute_type((pr_handle *)p,ab);" (assignment_expression "bVar1 = substitute_type((pr_handle *)p,ab)" identifier = (call_expression "substitute_type((pr_handle *)p,ab)" identifier (argument_list "((pr_handle *)p,ab)" ( (cast_expression "(pr_handle *)p" ( (type_descriptor "pr_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "bVar6 = bVar1 == 0;" (assignment_expression "bVar6 = bVar1 == 0" identifier = (binary_expression "bVar1 == 0" identifier == number_literal)) ;) (if_statement "if (!bVar6) {\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }" if (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) (compound_statement "{\n      iVar2 = 4;\n      pbVar3 = s;\n      pbVar4 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);\n      if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }\n      bVar1 = append_type(info,":");\n      if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }\n    }" { (expression_statement "iVar2 = 4;" (assignment_expression "iVar2 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = s;" (assignment_expression "pbVar3 = s" identifier = identifier) ;) (expression_statement "pbVar4 = (byte *)0x551da;" (assignment_expression "pbVar4 = (byte *)0x551da" identifier = (cast_expression "(byte *)0x551da" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      } while (bVar6);" do (compound_statement "{\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar5 = *pbVar3 < *pbVar4;\n        bVar6 = *pbVar3 == *pbVar4;\n        pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;\n        pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;\n      }" { (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar5 = *pbVar3 < *pbVar4;" (assignment_expression "bVar5 = *pbVar3 < *pbVar4" identifier = (binary_expression "*pbVar3 < *pbVar4" (pointer_expression "*pbVar3" * identifier) < (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "bVar6 = *pbVar3 == *pbVar4;" (assignment_expression "bVar6 = *pbVar3 == *pbVar4" identifier = (binary_expression "*pbVar3 == *pbVar4" (pointer_expression "*pbVar3" * identifier) == (pointer_expression "*pbVar4" * identifier))) ;) (expression_statement "pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1;" (assignment_expression "pbVar3 = pbVar3 + (uint)bVar7 * -2 + 1" identifier = (binary_expression "pbVar3 + (uint)bVar7 * -2 + 1" (binary_expression "pbVar3 + (uint)bVar7 * -2" identifier + (binary_expression "(uint)bVar7 * -2" (cast_expression "(uint)bVar7" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1;" (assignment_expression "pbVar4 = pbVar4 + (uint)bVar7 * -2 + 1" identifier = (binary_expression "pbVar4 + (uint)bVar7 * -2 + 1" (binary_expression "pbVar4 + (uint)bVar7 * -2" identifier + (binary_expression "(uint)bVar7 * -2" (cast_expression "(uint)bVar7" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar6)" ( identifier )) ;) (if_statement "if ((!bVar5 && !bVar6) == bVar5) {\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }" if (parenthesized_expression "((!bVar5 && !bVar6) == bVar5)" ( (binary_expression "(!bVar5 && !bVar6) == bVar5" (parenthesized_expression "(!bVar5 && !bVar6)" ( (binary_expression "!bVar5 && !bVar6" (unary_expression "!bVar5" ! identifier) && (unary_expression "!bVar6" ! identifier)) )) == identifier) )) (compound_statement "{\nLAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }\n        bVar1 = append_type(info," /* string */");\n        return (uint)(bVar1 != 0);\n      }" { (labeled_statement "LAB_00038438:\n        if (stringp == 0) {\n          return 1;\n        }" statement_identifier : (if_statement "if (stringp == 0) {\n          return 1;\n        }" if (parenthesized_expression "(stringp == 0)" ( (binary_expression "stringp == 0" identifier == number_literal) )) (compound_statement "{\n          return 1;\n        }" { (return_statement "return 1;" return number_literal ;) }))) (expression_statement "bVar1 = append_type(info," /* string */");" (assignment_expression "bVar1 = append_type(info," /* string */")" identifier = (call_expression "append_type(info," /* string */")" identifier (argument_list "(info," /* string */")" ( identifier , (string_literal "" /* string */"" " string_content ") )))) ;) (return_statement "return (uint)(bVar1 != 0);" return (call_expression "(uint)(bVar1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) ))) ;) })) (expression_statement "bVar1 = append_type(info,":");" (assignment_expression "bVar1 = append_type(info,":")" identifier = (call_expression "append_type(info,":")" identifier (argument_list "(info,":")" ( identifier , (string_literal "":"" " string_content ") )))) ;) (if_statement "if (bVar1 != 0) {\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }" if (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n        bVar1 = append_type(info,(char *)s);\n        if (bVar1 != 0) goto LAB_00038438;\n      }" { (expression_statement "bVar1 = append_type(info,(char *)s);" (assignment_expression "bVar1 = append_type(info,(char *)s)" identifier = (call_expression "append_type(info,(char *)s)" identifier (argument_list "(info,(char *)s)" ( identifier , (cast_expression "(char *)s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (bVar1 != 0) goto LAB_00038438;" if (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00038438;" goto statement_identifier ;)) })) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "bool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}\n\n" (function_definition "bool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "char local_7a [22];" primitive_type (array_declarator "local_7a [22]" identifier [ number_literal ]) ;) (declaration "char local_64 [22];" primitive_type (array_declarator "local_64 [22]" identifier [ number_literal ]) ;) (declaration "char local_4e [58];" primitive_type (array_declarator "local_4e [58]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x38399;" (assignment_expression "uStack_14 = 0x38399" identifier = number_literal) ;) (expression_statement "pbVar1 = (byte *)FUN_00034e50();" (assignment_expression "pbVar1 = (byte *)FUN_00034e50()" identifier = (cast_expression "(byte *)FUN_00034e50()" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00034e50()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" if (parenthesized_expression "(pbVar1 != (byte *)0x0)" ( (binary_expression "pbVar1 != (byte *)0x0" identifier != (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" { (if_statement "if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }" { (if_statement "if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" if (parenthesized_expression "(param_3 == -1)" ( (binary_expression "param_3 == -1" identifier == number_literal) )) (compound_statement "{\n        builtin_strncpy(local_4e,"|[]",4);\n      }" { (expression_statement "builtin_strncpy(local_4e,"|[]",4);" (call_expression "builtin_strncpy(local_4e,"|[]",4)" identifier (argument_list "(local_4e,"|[]",4)" ( identifier , (string_literal ""|[]"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" else (compound_statement "{\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" { (expression_statement "sprintf(local_64,"%ld",param_3 + 1);" (call_expression "sprintf(local_64,"%ld",param_3 + 1)" identifier (argument_list "(local_64,"%ld",param_3 + 1)" ( identifier , (string_literal ""%ld"" " string_content ") , (binary_expression "param_3 + 1" identifier + number_literal) ))) ;) (expression_statement "sprintf(local_4e,"|[%s]",local_64);" (call_expression "sprintf(local_4e,"|[%s]",local_64)" identifier (argument_list "(local_4e,"|[%s]",local_64)" ( identifier , (string_literal ""|[%s]"" " string_content ") , identifier ))) ;) }))) }) (else_clause "else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" else (compound_statement "{\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" { (expression_statement "sprintf(local_7a,"%ld",param_2);" (call_expression "sprintf(local_7a,"%ld",param_2)" identifier (argument_list "(local_7a,"%ld",param_2)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(local_64,"%ld",param_3);" (call_expression "sprintf(local_64,"%ld",param_3)" identifier (argument_list "(local_64,"%ld",param_3)" ( identifier , (string_literal ""%ld"" " string_content ") , identifier ))) ;) (expression_statement "sprintf(local_4e,"|[%s:%s]",local_7a,local_64);" (call_expression "sprintf(local_4e,"|[%s:%s]",local_7a,local_64)" identifier (argument_list "(local_4e,"|[%s:%s]",local_7a,local_64)" ( identifier , (string_literal ""|[%s:%s]"" " string_content ") , identifier , identifier ))) ;) }))) (expression_statement "iVar2 = FUN_000356f0();" (assignment_expression "iVar2 = FUN_000356f0()" identifier = (call_expression "FUN_000356f0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "bVar5 = iVar2 == 0;" (assignment_expression "bVar5 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;) (if_statement "if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" { (expression_statement "iVar2 = 4;" (assignment_expression "iVar2 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = (byte *)0x551da;" (assignment_expression "pbVar3 = (byte *)0x551da" identifier = (cast_expression "(byte *)0x551da" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);" do (compound_statement "{\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      }" { (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar4 = *pbVar1 < *pbVar3;" (assignment_expression "bVar4 = *pbVar1 < *pbVar3" identifier = (binary_expression "*pbVar1 < *pbVar3" (pointer_expression "*pbVar1" * identifier) < (pointer_expression "*pbVar3" * identifier))) ;) (expression_statement "bVar5 = *pbVar1 == *pbVar3;" (assignment_expression "bVar5 = *pbVar1 == *pbVar3" identifier = (binary_expression "*pbVar1 == *pbVar3" (pointer_expression "*pbVar1" * identifier) == (pointer_expression "*pbVar3" * identifier))) ;) (expression_statement "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "pbVar1 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar1 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "pbVar3 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar3 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar5)" ( identifier )) ;) (if_statement "if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" if (parenthesized_expression "((!bVar4 && !bVar5) == bVar4)" ( (binary_expression "(!bVar4 && !bVar5) == bVar4" (parenthesized_expression "(!bVar4 && !bVar5)" ( (binary_expression "!bVar4 && !bVar5" (unary_expression "!bVar4" ! identifier) && (unary_expression "!bVar5" ! identifier)) )) == identifier) )) (compound_statement "{\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" { (labeled_statement "LAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }" statement_identifier : (if_statement "if (param_4 == 0) {\n          return true;\n        }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n          return true;\n        }" { (return_statement "return true;" return true ;) }))) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (return_statement "return iVar2 != 0;" return (binary_expression "iVar2 != 0" identifier != number_literal) ;) })) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" { (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" identifier = (call_expression "FUN_00035640()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) goto LAB_00038438;" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00038438;" goto statement_identifier ;)) })) })) })) (return_statement "return false;" return false ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (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 { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , LIT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , IDENT ))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , IDENT , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return BOOL ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (return_statement return (binary_expression IDENT != LIT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) })) })) })) (return_statement return BOOL ;) })))
(function_definition "bool FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)\n\n{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" (primitive_type "bool") (function_declarator "FUN_00038390(undefined4 param_1,int param_2,int param_3,int param_4)" (identifier "FUN_00038390") (parameter_list "(undefined4 param_1,int param_2,int param_3,int param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  byte *pbVar1;\n  int iVar2;\n  byte *pbVar3;\n  bool bVar4;\n  bool bVar5;\n  byte bVar6;\n  char local_7a [22];\n  char local_64 [22];\n  char local_4e [58];\n  undefined4 uStack_14;\n  \n  bVar6 = 0;\n  uStack_14 = 0x38399;\n  pbVar1 = (byte *)FUN_00034e50();\n  if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }\n  return false;\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "byte *pbVar3;" (type_identifier "byte") (pointer_declarator "*pbVar3" (* "*") (identifier "pbVar3")) (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "byte bVar6;" (type_identifier "byte") (identifier "bVar6") (; ";")) (declaration "char local_7a [22];" (primitive_type "char") (array_declarator "local_7a [22]" (identifier "local_7a") ([ "[") (number_literal "22") (] "]")) (; ";")) (declaration "char local_64 [22];" (primitive_type "char") (array_declarator "local_64 [22]" (identifier "local_64") ([ "[") (number_literal "22") (] "]")) (; ";")) (declaration "char local_4e [58];" (primitive_type "char") (array_declarator "local_4e [58]" (identifier "local_4e") ([ "[") (number_literal "58") (] "]")) (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" (identifier "bVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "uStack_14 = 0x38399;" (assignment_expression "uStack_14 = 0x38399" (identifier "uStack_14") (= "=") (number_literal "0x38399")) (; ";")) (expression_statement "pbVar1 = (byte *)FUN_00034e50();" (assignment_expression "pbVar1 = (byte *)FUN_00034e50()" (identifier "pbVar1") (= "=") (cast_expression "(byte *)FUN_00034e50()" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00034e50()" (identifier "FUN_00034e50") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (pbVar1 != (byte *)0x0) {\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(pbVar1 != (byte *)0x0)" (( "(") (binary_expression "pbVar1 != (byte *)0x0" (identifier "pbVar1") (!= "!=") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }\n    iVar2 = FUN_000356f0();\n    bVar4 = false;\n    bVar5 = iVar2 == 0;\n    if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }\n  }" ({ "{") (if_statement "if (param_2 == 0) {\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }\n    else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }\n    }" ({ "{") (if_statement "if (param_3 == -1) {\n        builtin_strncpy(local_4e,"|[]",4);\n      }\n      else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" (if "if") (parenthesized_expression "(param_3 == -1)" (( "(") (binary_expression "param_3 == -1" (identifier "param_3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        builtin_strncpy(local_4e,"|[]",4);\n      }" ({ "{") (expression_statement "builtin_strncpy(local_4e,"|[]",4);" (call_expression "builtin_strncpy(local_4e,"|[]",4)" (identifier "builtin_strncpy") (argument_list "(local_4e,"|[]",4)" (( "(") (identifier "local_4e") (, ",") (string_literal ""|[]"" (" """) (string_content "|[]") (" """)) (, ",") (number_literal "4") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" (else "else") (compound_statement "{\n        sprintf(local_64,"%ld",param_3 + 1);\n        sprintf(local_4e,"|[%s]",local_64);\n      }" ({ "{") (expression_statement "sprintf(local_64,"%ld",param_3 + 1);" (call_expression "sprintf(local_64,"%ld",param_3 + 1)" (identifier "sprintf") (argument_list "(local_64,"%ld",param_3 + 1)" (( "(") (identifier "local_64") (, ",") (string_literal ""%ld"" (" """) (string_content "%ld") (" """)) (, ",") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")"))) (; ";")) (expression_statement "sprintf(local_4e,"|[%s]",local_64);" (call_expression "sprintf(local_4e,"|[%s]",local_64)" (identifier "sprintf") (argument_list "(local_4e,"|[%s]",local_64)" (( "(") (identifier "local_4e") (, ",") (string_literal ""|[%s]"" (" """) (string_content "|[%s]") (" """)) (, ",") (identifier "local_64") () ")"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" (else "else") (compound_statement "{\n      sprintf(local_7a,"%ld",param_2);\n      sprintf(local_64,"%ld",param_3);\n      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);\n    }" ({ "{") (expression_statement "sprintf(local_7a,"%ld",param_2);" (call_expression "sprintf(local_7a,"%ld",param_2)" (identifier "sprintf") (argument_list "(local_7a,"%ld",param_2)" (( "(") (identifier "local_7a") (, ",") (string_literal ""%ld"" (" """) (string_content "%ld") (" """)) (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "sprintf(local_64,"%ld",param_3);" (call_expression "sprintf(local_64,"%ld",param_3)" (identifier "sprintf") (argument_list "(local_64,"%ld",param_3)" (( "(") (identifier "local_64") (, ",") (string_literal ""%ld"" (" """) (string_content "%ld") (" """)) (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "sprintf(local_4e,"|[%s:%s]",local_7a,local_64);" (call_expression "sprintf(local_4e,"|[%s:%s]",local_7a,local_64)" (identifier "sprintf") (argument_list "(local_4e,"|[%s:%s]",local_7a,local_64)" (( "(") (identifier "local_4e") (, ",") (string_literal ""|[%s:%s]"" (" """) (string_content "|[%s:%s]") (" """)) (, ",") (identifier "local_7a") (, ",") (identifier "local_64") () ")"))) (; ";")) (} "}")))) (expression_statement "iVar2 = FUN_000356f0();" (assignment_expression "iVar2 = FUN_000356f0()" (identifier "iVar2") (= "=") (call_expression "FUN_000356f0()" (identifier "FUN_000356f0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (expression_statement "bVar5 = iVar2 == 0;" (assignment_expression "bVar5 = iVar2 == 0" (identifier "bVar5") (= "=") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0"))) (; ";")) (if_statement "if (!bVar5) {\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" (if "if") (parenthesized_expression "(!bVar5)" (( "(") (unary_expression "!bVar5" (! "!") (identifier "bVar5")) () ")")) (compound_statement "{\n      iVar2 = 4;\n      pbVar3 = (byte *)0x551da;\n      do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);\n      if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }\n      iVar2 = FUN_00035640();\n      if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }\n    }" ({ "{") (expression_statement "iVar2 = 4;" (assignment_expression "iVar2 = 4" (identifier "iVar2") (= "=") (number_literal "4")) (; ";")) (expression_statement "pbVar3 = (byte *)0x551da;" (assignment_expression "pbVar3 = (byte *)0x551da" (identifier "pbVar3") (= "=") (cast_expression "(byte *)0x551da" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x551da"))) (; ";")) (do_statement "do {\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      } while (bVar5);" (do "do") (compound_statement "{\n        if (iVar2 == 0) break;\n        iVar2 = iVar2 + -1;\n        bVar4 = *pbVar1 < *pbVar3;\n        bVar5 = *pbVar1 == *pbVar3;\n        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;\n        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;\n      }" ({ "{") (if_statement "if (iVar2 == 0) break;" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar4 = *pbVar1 < *pbVar3;" (assignment_expression "bVar4 = *pbVar1 < *pbVar3" (identifier "bVar4") (= "=") (binary_expression "*pbVar1 < *pbVar3" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (< "<") (pointer_expression "*pbVar3" (* "*") (identifier "pbVar3")))) (; ";")) (expression_statement "bVar5 = *pbVar1 == *pbVar3;" (assignment_expression "bVar5 = *pbVar1 == *pbVar3" (identifier "bVar5") (= "=") (binary_expression "*pbVar1 == *pbVar3" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (== "==") (pointer_expression "*pbVar3" (* "*") (identifier "pbVar3")))) (; ";")) (expression_statement "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1" (identifier "pbVar1") (= "=") (binary_expression "pbVar1 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar1 + (uint)bVar6 * -2" (identifier "pbVar1") (+ "+") (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar6")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;" (assignment_expression "pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1" (identifier "pbVar3") (= "=") (binary_expression "pbVar3 + (uint)bVar6 * -2 + 1" (binary_expression "pbVar3 + (uint)bVar6 * -2" (identifier "pbVar3") (+ "+") (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar6")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar5)" (( "(") (identifier "bVar5") () ")")) (; ";")) (if_statement "if ((!bVar4 && !bVar5) == bVar4) {\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" (if "if") (parenthesized_expression "((!bVar4 && !bVar5) == bVar4)" (( "(") (binary_expression "(!bVar4 && !bVar5) == bVar4" (parenthesized_expression "(!bVar4 && !bVar5)" (( "(") (binary_expression "!bVar4 && !bVar5" (unary_expression "!bVar4" (! "!") (identifier "bVar4")) (&& "&&") (unary_expression "!bVar5" (! "!") (identifier "bVar5"))) () ")")) (== "==") (identifier "bVar4")) () ")")) (compound_statement "{\nLAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }\n        iVar2 = FUN_00035640();\n        return iVar2 != 0;\n      }" ({ "{") (labeled_statement "LAB_00038438:\n        if (param_4 == 0) {\n          return true;\n        }" (statement_identifier "LAB_00038438") (: ":") (if_statement "if (param_4 == 0) {\n          return true;\n        }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return true;\n        }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}")))) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" (identifier "iVar2") (= "=") (call_expression "FUN_00035640()" (identifier "FUN_00035640") (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return iVar2 != 0;" (return "return") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" (identifier "iVar2") (= "=") (call_expression "FUN_00035640()" (identifier "FUN_00035640") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar2 = FUN_00035640();\n        if (iVar2 != 0) goto LAB_00038438;\n      }" ({ "{") (expression_statement "iVar2 = FUN_00035640();" (assignment_expression "iVar2 = FUN_00035640()" (identifier "iVar2") (= "=") (call_expression "FUN_00035640()" (identifier "FUN_00035640") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) goto LAB_00038438;" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00038438;" (goto "goto") (statement_identifier "LAB_00038438") (; ";"))) (} "}"))) (} "}"))) (} "}"))) (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}")))

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

type_1 function_1(void *p,type_2 var_3,type_2 var_4,type_1 var_13)

{
  type_3 *info;
  type_4 *var_2;
  type_1 var_8;
  int var_9;
  type_4 *var_10;
  type_4 *var_11;
  bool var_12;
  bool bVar6;
  type_4 bVar7;
  char abl [22];
  char abu [22];
  char ab [50];
  
  bVar7 = 0;
  info = (type_3 *)((int)p + 8);
  var_2 = (type_4 *)var_1(info);
  if (var_2 != (type_4 *)0x0) {
    if (var_3 == 0) {
      if (var_4 == -1) {
        var_5(ab,"|[]",4);
      }
      else {
        var_6(abu,"%ld",var_4 + 1);
        var_6(ab,"|[%s]",abu);
      }
    }
    else {
      var_6(abl,"%ld",var_3);
      var_6(abu,"%ld",var_4);
      var_6(ab,"|[%s:%s]",abl,abu);
    }
    var_8 = var_7((type_3 *)p,ab);
    var_12 = false;
    bVar6 = var_8 == 0;
    if (!bVar6) {
      var_9 = 4;
      var_10 = var_2;
      var_11 = (type_4 *)0x551da;
      do {
        if (var_9 == 0) break;
        var_9 = var_9 + -1;
        var_12 = *var_10 < *var_11;
        bVar6 = *var_10 == *var_11;
        var_10 = var_10 + (type_5)bVar7 * -2 + 1;
        var_11 = var_11 + (type_5)bVar7 * -2 + 1;
      } while (bVar6);
      if ((!var_12 && !bVar6) == var_12) {
LAB_00038438:
        if (var_13 == 0) {
          return 1;
        }
        var_8 = var_14(info," /* string */");
        return (type_5)(var_8 != 0);
      }
      var_8 = var_14(info,":");
      if (var_8 != 0) {
        var_8 = var_14(info,(char *)var_2);
        if (var_8 != 0) goto LAB_00038438;
      }
    }
  }
  return 0;
}


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

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

bool MASKED(undefined4 param_1,int param_2,int param_3,int param_4)

{
  byte *pbVar1;
  int iVar2;
  byte *pbVar3;
  bool bVar4;
  bool bVar5;
  byte bVar6;
  char local_7a [22];
  char local_64 [22];
  char local_4e [58];
  undefined4 uStack_14;
  
  bVar6 = 0;
  uStack_14 = 0x38399;
  pbVar1 = (byte *)FUN_00034e50();
  if (pbVar1 != (byte *)0x0) {
    if (param_2 == 0) {
      if (param_3 == -1) {
        builtin_strncpy(local_4e,"|[]",4);
      }
      else {
        sprintf(local_64,"%ld",param_3 + 1);
        sprintf(local_4e,"|[%s]",local_64);
      }
    }
    else {
      sprintf(local_7a,"%ld",param_2);
      sprintf(local_64,"%ld",param_3);
      sprintf(local_4e,"|[%s:%s]",local_7a,local_64);
    }
    iVar2 = FUN_000356f0();
    bVar4 = false;
    bVar5 = iVar2 == 0;
    if (!bVar5) {
      iVar2 = 4;
      pbVar3 = (byte *)0x551da;
      do {
        if (iVar2 == 0) break;
        iVar2 = iVar2 + -1;
        bVar4 = *pbVar1 < *pbVar3;
        bVar5 = *pbVar1 == *pbVar3;
        pbVar1 = pbVar1 + (uint)bVar6 * -2 + 1;
        pbVar3 = pbVar3 + (uint)bVar6 * -2 + 1;
      } while (bVar5);
      if ((!bVar4 && !bVar5) == bVar4) {
LAB_00038438:
        if (param_4 == 0) {
          return true;
        }
        iVar2 = FUN_00035640();
        return iVar2 != 0;
      }
      iVar2 = FUN_00035640();
      if (iVar2 != 0) {
        iVar2 = FUN_00035640();
        if (iVar2 != 0) goto LAB_00038438;
      }
    }
  }
  return false;
}

