
/* std::codecvt_base::result std::(anonymous namespace)::utf16_in<char16_t>(std::(anonymous
   namespace)::range<char const, true>&, std::(anonymous namespace)::range<char16_t, true>&,
   unsigned long, std::codecvt_mode, std::(anonymous namespace)::surrogates) */

char __regparm3
std::(anonymous_namespace)::utf16_in<char16_t>
          (range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)

{
  ushort *puVar1;
  ushort uVar2;
  ushort uVar3;
  uint uVar4;
  ushort uVar5;
  int iVar6;
  int iVar7;
  
  if ((param_4 & 4) != 0) {
    read_bom<char_const,true,3u>(param_1,param_2);
  }
  while( true ) {
    iVar6 = *(int *)param_1;
    iVar7 = *(int *)(param_1 + 4);
    if (iVar6 == iVar7) {
      return '\0';
    }
    while( true ) {
      if (*(int *)param_2 == *(int *)(param_2 + 4)) {
        return '\0';
      }
      uVar4 = read_utf8_code_point(param_1,param_3);
      if (uVar4 == 0xfffffffe) {
        return (param_5 != 0) + '\x01';
      }
      if (param_3 < uVar4) {
        return '\x02';
      }
      puVar1 = *(ushort **)param_2;
      uVar2 = (ushort)uVar4;
      if (0xffff < uVar4) break;
      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;
      iVar7 = *(int *)(param_1 + 4);
      iVar6 = *(int *)param_1;
      if ((param_4 & 1) == 0) {
        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);
      }
      *(ushort **)param_2 = puVar1 + 1;
      *puVar1 = (ushort)uVar4;
      if (iVar6 == iVar7) {
        return '\0';
      }
    }
    if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;
    uVar3 = (uVar2 & 0x3ff) + 0xdc00;
    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;
    if ((param_4 & 1) == 0) {
      uVar5 = uVar5 * 0x100 | uVar5 >> 8;
      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;
    }
    *puVar1 = uVar5;
    *(ushort **)param_2 = puVar1 + 2;
    puVar1[1] = uVar3;
  }
LAB_002348e7:
  *(int *)param_1 = iVar6;
  *(int *)(param_1 + 4) = iVar7;
  return '\x01';
}



char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)

{
  ushort *puVar1;
  ushort uVar2;
  ushort uVar3;
  uint uVar4;
  ushort uVar5;
  int iVar6;
  int iVar7;
  
  if ((param_4 & 4) != 0) {
    FUN_002343e0();
  }
  while( true ) {
    iVar6 = *param_1;
    iVar7 = param_1[1];
    if (iVar6 == iVar7) {
      return '\0';
    }
    while( true ) {
      if (*param_2 == param_2[1]) {
        return '\0';
      }
      uVar4 = FUN_00232fa0();
      if (uVar4 == 0xfffffffe) {
        return (param_5 != 0) + '\x01';
      }
      if (param_3 < uVar4) {
        return '\x02';
      }
      puVar1 = (ushort *)*param_2;
      uVar2 = (ushort)uVar4;
      if (0xffff < uVar4) break;
      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;
      iVar7 = param_1[1];
      iVar6 = *param_1;
      if ((param_4 & 1) == 0) {
        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);
      }
      *param_2 = (int)(puVar1 + 1);
      *puVar1 = (ushort)uVar4;
      if (iVar6 == iVar7) {
        return '\0';
      }
    }
    if ((uint)(param_2[1] - (int)puVar1) < 4) break;
    uVar3 = (uVar2 & 0x3ff) + 0xdc00;
    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;
    if ((param_4 & 1) == 0) {
      uVar5 = uVar5 * 0x100 | uVar5 >> 8;
      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;
    }
    *puVar1 = uVar5;
    *param_2 = (int)(puVar1 + 2);
    puVar1[1] = uVar3;
  }
LAB_002348e7:
  *param_1 = iVar6;
  param_1[1] = iVar7;
  return '\x01';
}


PUSH EBP
PUSH EDI
PUSH ESI
MOV ESI,EAX
PUSH EBX
MOV EBX,EDX
SUB ESP,0x8
MOV EDI,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP],ECX
TEST EDI,0x4
JNZ 0x00234938
AND EDI,0x1
MOV dword ptr [ESP + 0x4],EDI
MOV EBP,dword ptr [ESI]
MOV EDI,dword ptr [ESI + 0x4]
CMP EBP,EDI
JZ 0x002348d1
MOV EAX,dword ptr [EBX + 0x4]
CMP dword ptr [EBX],EAX
JZ 0x002348d1
MOV EDX,dword ptr [ESP]
MOV EAX,ESI
CALL 0x00232fa0
CMP EAX,-0x2
JZ 0x00234948
CMP dword ptr [ESP],EAX
JC 0x00234960
MOV EDX,dword ptr [EBX]
MOV ECX,dword ptr [EBX + 0x4]
CMP EAX,0xffff
JA 0x002348e0
CMP ECX,EDX
JZ 0x002348e7
MOV EBP,dword ptr [ESP + 0x4]
MOV ECX,EAX
MOV EDI,dword ptr [ESI + 0x4]
ROL CX,0x8
TEST EBP,EBP
MOV EBP,dword ptr [ESI]
CMOVZ EAX,ECX
LEA ECX,[EDX + 0x2]
MOV dword ptr [EBX],ECX
MOV word ptr [EDX],AX
CMP EBP,EDI
JNZ 0x0023487e
ADD ESP,0x8
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ECX,EDX
CMP ECX,0x3
JA 0x00234900
MOV dword ptr [ESI],EBP
MOV EAX,0x1
MOV dword ptr [ESI + 0x4],EDI
ADD ESP,0x8
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,EAX
MOV EDI,dword ptr [ESP + 0x4]
AND AX,0x3ff
SHR ECX,0xa
SUB AX,0x2400
SUB CX,0x2840
TEST EDI,EDI
JNZ 0x00234922
ROL CX,0x8
ROL AX,0x8
MOV word ptr [EDX],CX
LEA ECX,[EDX + 0x4]
MOV dword ptr [EBX],ECX
MOV word ptr [EDX + 0x2],AX
JMP 0x00234875
CALL 0x002343e0
JMP 0x0023486e
MOV EDX,dword ptr [ESP + 0x20]
XOR EAX,EAX
TEST EDX,EDX
SETNZ AL
ADD ESP,0x8
POP EBX
ADD EAX,0x1
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x8
MOV EAX,0x2
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}\n\n" (function_definition "char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" identifier (parameter_list "(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" ( (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 "uint param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "ushort uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_002343e0();\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_002343e0();\n  }" { (expression_statement "FUN_002343e0();" (call_expression "FUN_002343e0()" identifier (argument_list "()" ( ))) ;) })) (while_statement "while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" { (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar6 == iVar7) {\n      return '\0';\n    }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n      return '\0';\n    }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (while_statement "while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" { (if_statement "if (*param_2 == param_2[1]) {\n        return '\0';\n      }" if (parenthesized_expression "(*param_2 == param_2[1])" ( (binary_expression "*param_2 == param_2[1]" (pointer_expression "*param_2" * identifier) == (subscript_expression "param_2[1]" identifier [ number_literal ])) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (expression_statement "uVar4 = FUN_00232fa0();" (assignment_expression "uVar4 = FUN_00232fa0()" identifier = (call_expression "FUN_00232fa0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }" if (parenthesized_expression "(uVar4 == 0xfffffffe)" ( (binary_expression "uVar4 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return (param_5 != 0) + '\x01';\n      }" { (return_statement "return (param_5 != 0) + '\x01';" return (binary_expression "(param_5 != 0) + '\x01'" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) + (char_literal "'\x01'" ' escape_sequence ')) ;) })) (if_statement "if (param_3 < uVar4) {\n        return '\x02';\n      }" if (parenthesized_expression "(param_3 < uVar4)" ( (binary_expression "param_3 < uVar4" identifier < identifier) )) (compound_statement "{\n        return '\x02';\n      }" { (return_statement "return '\x02';" return (char_literal "'\x02'" ' escape_sequence ') ;) })) (expression_statement "puVar1 = (ushort *)*param_2;" (assignment_expression "puVar1 = (ushort *)*param_2" identifier = (cast_expression "(ushort *)*param_2" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "uVar2 = (ushort)uVar4;" (assignment_expression "uVar2 = (ushort)uVar4" identifier = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (0xffff < uVar4) break;" if (parenthesized_expression "(0xffff < uVar4)" ( (binary_expression "0xffff < uVar4" number_literal < identifier) )) (break_statement "break;" break ;)) (if_statement "if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;" if (parenthesized_expression "((ushort *)param_2[1] == puVar1)" ( (binary_expression "(ushort *)param_2[1] == puVar1" (cast_expression "(ushort *)param_2[1]" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) == identifier) )) (goto_statement "goto LAB_002348e7;" goto statement_identifier ;)) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" { (expression_statement "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);" (assignment_expression "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" identifier = (call_expression "(uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) )))) ;) })) (expression_statement "*param_2 = (int)(puVar1 + 1);" (assignment_expression "*param_2 = (int)(puVar1 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(puVar1 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + 1)" ( (binary_expression "puVar1 + 1" identifier + number_literal) )))) ;) (expression_statement "*puVar1 = (ushort)uVar4;" (assignment_expression "*puVar1 = (ushort)uVar4" (pointer_expression "*puVar1" * identifier) = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (iVar6 == iVar7) {\n        return '\0';\n      }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) })) (if_statement "if ((uint)(param_2[1] - (int)puVar1) < 4) break;" if (parenthesized_expression "((uint)(param_2[1] - (int)puVar1) < 4)" ( (binary_expression "(uint)(param_2[1] - (int)puVar1) < 4" (call_expression "(uint)(param_2[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2[1] - (int)puVar1)" ( (binary_expression "param_2[1] - (int)puVar1" (subscript_expression "param_2[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (uVar2 & 0x3ff) + 0xdc00;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) + 0xdc00" identifier = (binary_expression "(uVar2 & 0x3ff) + 0xdc00" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar5 = (short)(uVar4 >> 10) + 0xd7c0;" (assignment_expression "uVar5 = (short)(uVar4 >> 10) + 0xd7c0" identifier = (binary_expression "(short)(uVar4 >> 10) + 0xd7c0" (cast_expression "(short)(uVar4 >> 10)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar4 >> 10)" ( (binary_expression "uVar4 >> 10" identifier >> number_literal) ))) + number_literal)) ;) (if_statement "if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar5 = uVar5 * 0x100 | uVar5 >> 8;" (assignment_expression "uVar5 = uVar5 * 0x100 | uVar5 >> 8" identifier = (binary_expression "uVar5 * 0x100 | uVar5 >> 8" (binary_expression "uVar5 * 0x100" identifier * number_literal) | (binary_expression "uVar5 >> 8" identifier >> number_literal))) ;) (expression_statement "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8" identifier = (binary_expression "(uVar2 & 0x3ff) << 8 | uVar3 >> 8" (binary_expression "(uVar2 & 0x3ff) << 8" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "*puVar1 = uVar5;" (assignment_expression "*puVar1 = uVar5" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*param_2 = (int)(puVar1 + 2);" (assignment_expression "*param_2 = (int)(puVar1 + 2)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(puVar1 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + 2)" ( (binary_expression "puVar1 + 2" identifier + number_literal) )))) ;) (expression_statement "puVar1[1] = uVar3;" (assignment_expression "puVar1[1] = uVar3" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_002348e7:\n  *param_1 = iVar6;" statement_identifier : (expression_statement "*param_1 = iVar6;" (assignment_expression "*param_1 = iVar6" (pointer_expression "*param_1" * identifier) = identifier) ;)) (expression_statement "param_1[1] = iVar7;" (assignment_expression "param_1[1] = iVar7" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return '\x01';" return (char_literal "'\x01'" ' escape_sequence ') ;) })))
(translation_unit "/* std::codecvt_base::result std::(anonymous namespace)::utf16_in<char16_t>(std::(anonymous\n   namespace)::range<char const, true>&, std::(anonymous namespace)::range<char16_t, true>&,\n   unsigned long, std::codecvt_mode, std::(anonymous namespace)::surrogates) */\n\nchar __regparm3\nstd::(anonymous_namespace)::utf16_in<char16_t>\n          (range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }\n  while( true ) {\n    iVar6 = *(int *)param_1;\n    iVar7 = *(int *)(param_1 + 4);\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *(ushort **)param_2 = puVar1 + 2;\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *(int *)param_1 = iVar6;\n  *(int *)(param_1 + 4) = iVar7;\n  return '\x01';\n}\n\n" comment (declaration "char __regparm3" primitive_type identifier ;) (labeled_statement "std::(anonymous_namespace)::utf16_in<char16_t>\n          (range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)" statement_identifier (ERROR "::(anonymous_namespace):" : : (parenthesized_expression "(anonymous_namespace)" ( identifier )) :) : (expression_statement "utf16_in<char16_t>\n          (range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)" (binary_expression "utf16_in<char16_t>\n          (range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)" (binary_expression "utf16_in<char16_t" identifier < identifier) > (parenthesized_expression "(range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5)" ( (comma_expression "range *param_1,unsigned_char *param_2,ulong param_3,uint param_4,int param_5" (binary_expression "range *param_1" identifier * identifier) , (comma_expression "unsigned_char *param_2,ulong param_3,uint param_4,int param_5" (binary_expression "unsigned_char *param_2" identifier * identifier) , (ERROR "ulong" identifier) (comma_expression "param_3,uint param_4,int param_5" identifier , (ERROR "uint" identifier) (comma_expression "param_4,int param_5" identifier , (ERROR "int" identifier) identifier)))) ))) ;)) (compound_statement "{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    read_bom<char_const,true,3u>(param_1,param_2);\n  }\n  while( true ) {\n    iVar6 = *(int *)param_1;\n    iVar7 = *(int *)(param_1 + 4);\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *(ushort **)param_2 = puVar1 + 2;\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *(int *)param_1 = iVar6;\n  *(int *)(param_1 + 4) = iVar7;\n  return '\x01';\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "ushort uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type 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) ))))) ;) })) (while_statement "while( true ) {\n    iVar6 = *(int *)param_1;\n    iVar7 = *(int *)(param_1 + 4);\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *(ushort **)param_2 = puVar1 + 2;\n    puVar1[1] = uVar3;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar6 = *(int *)param_1;\n    iVar7 = *(int *)(param_1 + 4);\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *(ushort **)param_2 = puVar1 + 2;\n    puVar1[1] = uVar3;\n  }" { (expression_statement "iVar6 = *(int *)param_1;" (assignment_expression "iVar6 = *(int *)param_1" identifier = (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar7 = *(int *)(param_1 + 4);" (assignment_expression "iVar7 = *(int *)(param_1 + 4)" 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) ))))) ;) (if_statement "if (iVar6 == iVar7) {\n      return '\0';\n    }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n      return '\0';\n    }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (while_statement "while( true ) {\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }\n      uVar4 = read_utf8_code_point(param_1,param_3);\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = *(ushort **)param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;\n      iVar7 = *(int *)(param_1 + 4);\n      iVar6 = *(int *)param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *(ushort **)param_2 = puVar1 + 1;\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" { (if_statement "if (*(int *)param_2 == *(int *)(param_2 + 4)) {\n        return '\0';\n      }" if (parenthesized_expression "(*(int *)param_2 == *(int *)(param_2 + 4))" ( (binary_expression "*(int *)param_2 == *(int *)(param_2 + 4)" (pointer_expression "*(int *)param_2" * (cast_expression "(int *)param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == (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) ))))) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (expression_statement "uVar4 = read_utf8_code_point(param_1,param_3);" (assignment_expression "uVar4 = 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 (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }" if (parenthesized_expression "(uVar4 == 0xfffffffe)" ( (binary_expression "uVar4 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return (param_5 != 0) + '\x01';\n      }" { (return_statement "return (param_5 != 0) + '\x01';" return (binary_expression "(param_5 != 0) + '\x01'" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) + (char_literal "'\x01'" ' escape_sequence ')) ;) })) (if_statement "if (param_3 < uVar4) {\n        return '\x02';\n      }" if (parenthesized_expression "(param_3 < uVar4)" ( (binary_expression "param_3 < uVar4" identifier < identifier) )) (compound_statement "{\n        return '\x02';\n      }" { (return_statement "return '\x02';" return (char_literal "'\x02'" ' escape_sequence ') ;) })) (expression_statement "puVar1 = *(ushort **)param_2;" (assignment_expression "puVar1 = *(ushort **)param_2" identifier = (pointer_expression "*(ushort **)param_2" * (cast_expression "(ushort **)param_2" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar2 = (ushort)uVar4;" (assignment_expression "uVar2 = (ushort)uVar4" identifier = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (0xffff < uVar4) break;" if (parenthesized_expression "(0xffff < uVar4)" ( (binary_expression "0xffff < uVar4" number_literal < identifier) )) (break_statement "break;" break ;)) (if_statement "if (*(ushort **)(param_2 + 4) == puVar1) goto LAB_002348e7;" if (parenthesized_expression "(*(ushort **)(param_2 + 4) == puVar1)" ( (binary_expression "*(ushort **)(param_2 + 4) == puVar1" (pointer_expression "*(ushort **)(param_2 + 4)" * (cast_expression "(ushort **)(param_2 + 4)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_002348e7;" goto statement_identifier ;)) (expression_statement "iVar7 = *(int *)(param_1 + 4);" (assignment_expression "iVar7 = *(int *)(param_1 + 4)" 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) ))))) ;) (expression_statement "iVar6 = *(int *)param_1;" (assignment_expression "iVar6 = *(int *)param_1" identifier = (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" { (expression_statement "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);" (assignment_expression "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" identifier = (call_expression "(uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) )))) ;) })) (expression_statement "*(ushort **)param_2 = puVar1 + 1;" (assignment_expression "*(ushort **)param_2 = puVar1 + 1" (pointer_expression "*(ushort **)param_2" * (cast_expression "(ushort **)param_2" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) (expression_statement "*puVar1 = (ushort)uVar4;" (assignment_expression "*puVar1 = (ushort)uVar4" (pointer_expression "*puVar1" * identifier) = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (iVar6 == iVar7) {\n        return '\0';\n      }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) })) (if_statement "if ((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4) break;" if (parenthesized_expression "((uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4)" ( (binary_expression "(uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1) < 4" (call_expression "(uint)((int)*(ushort **)(param_2 + 4) - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)*(ushort **)(param_2 + 4) - (int)puVar1)" ( (binary_expression "(int)*(ushort **)(param_2 + 4) - (int)puVar1" (cast_expression "(int)*(ushort **)(param_2 + 4)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(ushort **)(param_2 + 4)" * (cast_expression "(ushort **)(param_2 + 4)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (uVar2 & 0x3ff) + 0xdc00;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) + 0xdc00" identifier = (binary_expression "(uVar2 & 0x3ff) + 0xdc00" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar5 = (short)(uVar4 >> 10) + 0xd7c0;" (assignment_expression "uVar5 = (short)(uVar4 >> 10) + 0xd7c0" identifier = (binary_expression "(short)(uVar4 >> 10) + 0xd7c0" (cast_expression "(short)(uVar4 >> 10)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar4 >> 10)" ( (binary_expression "uVar4 >> 10" identifier >> number_literal) ))) + number_literal)) ;) (if_statement "if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar5 = uVar5 * 0x100 | uVar5 >> 8;" (assignment_expression "uVar5 = uVar5 * 0x100 | uVar5 >> 8" identifier = (binary_expression "uVar5 * 0x100 | uVar5 >> 8" (binary_expression "uVar5 * 0x100" identifier * number_literal) | (binary_expression "uVar5 >> 8" identifier >> number_literal))) ;) (expression_statement "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8" identifier = (binary_expression "(uVar2 & 0x3ff) << 8 | uVar3 >> 8" (binary_expression "(uVar2 & 0x3ff) << 8" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "*puVar1 = uVar5;" (assignment_expression "*puVar1 = uVar5" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*(ushort **)param_2 = puVar1 + 2;" (assignment_expression "*(ushort **)param_2 = puVar1 + 2" (pointer_expression "*(ushort **)param_2" * (cast_expression "(ushort **)param_2" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = (binary_expression "puVar1 + 2" identifier + number_literal)) ;) (expression_statement "puVar1[1] = uVar3;" (assignment_expression "puVar1[1] = uVar3" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_002348e7:\n  *(int *)param_1 = iVar6;" statement_identifier : (expression_statement "*(int *)param_1 = iVar6;" (assignment_expression "*(int *)param_1 = iVar6" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;)) (expression_statement "*(int *)(param_1 + 4) = iVar7;" (assignment_expression "*(int *)(param_1 + 4) = iVar7" (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) )))) = identifier) ;) (return_statement "return '\x01';" return (char_literal "'\x01'" ' escape_sequence ') ;) }))
(translation_unit "char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}\n\n" (function_definition "char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" identifier (parameter_list "(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" ( (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 "uint param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "ushort uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_002343e0();\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_002343e0();\n  }" { (expression_statement "FUN_002343e0();" (call_expression "FUN_002343e0()" identifier (argument_list "()" ( ))) ;) })) (while_statement "while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" { (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar6 == iVar7) {\n      return '\0';\n    }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n      return '\0';\n    }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (while_statement "while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" { (if_statement "if (*param_2 == param_2[1]) {\n        return '\0';\n      }" if (parenthesized_expression "(*param_2 == param_2[1])" ( (binary_expression "*param_2 == param_2[1]" (pointer_expression "*param_2" * identifier) == (subscript_expression "param_2[1]" identifier [ number_literal ])) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) (expression_statement "uVar4 = FUN_00232fa0();" (assignment_expression "uVar4 = FUN_00232fa0()" identifier = (call_expression "FUN_00232fa0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }" if (parenthesized_expression "(uVar4 == 0xfffffffe)" ( (binary_expression "uVar4 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n        return (param_5 != 0) + '\x01';\n      }" { (return_statement "return (param_5 != 0) + '\x01';" return (binary_expression "(param_5 != 0) + '\x01'" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) + (char_literal "'\x01'" ' escape_sequence ')) ;) })) (if_statement "if (param_3 < uVar4) {\n        return '\x02';\n      }" if (parenthesized_expression "(param_3 < uVar4)" ( (binary_expression "param_3 < uVar4" identifier < identifier) )) (compound_statement "{\n        return '\x02';\n      }" { (return_statement "return '\x02';" return (char_literal "'\x02'" ' escape_sequence ') ;) })) (expression_statement "puVar1 = (ushort *)*param_2;" (assignment_expression "puVar1 = (ushort *)*param_2" identifier = (cast_expression "(ushort *)*param_2" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "uVar2 = (ushort)uVar4;" (assignment_expression "uVar2 = (ushort)uVar4" identifier = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (0xffff < uVar4) break;" if (parenthesized_expression "(0xffff < uVar4)" ( (binary_expression "0xffff < uVar4" number_literal < identifier) )) (break_statement "break;" break ;)) (if_statement "if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;" if (parenthesized_expression "((ushort *)param_2[1] == puVar1)" ( (binary_expression "(ushort *)param_2[1] == puVar1" (cast_expression "(ushort *)param_2[1]" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) == identifier) )) (goto_statement "goto LAB_002348e7;" goto statement_identifier ;)) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" { (expression_statement "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);" (assignment_expression "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" identifier = (call_expression "(uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ushort)" ( identifier ))) (argument_list "(uVar2 << 8 | uVar2 >> 8)" ( (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" identifier << number_literal) | (binary_expression "uVar2 >> 8" identifier >> number_literal)) )))) ;) })) (expression_statement "*param_2 = (int)(puVar1 + 1);" (assignment_expression "*param_2 = (int)(puVar1 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(puVar1 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + 1)" ( (binary_expression "puVar1 + 1" identifier + number_literal) )))) ;) (expression_statement "*puVar1 = (ushort)uVar4;" (assignment_expression "*puVar1 = (ushort)uVar4" (pointer_expression "*puVar1" * identifier) = (cast_expression "(ushort)uVar4" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (if_statement "if (iVar6 == iVar7) {\n        return '\0';\n      }" if (parenthesized_expression "(iVar6 == iVar7)" ( (binary_expression "iVar6 == iVar7" identifier == identifier) )) (compound_statement "{\n        return '\0';\n      }" { (return_statement "return '\0';" return (char_literal "'\0'" ' escape_sequence ') ;) })) })) (if_statement "if ((uint)(param_2[1] - (int)puVar1) < 4) break;" if (parenthesized_expression "((uint)(param_2[1] - (int)puVar1) < 4)" ( (binary_expression "(uint)(param_2[1] - (int)puVar1) < 4" (call_expression "(uint)(param_2[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2[1] - (int)puVar1)" ( (binary_expression "param_2[1] - (int)puVar1" (subscript_expression "param_2[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (uVar2 & 0x3ff) + 0xdc00;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) + 0xdc00" identifier = (binary_expression "(uVar2 & 0x3ff) + 0xdc00" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar5 = (short)(uVar4 >> 10) + 0xd7c0;" (assignment_expression "uVar5 = (short)(uVar4 >> 10) + 0xd7c0" identifier = (binary_expression "(short)(uVar4 >> 10) + 0xd7c0" (cast_expression "(short)(uVar4 >> 10)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar4 >> 10)" ( (binary_expression "uVar4 >> 10" identifier >> number_literal) ))) + number_literal)) ;) (if_statement "if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_4 & 1) == 0)" ( (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar5 = uVar5 * 0x100 | uVar5 >> 8;" (assignment_expression "uVar5 = uVar5 * 0x100 | uVar5 >> 8" identifier = (binary_expression "uVar5 * 0x100 | uVar5 >> 8" (binary_expression "uVar5 * 0x100" identifier * number_literal) | (binary_expression "uVar5 >> 8" identifier >> number_literal))) ;) (expression_statement "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8" identifier = (binary_expression "(uVar2 & 0x3ff) << 8 | uVar3 >> 8" (binary_expression "(uVar2 & 0x3ff) << 8" (parenthesized_expression "(uVar2 & 0x3ff)" ( (binary_expression "uVar2 & 0x3ff" identifier & number_literal) )) << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "*puVar1 = uVar5;" (assignment_expression "*puVar1 = uVar5" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*param_2 = (int)(puVar1 + 2);" (assignment_expression "*param_2 = (int)(puVar1 + 2)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(puVar1 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + 2)" ( (binary_expression "puVar1 + 2" identifier + number_literal) )))) ;) (expression_statement "puVar1[1] = uVar3;" (assignment_expression "puVar1[1] = uVar3" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_002348e7:\n  *param_1 = iVar6;" statement_identifier : (expression_statement "*param_1 = iVar6;" (assignment_expression "*param_1 = iVar6" (pointer_expression "*param_1" * identifier) = identifier) ;)) (expression_statement "param_1[1] = iVar7;" (assignment_expression "param_1[1] = iVar7" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return '\x01';" return (char_literal "'\x01'" ' escape_sequence ') ;) })))
(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) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE 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 ( ))) ;) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return (char_literal ' escape_sequence ') ;) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (subscript_expression IDENT [ LIT ])) )) (compound_statement { (return_statement return (char_literal ' escape_sequence ') ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) + (char_literal ' escape_sequence ')) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return (char_literal ' escape_sequence ') ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT)) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return (char_literal ' escape_sequence ') ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) < LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT) | (binary_expression IDENT >> LIT))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return (char_literal ' escape_sequence ') ;) })))
(function_definition "char __regparm3 FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)\n\n{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" (primitive_type "char") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00234850(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" (identifier "FUN_00234850") (parameter_list "(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)" (( "(") (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 "uint param_4" (type_identifier "uint") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  ushort *puVar1;\n  ushort uVar2;\n  ushort uVar3;\n  uint uVar4;\n  ushort uVar5;\n  int iVar6;\n  int iVar7;\n  \n  if ((param_4 & 4) != 0) {\n    FUN_002343e0();\n  }\n  while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }\nLAB_002348e7:\n  *param_1 = iVar6;\n  param_1[1] = iVar7;\n  return '\x01';\n}" ({ "{") (declaration "ushort *puVar1;" (type_identifier "ushort") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ushort uVar2;" (type_identifier "ushort") (identifier "uVar2") (; ";")) (declaration "ushort uVar3;" (type_identifier "ushort") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "ushort uVar5;" (type_identifier "ushort") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (if_statement "if ((param_4 & 4) != 0) {\n    FUN_002343e0();\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_002343e0();\n  }" ({ "{") (expression_statement "FUN_002343e0();" (call_expression "FUN_002343e0()" (identifier "FUN_002343e0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (while_statement "while( true ) {\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar6 = *param_1;\n    iVar7 = param_1[1];\n    if (iVar6 == iVar7) {\n      return '\0';\n    }\n    while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }\n    if ((uint)(param_2[1] - (int)puVar1) < 4) break;\n    uVar3 = (uVar2 & 0x3ff) + 0xdc00;\n    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;\n    if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }\n    *puVar1 = uVar5;\n    *param_2 = (int)(puVar1 + 2);\n    puVar1[1] = uVar3;\n  }" ({ "{") (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" (identifier "iVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" (identifier "iVar7") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (iVar6 == iVar7) {\n      return '\0';\n    }" (if "if") (parenthesized_expression "(iVar6 == iVar7)" (( "(") (binary_expression "iVar6 == iVar7" (identifier "iVar6") (== "==") (identifier "iVar7")) () ")")) (compound_statement "{\n      return '\0';\n    }" ({ "{") (return_statement "return '\0';" (return "return") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")) (; ";")) (} "}"))) (while_statement "while( true ) {\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      if (*param_2 == param_2[1]) {\n        return '\0';\n      }\n      uVar4 = FUN_00232fa0();\n      if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }\n      if (param_3 < uVar4) {\n        return '\x02';\n      }\n      puVar1 = (ushort *)*param_2;\n      uVar2 = (ushort)uVar4;\n      if (0xffff < uVar4) break;\n      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;\n      iVar7 = param_1[1];\n      iVar6 = *param_1;\n      if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }\n      *param_2 = (int)(puVar1 + 1);\n      *puVar1 = (ushort)uVar4;\n      if (iVar6 == iVar7) {\n        return '\0';\n      }\n    }" ({ "{") (if_statement "if (*param_2 == param_2[1]) {\n        return '\0';\n      }" (if "if") (parenthesized_expression "(*param_2 == param_2[1])" (( "(") (binary_expression "*param_2 == param_2[1]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (== "==") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        return '\0';\n      }" ({ "{") (return_statement "return '\0';" (return "return") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")) (; ";")) (} "}"))) (expression_statement "uVar4 = FUN_00232fa0();" (assignment_expression "uVar4 = FUN_00232fa0()" (identifier "uVar4") (= "=") (call_expression "FUN_00232fa0()" (identifier "FUN_00232fa0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (uVar4 == 0xfffffffe) {\n        return (param_5 != 0) + '\x01';\n      }" (if "if") (parenthesized_expression "(uVar4 == 0xfffffffe)" (( "(") (binary_expression "uVar4 == 0xfffffffe" (identifier "uVar4") (== "==") (number_literal "0xfffffffe")) () ")")) (compound_statement "{\n        return (param_5 != 0) + '\x01';\n      }" ({ "{") (return_statement "return (param_5 != 0) + '\x01';" (return "return") (binary_expression "(param_5 != 0) + '\x01'" (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")")) (+ "+") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (} "}"))) (if_statement "if (param_3 < uVar4) {\n        return '\x02';\n      }" (if "if") (parenthesized_expression "(param_3 < uVar4)" (( "(") (binary_expression "param_3 < uVar4" (identifier "param_3") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n        return '\x02';\n      }" ({ "{") (return_statement "return '\x02';" (return "return") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'")) (; ";")) (} "}"))) (expression_statement "puVar1 = (ushort *)*param_2;" (assignment_expression "puVar1 = (ushort *)*param_2" (identifier "puVar1") (= "=") (cast_expression "(ushort *)*param_2" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "uVar2 = (ushort)uVar4;" (assignment_expression "uVar2 = (ushort)uVar4" (identifier "uVar2") (= "=") (cast_expression "(ushort)uVar4" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (identifier "uVar4"))) (; ";")) (if_statement "if (0xffff < uVar4) break;" (if "if") (parenthesized_expression "(0xffff < uVar4)" (( "(") (binary_expression "0xffff < uVar4" (number_literal "0xffff") (< "<") (identifier "uVar4")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;" (if "if") (parenthesized_expression "((ushort *)param_2[1] == puVar1)" (( "(") (binary_expression "(ushort *)param_2[1] == puVar1" (cast_expression "(ushort *)param_2[1]" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (== "==") (identifier "puVar1")) () ")")) (goto_statement "goto LAB_002348e7;" (goto "goto") (statement_identifier "LAB_002348e7") (; ";"))) (expression_statement "iVar7 = param_1[1];" (assignment_expression "iVar7 = param_1[1]" (identifier "iVar7") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" (identifier "iVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((param_4 & 1) == 0) {\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" (if "if") (parenthesized_expression "((param_4 & 1) == 0)" (( "(") (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" (( "(") (binary_expression "param_4 & 1" (identifier "param_4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);\n      }" ({ "{") (expression_statement "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);" (assignment_expression "uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" (identifier "uVar4") (= "=") (call_expression "(uint)(ushort)(uVar2 << 8 | uVar2 >> 8)" (call_expression "(uint)(ushort)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(ushort)" (( "(") (identifier "ushort") () ")"))) (argument_list "(uVar2 << 8 | uVar2 >> 8)" (( "(") (binary_expression "uVar2 << 8 | uVar2 >> 8" (binary_expression "uVar2 << 8" (identifier "uVar2") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar2 >> 8" (identifier "uVar2") (>> ">>") (number_literal "8"))) () ")")))) (; ";")) (} "}"))) (expression_statement "*param_2 = (int)(puVar1 + 1);" (assignment_expression "*param_2 = (int)(puVar1 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)(puVar1 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(puVar1 + 1)" (( "(") (binary_expression "puVar1 + 1" (identifier "puVar1") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*puVar1 = (ushort)uVar4;" (assignment_expression "*puVar1 = (ushort)uVar4" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (cast_expression "(ushort)uVar4" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (identifier "uVar4"))) (; ";")) (if_statement "if (iVar6 == iVar7) {\n        return '\0';\n      }" (if "if") (parenthesized_expression "(iVar6 == iVar7)" (( "(") (binary_expression "iVar6 == iVar7" (identifier "iVar6") (== "==") (identifier "iVar7")) () ")")) (compound_statement "{\n        return '\0';\n      }" ({ "{") (return_statement "return '\0';" (return "return") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")) (; ";")) (} "}"))) (} "}"))) (if_statement "if ((uint)(param_2[1] - (int)puVar1) < 4) break;" (if "if") (parenthesized_expression "((uint)(param_2[1] - (int)puVar1) < 4)" (( "(") (binary_expression "(uint)(param_2[1] - (int)puVar1) < 4" (call_expression "(uint)(param_2[1] - (int)puVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_2[1] - (int)puVar1)" (( "(") (binary_expression "param_2[1] - (int)puVar1" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (- "-") (cast_expression "(int)puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar1"))) () ")"))) (< "<") (number_literal "4")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = (uVar2 & 0x3ff) + 0xdc00;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) + 0xdc00" (identifier "uVar3") (= "=") (binary_expression "(uVar2 & 0x3ff) + 0xdc00" (parenthesized_expression "(uVar2 & 0x3ff)" (( "(") (binary_expression "uVar2 & 0x3ff" (identifier "uVar2") (& "&") (number_literal "0x3ff")) () ")")) (+ "+") (number_literal "0xdc00"))) (; ";")) (expression_statement "uVar5 = (short)(uVar4 >> 10) + 0xd7c0;" (assignment_expression "uVar5 = (short)(uVar4 >> 10) + 0xd7c0" (identifier "uVar5") (= "=") (binary_expression "(short)(uVar4 >> 10) + 0xd7c0" (cast_expression "(short)(uVar4 >> 10)" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "(uVar4 >> 10)" (( "(") (binary_expression "uVar4 >> 10" (identifier "uVar4") (>> ">>") (number_literal "10")) () ")"))) (+ "+") (number_literal "0xd7c0"))) (; ";")) (if_statement "if ((param_4 & 1) == 0) {\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" (if "if") (parenthesized_expression "((param_4 & 1) == 0)" (( "(") (binary_expression "(param_4 & 1) == 0" (parenthesized_expression "(param_4 & 1)" (( "(") (binary_expression "param_4 & 1" (identifier "param_4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar5 = uVar5 * 0x100 | uVar5 >> 8;\n      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;\n    }" ({ "{") (expression_statement "uVar5 = uVar5 * 0x100 | uVar5 >> 8;" (assignment_expression "uVar5 = uVar5 * 0x100 | uVar5 >> 8" (identifier "uVar5") (= "=") (binary_expression "uVar5 * 0x100 | uVar5 >> 8" (binary_expression "uVar5 * 0x100" (identifier "uVar5") (* "*") (number_literal "0x100")) (| "|") (binary_expression "uVar5 >> 8" (identifier "uVar5") (>> ">>") (number_literal "8")))) (; ";")) (expression_statement "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8" (identifier "uVar3") (= "=") (binary_expression "(uVar2 & 0x3ff) << 8 | uVar3 >> 8" (binary_expression "(uVar2 & 0x3ff) << 8" (parenthesized_expression "(uVar2 & 0x3ff)" (( "(") (binary_expression "uVar2 & 0x3ff" (identifier "uVar2") (& "&") (number_literal "0x3ff")) () ")")) (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar3 >> 8" (identifier "uVar3") (>> ">>") (number_literal "8")))) (; ";")) (} "}"))) (expression_statement "*puVar1 = uVar5;" (assignment_expression "*puVar1 = uVar5" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "*param_2 = (int)(puVar1 + 2);" (assignment_expression "*param_2 = (int)(puVar1 + 2)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)(puVar1 + 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(puVar1 + 2)" (( "(") (binary_expression "puVar1 + 2" (identifier "puVar1") (+ "+") (number_literal "2")) () ")")))) (; ";")) (expression_statement "puVar1[1] = uVar3;" (assignment_expression "puVar1[1] = uVar3" (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (labeled_statement "LAB_002348e7:\n  *param_1 = iVar6;" (statement_identifier "LAB_002348e7") (: ":") (expression_statement "*param_1 = iVar6;" (assignment_expression "*param_1 = iVar6" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "iVar6")) (; ";"))) (expression_statement "param_1[1] = iVar7;" (assignment_expression "param_1[1] = iVar7" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar7")) (; ";")) (return_statement "return '\x01';" (return "return") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'")) (; ";")) (} "}")))

/* std::codecvt_base::result std::(anonymous namespace)::utf16_in<char16_t>(std::(anonymous
   namespace)::range<char const, true>&, std::(anonymous namespace)::range<char16_t, true>&,
   unsigned long, std::codecvt_mode, std::(anonymous namespace)::surrogates) */

char __regparm3
std::(anonymous_namespace)::var_1<var_2>
          (var_3 *var_4,var_5 *var_6,ulong var_15,type_2 var_7,int var_14)

{
  type_1 *var_16;
  type_1 var_17;
  type_1 var_19;
  type_2 var_13;
  type_1 var_18;
  int var_10;
  int var_11;
  
  if ((var_7 & 4) != 0) {
    var_8<var_9,true,3u>(var_4,var_6);
  }
  while( true ) {
    var_10 = *(int *)var_4;
    var_11 = *(int *)(var_4 + 4);
    if (var_10 == var_11) {
      return '\0';
    }
    while( true ) {
      if (*(int *)var_6 == *(int *)(var_6 + 4)) {
        return '\0';
      }
      var_13 = var_12(var_4,var_15);
      if (var_13 == 0xfffffffe) {
        return (var_14 != 0) + '\x01';
      }
      if (var_15 < var_13) {
        return '\x02';
      }
      var_16 = *(type_1 **)var_6;
      var_17 = (type_1)var_13;
      if (0xffff < var_13) break;
      if (*(type_1 **)(var_6 + 4) == var_16) goto LAB_002348e7;
      var_11 = *(int *)(var_4 + 4);
      var_10 = *(int *)var_4;
      if ((var_7 & 1) == 0) {
        var_13 = (type_2)(type_1)(var_17 << 8 | var_17 >> 8);
      }
      *(type_1 **)var_6 = var_16 + 1;
      *var_16 = (type_1)var_13;
      if (var_10 == var_11) {
        return '\0';
      }
    }
    if ((type_2)((int)*(type_1 **)(var_6 + 4) - (int)var_16) < 4) break;
    var_19 = (var_17 & 0x3ff) + 0xdc00;
    var_18 = (short)(var_13 >> 10) + 0xd7c0;
    if ((var_7 & 1) == 0) {
      var_18 = var_18 * 0x100 | var_18 >> 8;
      var_19 = (var_17 & 0x3ff) << 8 | var_19 >> 8;
    }
    *var_16 = var_18;
    *(type_1 **)var_6 = var_16 + 2;
    var_16[1] = var_19;
  }
LAB_002348e7:
  *(int *)var_4 = var_10;
  *(int *)(var_4 + 4) = var_11;
  return '\x01';
}


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

char __regparm3 MASKED(int *param_1,int *param_2,uint param_3,uint param_4,int param_5)

{
  ushort *puVar1;
  ushort uVar2;
  ushort uVar3;
  uint uVar4;
  ushort uVar5;
  int iVar6;
  int iVar7;
  
  if ((param_4 & 4) != 0) {
    FUN_002343e0();
  }
  while( true ) {
    iVar6 = *param_1;
    iVar7 = param_1[1];
    if (iVar6 == iVar7) {
      return '\0';
    }
    while( true ) {
      if (*param_2 == param_2[1]) {
        return '\0';
      }
      uVar4 = FUN_00232fa0();
      if (uVar4 == 0xfffffffe) {
        return (param_5 != 0) + '\x01';
      }
      if (param_3 < uVar4) {
        return '\x02';
      }
      puVar1 = (ushort *)*param_2;
      uVar2 = (ushort)uVar4;
      if (0xffff < uVar4) break;
      if ((ushort *)param_2[1] == puVar1) goto LAB_002348e7;
      iVar7 = param_1[1];
      iVar6 = *param_1;
      if ((param_4 & 1) == 0) {
        uVar4 = (uint)(ushort)(uVar2 << 8 | uVar2 >> 8);
      }
      *param_2 = (int)(puVar1 + 1);
      *puVar1 = (ushort)uVar4;
      if (iVar6 == iVar7) {
        return '\0';
      }
    }
    if ((uint)(param_2[1] - (int)puVar1) < 4) break;
    uVar3 = (uVar2 & 0x3ff) + 0xdc00;
    uVar5 = (short)(uVar4 >> 10) + 0xd7c0;
    if ((param_4 & 1) == 0) {
      uVar5 = uVar5 * 0x100 | uVar5 >> 8;
      uVar3 = (uVar2 & 0x3ff) << 8 | uVar3 >> 8;
    }
    *puVar1 = uVar5;
    *param_2 = (int)(puVar1 + 2);
    puVar1[1] = uVar3;
  }
LAB_002348e7:
  *param_1 = iVar6;
  param_1[1] = iVar7;
  return '\x01';
}

