
void clear_qp_implies(valueT p1_mask,valueT p2_mask)

{
  byte bVar1;
  undefined4 *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  byte bVar5;
  byte bVar6;
  uint uVar7;
  uint uVar8;
  ushort *puVar9;
  int iVar10;
  int iVar11;
  int unaff_EDI;
  undefined8 uVar12;
  int local_40;
  uint local_2c;
  uint local_28;
  
  uVar12 = __x86_get_pc_thunk_di();
  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);
  iVar10 = *(int *)(unaff_EDI + 0x46d55);
  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);
  local_40 = 0;
  do {
    local_28 = (uint)(p1_mask >> 0x20);
    local_2c = (uint)p1_mask;
    while( true ) {
      if (iVar10 <= local_40) {
        return;
      }
      iVar11 = *(int *)(unaff_EDI + 0x46d59);
      puVar9 = (ushort *)(iVar11 + local_40 * 8);
      bVar1 = (byte)*puVar9;
      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);
      if ((bVar1 & 0x20) != 0) {
        uVar7 = uVar8 >> (bVar1 & 0x1f);
      }
      if ((uVar7 & 1) != 0) break;
      bVar6 = (byte)(*puVar9 >> 6);
      bVar5 = bVar6 & 0x1f;
      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;
      if ((*puVar9 >> 6 & 0x20) != 0) {
        uVar7 = local_28 >> (bVar6 & 0x1f);
      }
      if ((uVar7 & 1) != 0) break;
      local_40 = local_40 + 1;
    }
    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {
      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f
             );
      iVar11 = *(int *)(unaff_EDI + 0x46d59);
      iVar10 = *(int *)(unaff_EDI + 0x46d55);
      puVar9 = (ushort *)(local_40 * 8 + iVar11);
    }
    iVar10 = iVar10 + -1;
    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);
    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);
    *(int *)(unaff_EDI + 0x46d55) = iVar10;
    *(undefined4 *)puVar9 = uVar3;
    *(undefined4 *)(puVar9 + 2) = uVar4;
  } while( true );
}



void FUN_000409a0(uint param_1,uint param_2)

{
  byte bVar1;
  undefined4 *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  byte bVar5;
  byte bVar6;
  uint uVar7;
  uint uVar8;
  ushort *puVar9;
  int iVar10;
  int iVar11;
  int unaff_EDI;
  undefined8 uVar12;
  int local_40;
  
  uVar12 = FUN_0001d669();
  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);
  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);
  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);
  local_40 = 0;
joined_r0x000409f4:
  do {
    if (iVar10 <= local_40) {
      return;
    }
    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);
    puVar9 = (ushort *)(iVar11 + local_40 * 8);
    bVar1 = (byte)*puVar9;
    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);
    if ((bVar1 & 0x20) != 0) {
      uVar7 = uVar8 >> (bVar1 & 0x1f);
    }
    if ((uVar7 & 1) == 0) {
      bVar6 = (byte)(*puVar9 >> 6);
      bVar5 = bVar6 & 0x1f;
      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;
      if ((*puVar9 >> 6 & 0x20) != 0) {
        uVar7 = param_2 >> (bVar6 & 0x1f);
      }
      if ((uVar7 & 1) == 0) {
        local_40 = local_40 + 1;
        goto joined_r0x000409f4;
      }
    }
    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {
      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f
             );
      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);
      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);
      puVar9 = (ushort *)(local_40 * 8 + iVar11);
    }
    iVar10 = iVar10 + -1;
    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);
    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);
    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;
    *(undefined4 *)puVar9 = uVar3;
    *(undefined4 *)(puVar9 + 2) = uVar4;
  } while( true );
}


PUSH EBP
PUSH EDI
CALL 0x0001d669
ADD EDI,0x3d659
PUSH ESI
PUSH EBX
SUB ESP,0x3c
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x50]
MOV dword ptr [ESP + 0x1c],EDX
MOV EDX,dword ptr [ESP + 0x54]
MOV dword ptr [ESP + 0x20],EAX
LEA EAX,[EDI + 0xfffe371c]
MOV EBP,dword ptr [EDI + 0x96fc]
MOV dword ptr [ESP + 0x28],EAX
MOV EAX,dword ptr [EDI + 0xffffff68]
MOV dword ptr [ESP + 0x24],EDX
MOV dword ptr [ESP + 0xc],0x0
MOV dword ptr [ESP + 0x2c],EAX
LEA ESI,[ESI]
CMP dword ptr [ESP + 0xc],EBP
JGE 0x00040a5e
MOV EAX,dword ptr [ESP + 0xc]
MOV ESI,dword ptr [EDI + 0x9700]
MOV EDX,dword ptr [ESP + 0x1c]
SHL EAX,0x3
LEA EBX,[ESI + EAX*0x1]
MOV dword ptr [ESP + 0x10],EAX
MOVZX ECX,byte ptr [EBX]
AND ECX,0x3f
MOVZX EAX,CL
MOV dword ptr [ESP + 0x14],EAX
MOV EAX,dword ptr [ESP + 0x18]
SHRD EAX,EDX,CL
SHR EDX,CL
TEST CL,0x20
JZ 0x00040a2b
MOV EAX,EDX
AND EAX,0x1
JNZ 0x00040a70
MOVZX ECX,word ptr [EBX]
MOV EDX,dword ptr [ESP + 0x24]
MOV EAX,dword ptr [ESP + 0x20]
SHR CX,0x6
AND ECX,0x3f
SHRD EAX,EDX,CL
SHR EDX,CL
TEST CL,0x20
JZ 0x00040a4e
MOV EAX,EDX
AND EAX,0x1
JNZ 0x00040a70
ADD dword ptr [ESP + 0xc],0x1
CMP dword ptr [ESP + 0xc],EBP
JL 0x000409f6
ADD ESP,0x3c
POP EBX
POP ESI
POP EDI
POP EBP
RET
TEST byte ptr [EDI + 0x9970],0x2
JNZ 0x00040a98
SUB EBP,0x1
MOV EAX,dword ptr [ESI + EBP*0x8]
MOV EDX,dword ptr [ESI + EBP*0x8 + 0x4]
MOV dword ptr [EDI + 0x96fc],EBP
MOV dword ptr [EBX],EAX
MOV dword ptr [EBX + 0x4],EDX
JMP 0x000409f0
MOVZX EAX,word ptr [EBX]
MOV EBX,EDI
SHR AX,0x6
AND EAX,0x3f
PUSH EAX
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x30]
MOV EAX,dword ptr [ESP + 0x38]
PUSH dword ptr [EAX]
CALL 0x00014440
MOV EBX,dword ptr [ESP + 0x20]
ADD ESP,0x10
MOV ESI,dword ptr [EDI + 0x9700]
MOV EBP,dword ptr [EDI + 0x96fc]
ADD EBX,ESI
JMP 0x00040a79
(translation_unit "void FUN_000409a0(uint param_1,uint param_2)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}\n\n" (function_definition "void FUN_000409a0(uint param_1,uint param_2)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" primitive_type (function_declarator "FUN_000409a0(uint param_1,uint param_2)" identifier (parameter_list "(uint param_1,uint param_2)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (expression_statement "uVar12 = FUN_0001d669();" (assignment_expression "uVar12 = FUN_0001d669()" identifier = (call_expression "FUN_0001d669()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar8 = (uint)((ulonglong)uVar12 >> 0x20);" (assignment_expression "uVar8 = (uint)((ulonglong)uVar12 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar12 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar12 >> 0x20)" ( (binary_expression "(ulonglong)uVar12 >> 0x20" (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) ))))) ;) (expression_statement "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);" (assignment_expression "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1)" identifier = (pointer_expression "*(undefined4 **)(unaff_EDI + 0x3d5c1)" * (cast_expression "(undefined4 **)(unaff_EDI + 0x3d5c1)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x3d5c1)" ( (binary_expression "unaff_EDI + 0x3d5c1" identifier + number_literal) ))))) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (labeled_statement "joined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" statement_identifier : (do_statement "do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" do (compound_statement "{\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  }" { (if_statement "if (iVar10 <= local_40) {\n      return;\n    }" if (parenthesized_expression "(iVar10 <= local_40)" ( (binary_expression "iVar10 <= local_40" identifier <= identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" ( (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" & identifier) + identifier) ))))) ;) (expression_statement "puVar9 = (ushort *)(iVar11 + local_40 * 8);" (assignment_expression "puVar9 = (ushort *)(iVar11 + local_40 * 8)" identifier = (cast_expression "(ushort *)(iVar11 + local_40 * 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + local_40 * 8)" ( (binary_expression "iVar11 + local_40 * 8" identifier + (binary_expression "local_40 * 8" identifier * number_literal)) )))) ;) (expression_statement "bVar1 = (byte)*puVar9;" (assignment_expression "bVar1 = (byte)*puVar9" identifier = (binary_expression "(byte)*puVar9" (parenthesized_expression "(byte)" ( identifier )) * identifier)) ;) (expression_statement "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);" (assignment_expression "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" identifier = (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f)" (cast_expression "(uint)uVar12" ( (type_descriptor "uint" type_identifier) ) identifier) >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar8 << 0x20 - (bVar1 & 0x1f)" identifier << (binary_expression "0x20 - (bVar1 & 0x1f)" number_literal - (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" if (parenthesized_expression "((bVar1 & 0x20) != 0)" ( (binary_expression "(bVar1 & 0x20) != 0" (parenthesized_expression "(bVar1 & 0x20)" ( (binary_expression "bVar1 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" { (expression_statement "uVar7 = uVar8 >> (bVar1 & 0x1f);" (assignment_expression "uVar7 = uVar8 >> (bVar1 & 0x1f)" identifier = (binary_expression "uVar8 >> (bVar1 & 0x1f)" identifier >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" { (expression_statement "bVar6 = (byte)(*puVar9 >> 6);" (assignment_expression "bVar6 = (byte)(*puVar9 >> 6)" identifier = (call_expression "(byte)(*puVar9 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*puVar9 >> 6)" ( (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) )))) ;) (expression_statement "bVar5 = bVar6 & 0x1f;" (assignment_expression "bVar5 = bVar6 & 0x1f" identifier = (binary_expression "bVar6 & 0x1f" identifier & number_literal)) ;) (expression_statement "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;" (assignment_expression "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5" identifier = (binary_expression "param_1 >> bVar5 | param_2 << 0x20 - bVar5" (binary_expression "param_1 >> bVar5" identifier >> identifier) | (binary_expression "param_2 << 0x20 - bVar5" identifier << (binary_expression "0x20 - bVar5" number_literal - identifier)))) ;) (if_statement "if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" if (parenthesized_expression "((*puVar9 >> 6 & 0x20) != 0)" ( (binary_expression "(*puVar9 >> 6 & 0x20) != 0" (parenthesized_expression "(*puVar9 >> 6 & 0x20)" ( (binary_expression "*puVar9 >> 6 & 0x20" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" { (expression_statement "uVar7 = param_2 >> (bVar6 & 0x1f);" (assignment_expression "uVar7 = param_2 >> (bVar6 & 0x1f)" identifier = (binary_expression "param_2 >> (bVar6 & 0x1f)" identifier >> (parenthesized_expression "(bVar6 & 0x1f)" ( (binary_expression "bVar6 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" { (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) (goto_statement "goto joined_r0x000409f4;" goto statement_identifier ;) })) })) (if_statement "if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" if (parenthesized_expression "((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0)" ( (binary_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0" (parenthesized_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2)" ( (binary_expression "*(byte *)(unaff_EDI + 0x46fc9) & 2" (pointer_expression "*(byte *)(unaff_EDI + 0x46fc9)" * (cast_expression "(byte *)(unaff_EDI + 0x46fc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46fc9)" ( (binary_expression "unaff_EDI + 0x46fc9" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" { (expression_statement "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );" (call_expression "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" identifier (argument_list "((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" ( (cast_expression "(FILE *)*puVar2" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier)) , (cast_expression "(char *)(unaff_EDI + 0x20d75)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x20d75)" ( (binary_expression "unaff_EDI + 0x20d75" identifier + number_literal) ))) , (call_expression "(uint)(bVar1 & 0x3f)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar1 & 0x3f)" ( (binary_expression "bVar1 & 0x3f" identifier & number_literal) ))) , (binary_expression "*puVar9 >> 6 & 0x3f" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) ))) ;) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" ( (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" & identifier) + identifier) ))))) ;) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) ))))) ;) (expression_statement "puVar9 = (ushort *)(local_40 * 8 + iVar11);" (assignment_expression "puVar9 = (ushort *)(local_40 * 8 + iVar11)" identifier = (cast_expression "(ushort *)(local_40 * 8 + iVar11)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40 * 8 + iVar11)" ( (binary_expression "local_40 * 8 + iVar11" (binary_expression "local_40 * 8" identifier * number_literal) + identifier) )))) ;) })) (expression_statement "iVar10 = iVar10 + -1;" (assignment_expression "iVar10 = iVar10 + -1" identifier = (binary_expression "iVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);" (assignment_expression "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + iVar10 * 8)" ( (binary_expression "iVar11 + iVar10 * 8" identifier + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + 4 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + 4 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 4 + iVar10 * 8)" ( (binary_expression "iVar11 + 4 + iVar10 * 8" (binary_expression "iVar11 + 4" identifier + number_literal) + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;" (assignment_expression "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10" (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) )))) = identifier) ;) (expression_statement "*(undefined4 *)puVar9 = uVar3;" (assignment_expression "*(undefined4 *)puVar9 = uVar3" (pointer_expression "*(undefined4 *)puVar9" * (cast_expression "(undefined4 *)puVar9" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(undefined4 *)(puVar9 + 2) = uVar4;" (assignment_expression "*(undefined4 *)(puVar9 + 2) = uVar4" (pointer_expression "*(undefined4 *)(puVar9 + 2)" * (cast_expression "(undefined4 *)(puVar9 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "void clear_qp_implies(valueT p1_mask,valueT p2_mask)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  uint local_2c;\n  uint local_28;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(unaff_EDI + 0x46d55);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\n  do {\n    local_28 = (uint)(p1_mask >> 0x20);\n    local_2c = (uint)p1_mask;\n    while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(unaff_EDI + 0x46d55) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}\n\n" (function_definition "void clear_qp_implies(valueT p1_mask,valueT p2_mask)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  uint local_2c;\n  uint local_28;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(unaff_EDI + 0x46d55);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\n  do {\n    local_28 = (uint)(p1_mask >> 0x20);\n    local_2c = (uint)p1_mask;\n    while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(unaff_EDI + 0x46d55) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" primitive_type (function_declarator "clear_qp_implies(valueT p1_mask,valueT p2_mask)" identifier (parameter_list "(valueT p1_mask,valueT p2_mask)" ( (parameter_declaration "valueT p1_mask" type_identifier identifier) , (parameter_declaration "valueT p2_mask" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  uint local_2c;\n  uint local_28;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(unaff_EDI + 0x46d55);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\n  do {\n    local_28 = (uint)(p1_mask >> 0x20);\n    local_2c = (uint)p1_mask;\n    while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(unaff_EDI + 0x46d55) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "uVar12 = __x86_get_pc_thunk_di();" (assignment_expression "uVar12 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar8 = (uint)((ulonglong)uVar12 >> 0x20);" (assignment_expression "uVar8 = (uint)((ulonglong)uVar12 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar12 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar12 >> 0x20)" ( (binary_expression "(ulonglong)uVar12 >> 0x20" (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar10 = *(int *)(unaff_EDI + 0x46d55);" (assignment_expression "iVar10 = *(int *)(unaff_EDI + 0x46d55)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x46d55)" * (cast_expression "(int *)(unaff_EDI + 0x46d55)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d55)" ( (binary_expression "unaff_EDI + 0x46d55" identifier + number_literal) ))))) ;) (expression_statement "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);" (assignment_expression "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1)" identifier = (pointer_expression "*(undefined4 **)(unaff_EDI + 0x3d5c1)" * (cast_expression "(undefined4 **)(unaff_EDI + 0x3d5c1)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x3d5c1)" ( (binary_expression "unaff_EDI + 0x3d5c1" identifier + number_literal) ))))) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (do_statement "do {\n    local_28 = (uint)(p1_mask >> 0x20);\n    local_2c = (uint)p1_mask;\n    while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(unaff_EDI + 0x46d55) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" do (compound_statement "{\n    local_28 = (uint)(p1_mask >> 0x20);\n    local_2c = (uint)p1_mask;\n    while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(unaff_EDI + 0x46d55) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  }" { (expression_statement "local_28 = (uint)(p1_mask >> 0x20);" (assignment_expression "local_28 = (uint)(p1_mask >> 0x20)" identifier = (call_expression "(uint)(p1_mask >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(p1_mask >> 0x20)" ( (binary_expression "p1_mask >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "local_2c = (uint)p1_mask;" (assignment_expression "local_2c = (uint)p1_mask" identifier = (cast_expression "(uint)p1_mask" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (while_statement "while( true ) {\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      if (iVar10 <= local_40) {\n        return;\n      }\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      puVar9 = (ushort *)(iVar11 + local_40 * 8);\n      bVar1 = (byte)*puVar9;\n      uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n      if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) != 0) break;\n      local_40 = local_40 + 1;\n    }" { (if_statement "if (iVar10 <= local_40) {\n        return;\n      }" if (parenthesized_expression "(iVar10 <= local_40)" ( (binary_expression "iVar10 <= local_40" identifier <= identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "iVar11 = *(int *)(unaff_EDI + 0x46d59);" (assignment_expression "iVar11 = *(int *)(unaff_EDI + 0x46d59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x46d59)" * (cast_expression "(int *)(unaff_EDI + 0x46d59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d59)" ( (binary_expression "unaff_EDI + 0x46d59" identifier + number_literal) ))))) ;) (expression_statement "puVar9 = (ushort *)(iVar11 + local_40 * 8);" (assignment_expression "puVar9 = (ushort *)(iVar11 + local_40 * 8)" identifier = (cast_expression "(ushort *)(iVar11 + local_40 * 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + local_40 * 8)" ( (binary_expression "iVar11 + local_40 * 8" identifier + (binary_expression "local_40 * 8" identifier * number_literal)) )))) ;) (expression_statement "bVar1 = (byte)*puVar9;" (assignment_expression "bVar1 = (byte)*puVar9" identifier = (binary_expression "(byte)*puVar9" (parenthesized_expression "(byte)" ( identifier )) * identifier)) ;) (expression_statement "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);" (assignment_expression "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" identifier = (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f)" (cast_expression "(uint)uVar12" ( (type_descriptor "uint" type_identifier) ) identifier) >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar8 << 0x20 - (bVar1 & 0x1f)" identifier << (binary_expression "0x20 - (bVar1 & 0x1f)" number_literal - (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar1 & 0x20) != 0) {\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }" if (parenthesized_expression "((bVar1 & 0x20) != 0)" ( (binary_expression "(bVar1 & 0x20) != 0" (parenthesized_expression "(bVar1 & 0x20)" ( (binary_expression "bVar1 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = uVar8 >> (bVar1 & 0x1f);\n      }" { (expression_statement "uVar7 = uVar8 >> (bVar1 & 0x1f);" (assignment_expression "uVar7 = uVar8 >> (bVar1 & 0x1f)" identifier = (binary_expression "uVar8 >> (bVar1 & 0x1f)" identifier >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) != 0) break;" if (parenthesized_expression "((uVar7 & 1) != 0)" ( (binary_expression "(uVar7 & 1) != 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "bVar6 = (byte)(*puVar9 >> 6);" (assignment_expression "bVar6 = (byte)(*puVar9 >> 6)" identifier = (call_expression "(byte)(*puVar9 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*puVar9 >> 6)" ( (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) )))) ;) (expression_statement "bVar5 = bVar6 & 0x1f;" (assignment_expression "bVar5 = bVar6 & 0x1f" identifier = (binary_expression "bVar6 & 0x1f" identifier & number_literal)) ;) (expression_statement "uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5;" (assignment_expression "uVar7 = local_2c >> bVar5 | local_28 << 0x20 - bVar5" identifier = (binary_expression "local_2c >> bVar5 | local_28 << 0x20 - bVar5" (binary_expression "local_2c >> bVar5" identifier >> identifier) | (binary_expression "local_28 << 0x20 - bVar5" identifier << (binary_expression "0x20 - bVar5" number_literal - identifier)))) ;) (if_statement "if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }" if (parenthesized_expression "((*puVar9 >> 6 & 0x20) != 0)" ( (binary_expression "(*puVar9 >> 6 & 0x20) != 0" (parenthesized_expression "(*puVar9 >> 6 & 0x20)" ( (binary_expression "*puVar9 >> 6 & 0x20" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = local_28 >> (bVar6 & 0x1f);\n      }" { (expression_statement "uVar7 = local_28 >> (bVar6 & 0x1f);" (assignment_expression "uVar7 = local_28 >> (bVar6 & 0x1f)" identifier = (binary_expression "local_28 >> (bVar6 & 0x1f)" identifier >> (parenthesized_expression "(bVar6 & 0x1f)" ( (binary_expression "bVar6 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) != 0) break;" if (parenthesized_expression "((uVar7 & 1) != 0)" ( (binary_expression "(uVar7 & 1) != 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) })) (if_statement "if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" if (parenthesized_expression "((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0)" ( (binary_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0" (parenthesized_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2)" ( (binary_expression "*(byte *)(unaff_EDI + 0x46fc9) & 2" (pointer_expression "*(byte *)(unaff_EDI + 0x46fc9)" * (cast_expression "(byte *)(unaff_EDI + 0x46fc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46fc9)" ( (binary_expression "unaff_EDI + 0x46fc9" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(unaff_EDI + 0x46d59);\n      iVar10 = *(int *)(unaff_EDI + 0x46d55);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" { (expression_statement "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );" (call_expression "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" identifier (argument_list "((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" ( (cast_expression "(FILE *)*puVar2" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier)) , (cast_expression "(char *)(unaff_EDI + 0x20d75)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x20d75)" ( (binary_expression "unaff_EDI + 0x20d75" identifier + number_literal) ))) , (call_expression "(uint)(bVar1 & 0x3f)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar1 & 0x3f)" ( (binary_expression "bVar1 & 0x3f" identifier & number_literal) ))) , (binary_expression "*puVar9 >> 6 & 0x3f" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) ))) ;) (expression_statement "iVar11 = *(int *)(unaff_EDI + 0x46d59);" (assignment_expression "iVar11 = *(int *)(unaff_EDI + 0x46d59)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x46d59)" * (cast_expression "(int *)(unaff_EDI + 0x46d59)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d59)" ( (binary_expression "unaff_EDI + 0x46d59" identifier + number_literal) ))))) ;) (expression_statement "iVar10 = *(int *)(unaff_EDI + 0x46d55);" (assignment_expression "iVar10 = *(int *)(unaff_EDI + 0x46d55)" identifier = (pointer_expression "*(int *)(unaff_EDI + 0x46d55)" * (cast_expression "(int *)(unaff_EDI + 0x46d55)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d55)" ( (binary_expression "unaff_EDI + 0x46d55" identifier + number_literal) ))))) ;) (expression_statement "puVar9 = (ushort *)(local_40 * 8 + iVar11);" (assignment_expression "puVar9 = (ushort *)(local_40 * 8 + iVar11)" identifier = (cast_expression "(ushort *)(local_40 * 8 + iVar11)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40 * 8 + iVar11)" ( (binary_expression "local_40 * 8 + iVar11" (binary_expression "local_40 * 8" identifier * number_literal) + identifier) )))) ;) })) (expression_statement "iVar10 = iVar10 + -1;" (assignment_expression "iVar10 = iVar10 + -1" identifier = (binary_expression "iVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);" (assignment_expression "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + iVar10 * 8)" ( (binary_expression "iVar11 + iVar10 * 8" identifier + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + 4 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + 4 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 4 + iVar10 * 8)" ( (binary_expression "iVar11 + 4 + iVar10 * 8" (binary_expression "iVar11 + 4" identifier + number_literal) + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(int *)(unaff_EDI + 0x46d55) = iVar10;" (assignment_expression "*(int *)(unaff_EDI + 0x46d55) = iVar10" (pointer_expression "*(int *)(unaff_EDI + 0x46d55)" * (cast_expression "(int *)(unaff_EDI + 0x46d55)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d55)" ( (binary_expression "unaff_EDI + 0x46d55" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)puVar9 = uVar3;" (assignment_expression "*(undefined4 *)puVar9 = uVar3" (pointer_expression "*(undefined4 *)puVar9" * (cast_expression "(undefined4 *)puVar9" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(undefined4 *)(puVar9 + 2) = uVar4;" (assignment_expression "*(undefined4 *)(puVar9 + 2) = uVar4" (pointer_expression "*(undefined4 *)(puVar9 + 2)" * (cast_expression "(undefined4 *)(puVar9 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "void FUN_000409a0(uint param_1,uint param_2)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}\n\n" (function_definition "void FUN_000409a0(uint param_1,uint param_2)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" primitive_type (function_declarator "FUN_000409a0(uint param_1,uint param_2)" identifier (parameter_list "(uint param_1,uint param_2)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "ushort *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (expression_statement "uVar12 = FUN_0001d669();" (assignment_expression "uVar12 = FUN_0001d669()" identifier = (call_expression "FUN_0001d669()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar8 = (uint)((ulonglong)uVar12 >> 0x20);" (assignment_expression "uVar8 = (uint)((ulonglong)uVar12 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar12 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar12 >> 0x20)" ( (binary_expression "(ulonglong)uVar12 >> 0x20" (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) ))))) ;) (expression_statement "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);" (assignment_expression "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1)" identifier = (pointer_expression "*(undefined4 **)(unaff_EDI + 0x3d5c1)" * (cast_expression "(undefined4 **)(unaff_EDI + 0x3d5c1)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EDI + 0x3d5c1)" ( (binary_expression "unaff_EDI + 0x3d5c1" identifier + number_literal) ))))) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (labeled_statement "joined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" statement_identifier : (do_statement "do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" do (compound_statement "{\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  }" { (if_statement "if (iVar10 <= local_40) {\n      return;\n    }" if (parenthesized_expression "(iVar10 <= local_40)" ( (binary_expression "iVar10 <= local_40" identifier <= identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" ( (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" & identifier) + identifier) ))))) ;) (expression_statement "puVar9 = (ushort *)(iVar11 + local_40 * 8);" (assignment_expression "puVar9 = (ushort *)(iVar11 + local_40 * 8)" identifier = (cast_expression "(ushort *)(iVar11 + local_40 * 8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + local_40 * 8)" ( (binary_expression "iVar11 + local_40 * 8" identifier + (binary_expression "local_40 * 8" identifier * number_literal)) )))) ;) (expression_statement "bVar1 = (byte)*puVar9;" (assignment_expression "bVar1 = (byte)*puVar9" identifier = (binary_expression "(byte)*puVar9" (parenthesized_expression "(byte)" ( identifier )) * identifier)) ;) (expression_statement "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);" (assignment_expression "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" identifier = (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f)" (cast_expression "(uint)uVar12" ( (type_descriptor "uint" type_identifier) ) identifier) >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar8 << 0x20 - (bVar1 & 0x1f)" identifier << (binary_expression "0x20 - (bVar1 & 0x1f)" number_literal - (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))))) ;) (if_statement "if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" if (parenthesized_expression "((bVar1 & 0x20) != 0)" ( (binary_expression "(bVar1 & 0x20) != 0" (parenthesized_expression "(bVar1 & 0x20)" ( (binary_expression "bVar1 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" { (expression_statement "uVar7 = uVar8 >> (bVar1 & 0x1f);" (assignment_expression "uVar7 = uVar8 >> (bVar1 & 0x1f)" identifier = (binary_expression "uVar8 >> (bVar1 & 0x1f)" identifier >> (parenthesized_expression "(bVar1 & 0x1f)" ( (binary_expression "bVar1 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" { (expression_statement "bVar6 = (byte)(*puVar9 >> 6);" (assignment_expression "bVar6 = (byte)(*puVar9 >> 6)" identifier = (call_expression "(byte)(*puVar9 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*puVar9 >> 6)" ( (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) )))) ;) (expression_statement "bVar5 = bVar6 & 0x1f;" (assignment_expression "bVar5 = bVar6 & 0x1f" identifier = (binary_expression "bVar6 & 0x1f" identifier & number_literal)) ;) (expression_statement "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;" (assignment_expression "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5" identifier = (binary_expression "param_1 >> bVar5 | param_2 << 0x20 - bVar5" (binary_expression "param_1 >> bVar5" identifier >> identifier) | (binary_expression "param_2 << 0x20 - bVar5" identifier << (binary_expression "0x20 - bVar5" number_literal - identifier)))) ;) (if_statement "if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" if (parenthesized_expression "((*puVar9 >> 6 & 0x20) != 0)" ( (binary_expression "(*puVar9 >> 6 & 0x20) != 0" (parenthesized_expression "(*puVar9 >> 6 & 0x20)" ( (binary_expression "*puVar9 >> 6 & 0x20" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" { (expression_statement "uVar7 = param_2 >> (bVar6 & 0x1f);" (assignment_expression "uVar7 = param_2 >> (bVar6 & 0x1f)" identifier = (binary_expression "param_2 >> (bVar6 & 0x1f)" identifier >> (parenthesized_expression "(bVar6 & 0x1f)" ( (binary_expression "bVar6 & 0x1f" identifier & number_literal) )))) ;) })) (if_statement "if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" { (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) (goto_statement "goto joined_r0x000409f4;" goto statement_identifier ;) })) })) (if_statement "if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" if (parenthesized_expression "((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0)" ( (binary_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0" (parenthesized_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2)" ( (binary_expression "*(byte *)(unaff_EDI + 0x46fc9) & 2" (pointer_expression "*(byte *)(unaff_EDI + 0x46fc9)" * (cast_expression "(byte *)(unaff_EDI + 0x46fc9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46fc9)" ( (binary_expression "unaff_EDI + 0x46fc9" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" { (expression_statement "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );" (call_expression "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" identifier (argument_list "((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" ( (cast_expression "(FILE *)*puVar2" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier)) , (cast_expression "(char *)(unaff_EDI + 0x20d75)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x20d75)" ( (binary_expression "unaff_EDI + 0x20d75" identifier + number_literal) ))) , (call_expression "(uint)(bVar1 & 0x3f)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bVar1 & 0x3f)" ( (binary_expression "bVar1 & 0x3f" identifier & number_literal) ))) , (binary_expression "*puVar9 >> 6 & 0x3f" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" * identifier) >> number_literal) & number_literal) ))) ;) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" ( (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" & identifier) + identifier) ))))) ;) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" identifier = (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) ))))) ;) (expression_statement "puVar9 = (ushort *)(local_40 * 8 + iVar11);" (assignment_expression "puVar9 = (ushort *)(local_40 * 8 + iVar11)" identifier = (cast_expression "(ushort *)(local_40 * 8 + iVar11)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40 * 8 + iVar11)" ( (binary_expression "local_40 * 8 + iVar11" (binary_expression "local_40 * 8" identifier * number_literal) + identifier) )))) ;) })) (expression_statement "iVar10 = iVar10 + -1;" (assignment_expression "iVar10 = iVar10 + -1" identifier = (binary_expression "iVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);" (assignment_expression "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + iVar10 * 8)" ( (binary_expression "iVar11 + iVar10 * 8" identifier + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8)" identifier = (pointer_expression "*(undefined4 *)(iVar11 + 4 + iVar10 * 8)" * (cast_expression "(undefined4 *)(iVar11 + 4 + iVar10 * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 4 + iVar10 * 8)" ( (binary_expression "iVar11 + 4 + iVar10 * 8" (binary_expression "iVar11 + 4" identifier + number_literal) + (binary_expression "iVar10 * 8" identifier * number_literal)) ))))) ;) (expression_statement "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;" (assignment_expression "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10" (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" * (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" ( (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" & identifier) + identifier) )))) = identifier) ;) (expression_statement "*(undefined4 *)puVar9 = uVar3;" (assignment_expression "*(undefined4 *)puVar9 = uVar3" (pointer_expression "*(undefined4 *)puVar9" * (cast_expression "(undefined4 *)puVar9" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(undefined4 *)(puVar9 + 2) = uVar4;" (assignment_expression "*(undefined4 *)(puVar9 + 2) = uVar4" (pointer_expression "*(undefined4 *)(puVar9 + 2)" * (cast_expression "(undefined4 *)(puVar9 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 2)" ( (binary_expression "puVar9 + 2" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT & LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> IDENT) | (binary_expression IDENT << (binary_expression LIT - IDENT)))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) >> LIT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT & LIT) ))) , (binary_expression (binary_expression (pointer_expression * IDENT) >> LIT) & LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + IDENT) )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) while (parenthesized_expression ( BOOL )) ;)) })))
(function_definition "void FUN_000409a0(uint param_1,uint param_2)\n\n{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" (primitive_type "void") (function_declarator "FUN_000409a0(uint param_1,uint param_2)" (identifier "FUN_000409a0") (parameter_list "(uint param_1,uint param_2)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  byte bVar1;\n  undefined4 *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  byte bVar5;\n  byte bVar6;\n  uint uVar7;\n  uint uVar8;\n  ushort *puVar9;\n  int iVar10;\n  int iVar11;\n  int unaff_EDI;\n  undefined8 uVar12;\n  int local_40;\n  \n  uVar12 = FUN_0001d669();\n  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);\n  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);\n  local_40 = 0;\njoined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "byte bVar5;" (type_identifier "byte") (identifier "bVar5") (; ";")) (declaration "byte bVar6;" (type_identifier "byte") (identifier "bVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "ushort *puVar9;" (type_identifier "ushort") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "undefined8 uVar12;" (type_identifier "undefined8") (identifier "uVar12") (; ";")) (declaration "int local_40;" (primitive_type "int") (identifier "local_40") (; ";")) (expression_statement "uVar12 = FUN_0001d669();" (assignment_expression "uVar12 = FUN_0001d669()" (identifier "uVar12") (= "=") (call_expression "FUN_0001d669()" (identifier "FUN_0001d669") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar8 = (uint)((ulonglong)uVar12 >> 0x20);" (assignment_expression "uVar8 = (uint)((ulonglong)uVar12 >> 0x20)" (identifier "uVar8") (= "=") (call_expression "(uint)((ulonglong)uVar12 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar12 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar12 >> 0x20" (cast_expression "(ulonglong)uVar12" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar12")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" (identifier "iVar10") (= "=") (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" (* "*") (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" (( "(") (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" (& "&") (identifier "DAT_00046d55")) (+ "+") (identifier "unaff_EDI")) () ")"))))) (; ";")) (expression_statement "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);" (assignment_expression "puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined4 **)(unaff_EDI + 0x3d5c1)" (* "*") (cast_expression "(undefined4 **)(unaff_EDI + 0x3d5c1)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EDI + 0x3d5c1)" (( "(") (binary_expression "unaff_EDI + 0x3d5c1" (identifier "unaff_EDI") (+ "+") (number_literal "0x3d5c1")) () ")"))))) (; ";")) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";")) (labeled_statement "joined_r0x000409f4:\n  do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" (statement_identifier "joined_r0x000409f4") (: ":") (do_statement "do {\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  } while( true );" (do "do") (compound_statement "{\n    if (iVar10 <= local_40) {\n      return;\n    }\n    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n    puVar9 = (ushort *)(iVar11 + local_40 * 8);\n    bVar1 = (byte)*puVar9;\n    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);\n    if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }\n    if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }\n    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }\n    iVar10 = iVar10 + -1;\n    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);\n    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);\n    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;\n    *(undefined4 *)puVar9 = uVar3;\n    *(undefined4 *)(puVar9 + 2) = uVar4;\n  }" ({ "{") (if_statement "if (iVar10 <= local_40) {\n      return;\n    }" (if "if") (parenthesized_expression "(iVar10 <= local_40)" (( "(") (binary_expression "iVar10 <= local_40" (identifier "iVar10") (<= "<=") (identifier "local_40")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" (identifier "iVar11") (= "=") (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" (* "*") (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" (( "(") (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" (& "&") (identifier "DAT_00046d59")) (+ "+") (identifier "unaff_EDI")) () ")"))))) (; ";")) (expression_statement "puVar9 = (ushort *)(iVar11 + local_40 * 8);" (assignment_expression "puVar9 = (ushort *)(iVar11 + local_40 * 8)" (identifier "puVar9") (= "=") (cast_expression "(ushort *)(iVar11 + local_40 * 8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + local_40 * 8)" (( "(") (binary_expression "iVar11 + local_40 * 8" (identifier "iVar11") (+ "+") (binary_expression "local_40 * 8" (identifier "local_40") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "bVar1 = (byte)*puVar9;" (assignment_expression "bVar1 = (byte)*puVar9" (identifier "bVar1") (= "=") (binary_expression "(byte)*puVar9" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (* "*") (identifier "puVar9"))) (; ";")) (expression_statement "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);" (assignment_expression "uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" (identifier "uVar7") (= "=") (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f)" (binary_expression "(uint)uVar12 >> (bVar1 & 0x1f)" (cast_expression "(uint)uVar12" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar12")) (>> ">>") (parenthesized_expression "(bVar1 & 0x1f)" (( "(") (binary_expression "bVar1 & 0x1f" (identifier "bVar1") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar8 << 0x20 - (bVar1 & 0x1f)" (identifier "uVar8") (<< "<<") (binary_expression "0x20 - (bVar1 & 0x1f)" (number_literal "0x20") (- "-") (parenthesized_expression "(bVar1 & 0x1f)" (( "(") (binary_expression "bVar1 & 0x1f" (identifier "bVar1") (& "&") (number_literal "0x1f")) () ")")))))) (; ";")) (if_statement "if ((bVar1 & 0x20) != 0) {\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" (if "if") (parenthesized_expression "((bVar1 & 0x20) != 0)" (( "(") (binary_expression "(bVar1 & 0x20) != 0" (parenthesized_expression "(bVar1 & 0x20)" (( "(") (binary_expression "bVar1 & 0x20" (identifier "bVar1") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar7 = uVar8 >> (bVar1 & 0x1f);\n    }" ({ "{") (expression_statement "uVar7 = uVar8 >> (bVar1 & 0x1f);" (assignment_expression "uVar7 = uVar8 >> (bVar1 & 0x1f)" (identifier "uVar7") (= "=") (binary_expression "uVar8 >> (bVar1 & 0x1f)" (identifier "uVar8") (>> ">>") (parenthesized_expression "(bVar1 & 0x1f)" (( "(") (binary_expression "bVar1 & 0x1f" (identifier "bVar1") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}"))) (if_statement "if ((uVar7 & 1) == 0) {\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" (if "if") (parenthesized_expression "((uVar7 & 1) == 0)" (( "(") (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" (( "(") (binary_expression "uVar7 & 1" (identifier "uVar7") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      bVar6 = (byte)(*puVar9 >> 6);\n      bVar5 = bVar6 & 0x1f;\n      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;\n      if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }\n      if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }\n    }" ({ "{") (expression_statement "bVar6 = (byte)(*puVar9 >> 6);" (assignment_expression "bVar6 = (byte)(*puVar9 >> 6)" (identifier "bVar6") (= "=") (call_expression "(byte)(*puVar9 >> 6)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*puVar9 >> 6)" (( "(") (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (>> ">>") (number_literal "6")) () ")")))) (; ";")) (expression_statement "bVar5 = bVar6 & 0x1f;" (assignment_expression "bVar5 = bVar6 & 0x1f" (identifier "bVar5") (= "=") (binary_expression "bVar6 & 0x1f" (identifier "bVar6") (& "&") (number_literal "0x1f"))) (; ";")) (expression_statement "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;" (assignment_expression "uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5" (identifier "uVar7") (= "=") (binary_expression "param_1 >> bVar5 | param_2 << 0x20 - bVar5" (binary_expression "param_1 >> bVar5" (identifier "param_1") (>> ">>") (identifier "bVar5")) (| "|") (binary_expression "param_2 << 0x20 - bVar5" (identifier "param_2") (<< "<<") (binary_expression "0x20 - bVar5" (number_literal "0x20") (- "-") (identifier "bVar5"))))) (; ";")) (if_statement "if ((*puVar9 >> 6 & 0x20) != 0) {\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" (if "if") (parenthesized_expression "((*puVar9 >> 6 & 0x20) != 0)" (( "(") (binary_expression "(*puVar9 >> 6 & 0x20) != 0" (parenthesized_expression "(*puVar9 >> 6 & 0x20)" (( "(") (binary_expression "*puVar9 >> 6 & 0x20" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (>> ">>") (number_literal "6")) (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = param_2 >> (bVar6 & 0x1f);\n      }" ({ "{") (expression_statement "uVar7 = param_2 >> (bVar6 & 0x1f);" (assignment_expression "uVar7 = param_2 >> (bVar6 & 0x1f)" (identifier "uVar7") (= "=") (binary_expression "param_2 >> (bVar6 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(bVar6 & 0x1f)" (( "(") (binary_expression "bVar6 & 0x1f" (identifier "bVar6") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}"))) (if_statement "if ((uVar7 & 1) == 0) {\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" (if "if") (parenthesized_expression "((uVar7 & 1) == 0)" (( "(") (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" (( "(") (binary_expression "uVar7 & 1" (identifier "uVar7") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        local_40 = local_40 + 1;\n        goto joined_r0x000409f4;\n      }" ({ "{") (expression_statement "local_40 = local_40 + 1;" (assignment_expression "local_40 = local_40 + 1" (identifier "local_40") (= "=") (binary_expression "local_40 + 1" (identifier "local_40") (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto joined_r0x000409f4;" (goto "goto") (statement_identifier "joined_r0x000409f4") (; ";")) (} "}"))) (} "}"))) (if_statement "if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" (if "if") (parenthesized_expression "((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0)" (( "(") (binary_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0" (parenthesized_expression "(*(byte *)(unaff_EDI + 0x46fc9) & 2)" (( "(") (binary_expression "*(byte *)(unaff_EDI + 0x46fc9) & 2" (pointer_expression "*(byte *)(unaff_EDI + 0x46fc9)" (* "*") (cast_expression "(byte *)(unaff_EDI + 0x46fc9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x46fc9)" (( "(") (binary_expression "unaff_EDI + 0x46fc9" (identifier "unaff_EDI") (+ "+") (number_literal "0x46fc9")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );\n      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);\n      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);\n      puVar9 = (ushort *)(local_40 * 8 + iVar11);\n    }" ({ "{") (expression_statement "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             );" (call_expression "fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" (identifier "fprintf") (argument_list "((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f\n             )" (( "(") (cast_expression "(FILE *)*puVar2" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (, ",") (cast_expression "(char *)(unaff_EDI + 0x20d75)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x20d75)" (( "(") (binary_expression "unaff_EDI + 0x20d75" (identifier "unaff_EDI") (+ "+") (number_literal "0x20d75")) () ")"))) (, ",") (call_expression "(uint)(bVar1 & 0x3f)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(bVar1 & 0x3f)" (( "(") (binary_expression "bVar1 & 0x3f" (identifier "bVar1") (& "&") (number_literal "0x3f")) () ")"))) (, ",") (binary_expression "*puVar9 >> 6 & 0x3f" (binary_expression "*puVar9 >> 6" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (>> ">>") (number_literal "6")) (& "&") (number_literal "0x3f")) () ")"))) (; ";")) (expression_statement "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);" (assignment_expression "iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI)" (identifier "iVar11") (= "=") (pointer_expression "*(int *)(&DAT_00046d59 + unaff_EDI)" (* "*") (cast_expression "(int *)(&DAT_00046d59 + unaff_EDI)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00046d59 + unaff_EDI)" (( "(") (binary_expression "&DAT_00046d59 + unaff_EDI" (pointer_expression "&DAT_00046d59" (& "&") (identifier "DAT_00046d59")) (+ "+") (identifier "unaff_EDI")) () ")"))))) (; ";")) (expression_statement "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);" (assignment_expression "iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI)" (identifier "iVar10") (= "=") (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" (* "*") (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" (( "(") (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" (& "&") (identifier "DAT_00046d55")) (+ "+") (identifier "unaff_EDI")) () ")"))))) (; ";")) (expression_statement "puVar9 = (ushort *)(local_40 * 8 + iVar11);" (assignment_expression "puVar9 = (ushort *)(local_40 * 8 + iVar11)" (identifier "puVar9") (= "=") (cast_expression "(ushort *)(local_40 * 8 + iVar11)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40 * 8 + iVar11)" (( "(") (binary_expression "local_40 * 8 + iVar11" (binary_expression "local_40 * 8" (identifier "local_40") (* "*") (number_literal "8")) (+ "+") (identifier "iVar11")) () ")")))) (; ";")) (} "}"))) (expression_statement "iVar10 = iVar10 + -1;" (assignment_expression "iVar10 = iVar10 + -1" (identifier "iVar10") (= "=") (binary_expression "iVar10 + -1" (identifier "iVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);" (assignment_expression "uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(iVar11 + iVar10 * 8)" (* "*") (cast_expression "(undefined4 *)(iVar11 + iVar10 * 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + iVar10 * 8)" (( "(") (binary_expression "iVar11 + iVar10 * 8" (identifier "iVar11") (+ "+") (binary_expression "iVar10 * 8" (identifier "iVar10") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);" (assignment_expression "uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined4 *)(iVar11 + 4 + iVar10 * 8)" (* "*") (cast_expression "(undefined4 *)(iVar11 + 4 + iVar10 * 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 4 + iVar10 * 8)" (( "(") (binary_expression "iVar11 + 4 + iVar10 * 8" (binary_expression "iVar11 + 4" (identifier "iVar11") (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar10 * 8" (identifier "iVar10") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;" (assignment_expression "*(int *)(&DAT_00046d55 + unaff_EDI) = iVar10" (pointer_expression "*(int *)(&DAT_00046d55 + unaff_EDI)" (* "*") (cast_expression "(int *)(&DAT_00046d55 + unaff_EDI)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00046d55 + unaff_EDI)" (( "(") (binary_expression "&DAT_00046d55 + unaff_EDI" (pointer_expression "&DAT_00046d55" (& "&") (identifier "DAT_00046d55")) (+ "+") (identifier "unaff_EDI")) () ")")))) (= "=") (identifier "iVar10")) (; ";")) (expression_statement "*(undefined4 *)puVar9 = uVar3;" (assignment_expression "*(undefined4 *)puVar9 = uVar3" (pointer_expression "*(undefined4 *)puVar9" (* "*") (cast_expression "(undefined4 *)puVar9" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar9"))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(undefined4 *)(puVar9 + 2) = uVar4;" (assignment_expression "*(undefined4 *)(puVar9 + 2) = uVar4" (pointer_expression "*(undefined4 *)(puVar9 + 2)" (* "*") (cast_expression "(undefined4 *)(puVar9 + 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 2)" (( "(") (binary_expression "puVar9 + 2" (identifier "puVar9") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}")))

void function_1(type_1 var_3,type_1 p2_mask)

{
  type_2 var_8;
  type_3 *puVar2;
  type_3 uVar3;
  type_3 uVar4;
  type_2 var_13;
  type_2 var_11;
  type_4 var_10;
  type_4 var_9;
  type_5 *var_7;
  int var_4;
  int var_6;
  int var_2;
  type_6 uVar12;
  int var_5;
  type_4 var_12;
  type_4 var_14;
  
  uVar12 = var_1();
  var_9 = (type_4)((type_7)uVar12 >> 0x20);
  var_4 = *(int *)(var_2 + 0x46d55);
  puVar2 = *(type_3 **)(var_2 + 0x3d5c1);
  var_5 = 0;
  do {
    var_14 = (type_4)(var_3 >> 0x20);
    var_12 = (type_4)var_3;
    while( true ) {
      if (var_4 <= var_5) {
        return;
      }
      var_6 = *(int *)(var_2 + 0x46d59);
      var_7 = (type_5 *)(var_6 + var_5 * 8);
      var_8 = (type_2)*var_7;
      var_10 = (type_4)uVar12 >> (var_8 & 0x1f) | var_9 << 0x20 - (var_8 & 0x1f);
      if ((var_8 & 0x20) != 0) {
        var_10 = var_9 >> (var_8 & 0x1f);
      }
      if ((var_10 & 1) != 0) break;
      var_11 = (type_2)(*var_7 >> 6);
      var_13 = var_11 & 0x1f;
      var_10 = var_12 >> var_13 | var_14 << 0x20 - var_13;
      if ((*var_7 >> 6 & 0x20) != 0) {
        var_10 = var_14 >> (var_11 & 0x1f);
      }
      if ((var_10 & 1) != 0) break;
      var_5 = var_5 + 1;
    }
    if ((*(type_2 *)(var_2 + 0x46fc9) & 2) != 0) {
      var_15((type_8 *)*puVar2,(char *)(var_2 + 0x20d75),(type_4)(var_8 & 0x3f),*var_7 >> 6 & 0x3f
             );
      var_6 = *(int *)(var_2 + 0x46d59);
      var_4 = *(int *)(var_2 + 0x46d55);
      var_7 = (type_5 *)(var_5 * 8 + var_6);
    }
    var_4 = var_4 + -1;
    uVar3 = *(type_3 *)(var_6 + var_4 * 8);
    uVar4 = *(type_3 *)(var_6 + 4 + var_4 * 8);
    *(int *)(var_2 + 0x46d55) = var_4;
    *(type_3 *)var_7 = uVar3;
    *(type_3 *)(var_7 + 2) = uVar4;
  } while( true );
}


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

void MASKED(uint param_1,uint param_2)

{
  byte bVar1;
  undefined4 *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  byte bVar5;
  byte bVar6;
  uint uVar7;
  uint uVar8;
  ushort *puVar9;
  int iVar10;
  int iVar11;
  int unaff_EDI;
  undefined8 uVar12;
  int local_40;
  
  uVar12 = FUN_0001d669();
  uVar8 = (uint)((ulonglong)uVar12 >> 0x20);
  iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);
  puVar2 = *(undefined4 **)(unaff_EDI + 0x3d5c1);
  local_40 = 0;
joined_r0x000409f4:
  do {
    if (iVar10 <= local_40) {
      return;
    }
    iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);
    puVar9 = (ushort *)(iVar11 + local_40 * 8);
    bVar1 = (byte)*puVar9;
    uVar7 = (uint)uVar12 >> (bVar1 & 0x1f) | uVar8 << 0x20 - (bVar1 & 0x1f);
    if ((bVar1 & 0x20) != 0) {
      uVar7 = uVar8 >> (bVar1 & 0x1f);
    }
    if ((uVar7 & 1) == 0) {
      bVar6 = (byte)(*puVar9 >> 6);
      bVar5 = bVar6 & 0x1f;
      uVar7 = param_1 >> bVar5 | param_2 << 0x20 - bVar5;
      if ((*puVar9 >> 6 & 0x20) != 0) {
        uVar7 = param_2 >> (bVar6 & 0x1f);
      }
      if ((uVar7 & 1) == 0) {
        local_40 = local_40 + 1;
        goto joined_r0x000409f4;
      }
    }
    if ((*(byte *)(unaff_EDI + 0x46fc9) & 2) != 0) {
      fprintf((FILE *)*puVar2,(char *)(unaff_EDI + 0x20d75),(uint)(bVar1 & 0x3f),*puVar9 >> 6 & 0x3f
             );
      iVar11 = *(int *)(&DAT_00046d59 + unaff_EDI);
      iVar10 = *(int *)(&DAT_00046d55 + unaff_EDI);
      puVar9 = (ushort *)(local_40 * 8 + iVar11);
    }
    iVar10 = iVar10 + -1;
    uVar3 = *(undefined4 *)(iVar11 + iVar10 * 8);
    uVar4 = *(undefined4 *)(iVar11 + 4 + iVar10 * 8);
    *(int *)(&DAT_00046d55 + unaff_EDI) = iVar10;
    *(undefined4 *)puVar9 = uVar3;
    *(undefined4 *)(puVar9 + 2) = uVar4;
  } while( true );
}

