
/* std::(anonymous namespace)::ucs4_in(std::(anonymous namespace)::range<char const, true>&,
   std::(anonymous namespace)::range<char32_t, true>&, unsigned long, std::codecvt_mode) */

undefined4 __regparm3
std::(anonymous_namespace)::ucs4_in(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  
  if ((param_4 & 4) != 0) {
    read_bom<char_const,true,3u>(param_1,param_2);
  }
  if (*(int *)(param_1 + 4) == *(int *)param_1) {
    return 0;
  }
  if (*(int *)(param_2 + 4) != *(int *)param_2) {
    do {
      uVar3 = read_utf8_code_point(param_1,param_3);
      if (uVar3 == 0xfffffffe) {
        return 1;
      }
      if (param_3 < uVar3) {
        return 2;
      }
      puVar2 = *(uint **)param_2;
      puVar1 = puVar2 + 1;
      *(uint **)param_2 = puVar1;
      *puVar2 = uVar3;
      if (*(int *)param_1 == *(int *)(param_1 + 4)) {
        return 0;
      }
    } while (*(uint **)(param_2 + 4) != puVar1);
  }
  return 1;
}



undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  
  if ((param_4 & 4) != 0) {
    FUN_0026ed20();
  }
  if (param_1[1] == *param_1) {
    return 0;
  }
  if (param_2[1] != *param_2) {
    do {
      uVar3 = FUN_0026d8e0();
      if (uVar3 == 0xfffffffe) {
        return 1;
      }
      if (param_3 < uVar3) {
        return 2;
      }
      puVar2 = (uint *)*param_2;
      puVar1 = puVar2 + 1;
      *param_2 = (int)puVar1;
      *puVar2 = uVar3;
      if (*param_1 == param_1[1]) {
        return 0;
      }
    } while ((uint *)param_2[1] != puVar1);
  }
  return 1;
}


PUSH EDI
MOV EDI,ECX
PUSH ESI
MOV ESI,EDX
PUSH EBX
MOV EBX,EAX
TEST byte ptr [ESP + 0x10],0x4
JNZ 0x0026f520
MOV EAX,dword ptr [EBX]
CMP dword ptr [EBX + 0x4],EAX
JZ 0x0026f530
MOV EAX,dword ptr [ESI]
CMP dword ptr [ESI + 0x4],EAX
JNZ 0x0026f509
JMP 0x0026f517
CMP EDI,EAX
JC 0x0026f540
MOV EDX,dword ptr [ESI]
LEA ECX,[EDX + 0x4]
MOV dword ptr [ESI],ECX
MOV dword ptr [EDX],EAX
MOV EAX,dword ptr [EBX + 0x4]
CMP dword ptr [EBX],EAX
JZ 0x0026f530
CMP dword ptr [ESI + 0x4],ECX
JZ 0x0026f517
MOV EDX,EDI
MOV EAX,EBX
CALL 0x0026d8e0
CMP EAX,-0x2
JNZ 0x0026f4f0
POP EBX
MOV EAX,0x1
POP ESI
POP EDI
RET
CALL 0x0026ed20
JMP 0x0026f4e0
POP EBX
XOR EAX,EAX
POP ESI
POP EDI
RET
POP EBX
MOV EAX,0x2
POP ESI
POP EDI
RET
(translation_unit "undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)" identifier (parameter_list "(int *param_1,int *param_2,uint param_3,byte param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "byte param_4" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }" if (parenthesized_expression "((param_4 & 4) != 0)" ( (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" ( (binary_expression "param_4 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_0026ed20();\n  }" { (expression_statement "FUN_0026ed20();" (call_expression "FUN_0026ed20()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (param_1[1] == *param_1) {\n    return 0;\n  }" if (parenthesized_expression "(param_1[1] == *param_1)" ( (binary_expression "param_1[1] == *param_1" (subscript_expression "param_1[1]" identifier [ number_literal ]) == (pointer_expression "*param_1" * identifier)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" if (parenthesized_expression "(param_2[1] != *param_2)" ( (binary_expression "param_2[1] != *param_2" (subscript_expression "param_2[1]" identifier [ number_literal ]) != (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" { (do_statement "do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);" do (compound_statement "{\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    }" { (expression_statement "uVar3 = FUN_0026d8e0();" (assignment_expression "uVar3 = FUN_0026d8e0()" identifier = (call_expression "FUN_0026d8e0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (uVar3 == 0xfffffffe) {\n        return 1;\n      }" if (parenthesized_expression "(uVar3 == 0xfffffffe)" ( (binary_expression "uVar3 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_3 < uVar3) {\n        return 2;\n      }" if (parenthesized_expression "(param_3 < uVar3)" ( (binary_expression "param_3 < uVar3" identifier < identifier) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "puVar2 = (uint *)*param_2;" (assignment_expression "puVar2 = (uint *)*param_2" identifier = (cast_expression "(uint *)*param_2" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "puVar1 = puVar2 + 1;" (assignment_expression "puVar1 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*param_2 = (int)puVar1;" (assignment_expression "*param_2 = (int)puVar1" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*puVar2 = uVar3;" (assignment_expression "*puVar2 = uVar3" (pointer_expression "*puVar2" * identifier) = identifier) ;) (if_statement "if (*param_1 == param_1[1]) {\n        return 0;\n      }" if (parenthesized_expression "(*param_1 == param_1[1])" ( (binary_expression "*param_1 == param_1[1]" (pointer_expression "*param_1" * identifier) == (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "((uint *)param_2[1] != puVar1)" ( (binary_expression "(uint *)param_2[1] != puVar1" (cast_expression "(uint *)param_2[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* std::(anonymous namespace)::ucs4_in(std::(anonymous namespace)::range<char const, true>&,\n   std::(anonymous namespace)::range<char32_t, true>&, unsigned long, std::codecvt_mode) */\n\nundefined4 __regparm3\nstd::(anonymous_namespace)::ucs4_in(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }\n  if (*(int *)(param_1 + 4) == *(int *)param_1) {\n    return 0;\n  }\n  if (*(int *)(param_2 + 4) != *(int *)param_2) {\n    do {\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    } while (*(uint **)(param_2 + 4) != puVar1);\n  }\n  return 1;\n}\n\n" comment (declaration "undefined4 __regparm3" type_identifier identifier ;) (labeled_statement "std::(anonymous_namespace)::ucs4_in(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)" statement_identifier (ERROR "::(anonymous_namespace):" : : (parenthesized_expression "(anonymous_namespace)" ( identifier )) :) : (expression_statement "ucs4_in(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)" (call_expression "ucs4_in(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)" identifier (argument_list "(range *param_1,unsigned_char *param_2,uint param_3,byte param_4)" ( (binary_expression "range *param_1" identifier * identifier) , (binary_expression "unsigned_char *param_2" identifier * identifier) , (ERROR "uint" identifier) identifier , (ERROR "byte" identifier) identifier ))) ;)) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }\n  if (*(int *)(param_1 + 4) == *(int *)param_1) {\n    return 0;\n  }\n  if (*(int *)(param_2 + 4) != *(int *)param_2) {\n    do {\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    } while (*(uint **)(param_2 + 4) != puVar1);\n  }\n  return 1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if ((param_4 & 4) != 0) {\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }" if (parenthesized_expression "((param_4 & 4) != 0)" ( (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" ( (binary_expression "param_4 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }" { (expression_statement "read_bom<char_const,true,3u>(param_1,param_2);" (comma_expression "read_bom<char_const,true,3u>(param_1,param_2)" (binary_expression "read_bom<char_const" identifier < identifier) , (comma_expression "true,3u>(param_1,param_2)" true , (binary_expression "3u>(param_1,param_2)" number_literal > (parenthesized_expression "(param_1,param_2)" ( (comma_expression "param_1,param_2" identifier , identifier) ))))) ;) })) (if_statement "if (*(int *)(param_1 + 4) == *(int *)param_1) {\n    return 0;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 4) == *(int *)param_1)" ( (binary_expression "*(int *)(param_1 + 4) == *(int *)param_1" (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) == (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(param_2 + 4) != *(int *)param_2) {\n    do {\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    } while (*(uint **)(param_2 + 4) != puVar1);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 4) != *(int *)param_2)" ( (binary_expression "*(int *)(param_2 + 4) != *(int *)param_2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) != (pointer_expression "*(int *)param_2" * (cast_expression "(int *)param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    do {\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    } while (*(uint **)(param_2 + 4) != puVar1);\n  }" { (do_statement "do {\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    } while (*(uint **)(param_2 + 4) != puVar1);" do (compound_statement "{\n      uVar3 = read_utf8_code_point(param_1,param_3);\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = *(uint **)param_2;\n      puVar1 = puVar2 + 1;\n      *(uint **)param_2 = puVar1;\n      *puVar2 = uVar3;\n      if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }\n    }" { (expression_statement "uVar3 = read_utf8_code_point(param_1,param_3);" (assignment_expression "uVar3 = read_utf8_code_point(param_1,param_3)" identifier = (call_expression "read_utf8_code_point(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (uVar3 == 0xfffffffe) {\n        return 1;\n      }" if (parenthesized_expression "(uVar3 == 0xfffffffe)" ( (binary_expression "uVar3 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_3 < uVar3) {\n        return 2;\n      }" if (parenthesized_expression "(param_3 < uVar3)" ( (binary_expression "param_3 < uVar3" identifier < identifier) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "puVar2 = *(uint **)param_2;" (assignment_expression "puVar2 = *(uint **)param_2" identifier = (pointer_expression "*(uint **)param_2" * (cast_expression "(uint **)param_2" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "puVar1 = puVar2 + 1;" (assignment_expression "puVar1 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*(uint **)param_2 = puVar1;" (assignment_expression "*(uint **)param_2 = puVar1" (pointer_expression "*(uint **)param_2" * (cast_expression "(uint **)param_2" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = identifier) ;) (expression_statement "*puVar2 = uVar3;" (assignment_expression "*puVar2 = uVar3" (pointer_expression "*puVar2" * identifier) = identifier) ;) (if_statement "if (*(int *)param_1 == *(int *)(param_1 + 4)) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)param_1 == *(int *)(param_1 + 4))" ( (binary_expression "*(int *)param_1 == *(int *)(param_1 + 4)" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == (pointer_expression "*(int *)(param_1 + 4)" * (cast_expression "(int *)(param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "(*(uint **)(param_2 + 4) != puVar1)" ( (binary_expression "*(uint **)(param_2 + 4) != puVar1" (pointer_expression "*(uint **)(param_2 + 4)" * (cast_expression "(uint **)(param_2 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) != identifier) )) ;) })) (return_statement "return 1;" return number_literal ;) }))
(translation_unit "undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)" identifier (parameter_list "(int *param_1,int *param_2,uint param_3,byte param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "byte param_4" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }" if (parenthesized_expression "((param_4 & 4) != 0)" ( (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" ( (binary_expression "param_4 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_0026ed20();\n  }" { (expression_statement "FUN_0026ed20();" (call_expression "FUN_0026ed20()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (param_1[1] == *param_1) {\n    return 0;\n  }" if (parenthesized_expression "(param_1[1] == *param_1)" ( (binary_expression "param_1[1] == *param_1" (subscript_expression "param_1[1]" identifier [ number_literal ]) == (pointer_expression "*param_1" * identifier)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" if (parenthesized_expression "(param_2[1] != *param_2)" ( (binary_expression "param_2[1] != *param_2" (subscript_expression "param_2[1]" identifier [ number_literal ]) != (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" { (do_statement "do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);" do (compound_statement "{\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    }" { (expression_statement "uVar3 = FUN_0026d8e0();" (assignment_expression "uVar3 = FUN_0026d8e0()" identifier = (call_expression "FUN_0026d8e0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (uVar3 == 0xfffffffe) {\n        return 1;\n      }" if (parenthesized_expression "(uVar3 == 0xfffffffe)" ( (binary_expression "uVar3 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_3 < uVar3) {\n        return 2;\n      }" if (parenthesized_expression "(param_3 < uVar3)" ( (binary_expression "param_3 < uVar3" identifier < identifier) )) (compound_statement "{\n        return 2;\n      }" { (return_statement "return 2;" return number_literal ;) })) (expression_statement "puVar2 = (uint *)*param_2;" (assignment_expression "puVar2 = (uint *)*param_2" identifier = (cast_expression "(uint *)*param_2" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "puVar1 = puVar2 + 1;" (assignment_expression "puVar1 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*param_2 = (int)puVar1;" (assignment_expression "*param_2 = (int)puVar1" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*puVar2 = uVar3;" (assignment_expression "*puVar2 = uVar3" (pointer_expression "*puVar2" * identifier) = identifier) ;) (if_statement "if (*param_1 == param_1[1]) {\n        return 0;\n      }" if (parenthesized_expression "(*param_1 == param_1[1])" ( (binary_expression "*param_1 == param_1[1]" (pointer_expression "*param_1" * identifier) == (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "((uint *)param_2[1] != puVar1)" ( (binary_expression "(uint *)param_2[1] != puVar1" (cast_expression "(uint *)param_2[1]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (pointer_expression * IDENT)) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (pointer_expression * IDENT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (subscript_expression IDENT [ LIT ])) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined4 __regparm3 FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0026f4d0(int *param_1,int *param_2,uint param_3,byte param_4)" (identifier "FUN_0026f4d0") (parameter_list "(int *param_1,int *param_2,uint param_3,byte param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "byte param_4" (type_identifier "byte") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }\n  if (param_1[1] == *param_1) {\n    return 0;\n  }\n  if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }\n  return 1;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_0026ed20();\n  }" (if "if") (parenthesized_expression "((param_4 & 4) != 0)" (( "(") (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" (( "(") (binary_expression "param_4 & 4" (identifier "param_4") (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_0026ed20();\n  }" ({ "{") (expression_statement "FUN_0026ed20();" (call_expression "FUN_0026ed20()" (identifier "FUN_0026ed20") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[1] == *param_1) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(param_1[1] == *param_1)" (( "(") (binary_expression "param_1[1] == *param_1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_2[1] != *param_2) {\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" (if "if") (parenthesized_expression "(param_2[1] != *param_2)" (( "(") (binary_expression "param_2[1] != *param_2" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (!= "!=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (compound_statement "{\n    do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);\n  }" ({ "{") (do_statement "do {\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    } while ((uint *)param_2[1] != puVar1);" (do "do") (compound_statement "{\n      uVar3 = FUN_0026d8e0();\n      if (uVar3 == 0xfffffffe) {\n        return 1;\n      }\n      if (param_3 < uVar3) {\n        return 2;\n      }\n      puVar2 = (uint *)*param_2;\n      puVar1 = puVar2 + 1;\n      *param_2 = (int)puVar1;\n      *puVar2 = uVar3;\n      if (*param_1 == param_1[1]) {\n        return 0;\n      }\n    }" ({ "{") (expression_statement "uVar3 = FUN_0026d8e0();" (assignment_expression "uVar3 = FUN_0026d8e0()" (identifier "uVar3") (= "=") (call_expression "FUN_0026d8e0()" (identifier "FUN_0026d8e0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (uVar3 == 0xfffffffe) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(uVar3 == 0xfffffffe)" (( "(") (binary_expression "uVar3 == 0xfffffffe" (identifier "uVar3") (== "==") (number_literal "0xfffffffe")) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (param_3 < uVar3) {\n        return 2;\n      }" (if "if") (parenthesized_expression "(param_3 < uVar3)" (( "(") (binary_expression "param_3 < uVar3" (identifier "param_3") (< "<") (identifier "uVar3")) () ")")) (compound_statement "{\n        return 2;\n      }" ({ "{") (return_statement "return 2;" (return "return") (number_literal "2") (; ";")) (} "}"))) (expression_statement "puVar2 = (uint *)*param_2;" (assignment_expression "puVar2 = (uint *)*param_2" (identifier "puVar2") (= "=") (cast_expression "(uint *)*param_2" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "puVar1 = puVar2 + 1;" (assignment_expression "puVar1 = puVar2 + 1" (identifier "puVar1") (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_2 = (int)puVar1;" (assignment_expression "*param_2 = (int)puVar1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar1"))) (; ";")) (expression_statement "*puVar2 = uVar3;" (assignment_expression "*puVar2 = uVar3" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (*param_1 == param_1[1]) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*param_1 == param_1[1])" (( "(") (binary_expression "*param_1 == param_1[1]" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "((uint *)param_2[1] != puVar1)" (( "(") (binary_expression "(uint *)param_2[1] != puVar1" (cast_expression "(uint *)param_2[1]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "puVar1")) () ")")) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* std::(anonymous namespace)::ucs4_in(std::(anonymous namespace)::range<char const, true>&,
   std::(anonymous namespace)::range<char32_t, true>&, unsigned long, std::codecvt_mode) */

type_1 __regparm3
std::(anonymous_namespace)::var_1(var_2 *var_3,var_4 *var_5,type_2 var_11,byte var_6)

{
  type_2 *var_13;
  type_2 *var_12;
  type_2 var_10;
  
  if ((var_6 & 4) != 0) {
    var_7<var_8,true,3u>(var_3,var_5);
  }
  if (*(int *)(var_3 + 4) == *(int *)var_3) {
    return 0;
  }
  if (*(int *)(var_5 + 4) != *(int *)var_5) {
    do {
      var_10 = var_9(var_3,var_11);
      if (var_10 == 0xfffffffe) {
        return 1;
      }
      if (var_11 < var_10) {
        return 2;
      }
      var_12 = *(type_2 **)var_5;
      var_13 = var_12 + 1;
      *(type_2 **)var_5 = var_13;
      *var_12 = var_10;
      if (*(int *)var_3 == *(int *)(var_3 + 4)) {
        return 0;
      }
    } while (*(type_2 **)(var_5 + 4) != var_13);
  }
  return 1;
}


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

undefined4 __regparm3 MASKED(int *param_1,int *param_2,uint param_3,byte param_4)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  
  if ((param_4 & 4) != 0) {
    FUN_0026ed20();
  }
  if (param_1[1] == *param_1) {
    return 0;
  }
  if (param_2[1] != *param_2) {
    do {
      uVar3 = FUN_0026d8e0();
      if (uVar3 == 0xfffffffe) {
        return 1;
      }
      if (param_3 < uVar3) {
        return 2;
      }
      puVar2 = (uint *)*param_2;
      puVar1 = puVar2 + 1;
      *param_2 = (int)puVar1;
      *puVar2 = uVar3;
      if (*param_1 == param_1[1]) {
        return 0;
      }
    } while ((uint *)param_2[1] != puVar1);
  }
  return 1;
}

