
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long unsigned int, long
   unsigned int>*, std::vector<std::pair<long unsigned int, long unsigned int>,
   std::allocator<std::pair<long unsigned int, long unsigned int> > > >, long int, std::pair<long
   unsigned int, long unsigned int>,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64> > > */

void std::
     __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long_unsigned_int,_long_unsigned_int>*,_std::vector<std::pair<long_unsigned_int,_long_unsigned_int>,_std::allocator<std::pair<long_unsigned_int,_long_unsigned_int>_>_>_>,_long_int,_std::pair<long_unsigned_int,_long_unsigned_int>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64>_>_>
               (long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  ulong *puVar4;
  long lVar5;
  long __topIndex;
  ulong *puVar6;
  long lVar7;
  ulong *puVar8;
  ulong uVar9;
  
  lVar5 = (long)(__len - 1) / 2;
  lVar7 = __holeIndex;
  if (__holeIndex < lVar5) {
    do {
      lVar2 = (lVar7 + 1) * 2;
      lVar3 = lVar2 + -1;
      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);
      uVar1 = *puVar6;
      puVar8 = (ulong *)(lVar3 * 0x10 + __first);
      uVar9 = *puVar8;
      if (uVar9 <= uVar1) {
        lVar3 = lVar2;
        puVar8 = puVar6;
        uVar9 = uVar1;
      }
      puVar6 = (ulong *)(lVar7 * 0x10 + __first);
      *puVar6 = uVar9;
      puVar6[1] = puVar8[1];
      lVar7 = lVar3;
    } while (lVar3 < lVar5);
    if ((__len & 1) == 0) goto LAB_0027bf38;
  }
  else {
    puVar8 = (ulong *)(__holeIndex * 0x10 + __first);
    lVar3 = __holeIndex;
    if ((__len & 1) != 0) goto LAB_0027bf0a;
LAB_0027bf38:
    if ((long)(__len - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      puVar6 = (ulong *)(lVar3 * 0x10 + __first);
      *puVar8 = *puVar6;
      puVar8[1] = puVar6[1];
      puVar8 = puVar6;
    }
  }
  lVar7 = (lVar3 + -1) / 2;
  if (__holeIndex < lVar3) {
    puVar6 = (ulong *)(lVar7 * 0x10 + __first);
    uVar1 = *puVar6;
    while (lVar5 = lVar7, uVar1 < param_4) {
      puVar4 = (ulong *)(lVar3 * 0x10 + __first);
      *puVar4 = uVar1;
      puVar8 = (ulong *)(lVar5 * 0x10 + __first);
      puVar4[1] = puVar6[1];
      lVar7 = (lVar5 + -1) / 2;
      if (lVar5 <= __holeIndex) break;
      puVar6 = (ulong *)(lVar7 * 0x10 + __first);
      lVar3 = lVar5;
      uVar1 = *puVar6;
    }
  }
LAB_0027bf0a:
  *puVar8 = param_4;
  puVar8[1] = param_5;
  return;
}



void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  ulong *puVar4;
  long lVar5;
  ulong *puVar6;
  long lVar7;
  ulong *puVar8;
  ulong uVar9;
  
  lVar5 = (long)(param_3 - 1) / 2;
  lVar7 = param_2;
  if (param_2 < lVar5) {
    do {
      lVar2 = (lVar7 + 1) * 2;
      lVar3 = lVar2 + -1;
      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);
      uVar1 = *puVar6;
      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);
      uVar9 = *puVar8;
      if (uVar9 <= uVar1) {
        lVar3 = lVar2;
        puVar8 = puVar6;
        uVar9 = uVar1;
      }
      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
      *puVar6 = uVar9;
      puVar6[1] = puVar8[1];
      lVar7 = lVar3;
    } while (lVar3 < lVar5);
    if ((param_3 & 1) == 0) goto LAB_0027bf38;
  }
  else {
    puVar8 = (ulong *)(param_2 * 0x10 + param_1);
    lVar3 = param_2;
    if ((param_3 & 1) != 0) goto LAB_0027bf0a;
LAB_0027bf38:
    if ((long)(param_3 - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);
      *puVar8 = *puVar6;
      puVar8[1] = puVar6[1];
      puVar8 = puVar6;
    }
  }
  lVar7 = (lVar3 + -1) / 2;
  if (param_2 < lVar3) {
    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
    uVar1 = *puVar6;
    while (lVar5 = lVar7, uVar1 < param_4) {
      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);
      *puVar4 = uVar1;
      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);
      puVar4[1] = puVar6[1];
      lVar7 = (lVar5 + -1) / 2;
      if (lVar5 <= param_2) break;
      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
      lVar3 = lVar5;
      uVar1 = *puVar6;
    }
  }
LAB_0027bf0a:
  *puVar8 = param_4;
  puVar8[1] = param_5;
  return;
}


LEA RAX,[RDX + -0x1]
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RAX
AND EBP,0x1
SHR RBX,0x3f
ADD RBX,RAX
SAR RBX,0x1
CMP RSI,RBX
JGE 0x0027bf20
MOV R9,RSI
NOP dword ptr [RAX + RAX*0x1]
LEA R10,[R9 + 0x1]
LEA R13,[R10 + R10*0x1]
SHL R10,0x5
LEA RAX,[R13 + -0x1]
ADD R10,RDI
MOV R11,RAX
MOV R14,qword ptr [R10]
SHL R11,0x4
ADD R11,RDI
MOV R12,qword ptr [R11]
CMP R12,R14
JA 0x0027be71
MOV R11,R10
MOV R12,R14
MOV RAX,R13
SHL R9,0x4
ADD R9,RDI
MOV qword ptr [R9],R12
MOV R10,qword ptr [R11 + 0x8]
MOV qword ptr [R9 + 0x8],R10
MOV R9,RAX
CMP RAX,RBX
JL 0x0027be40
TEST RBP,RBP
JZ 0x0027bf38
LEA RDX,[RAX + -0x1]
MOV R10,RDX
SHR R10,0x3f
ADD R10,RDX
SAR R10,0x1
CMP RAX,RSI
JLE 0x0027bf0a
MOV R9,R10
SHL R9,0x4
ADD R9,RDI
MOV RBX,qword ptr [R9]
CMP RBX,RCX
JC 0x0027bed8
JMP 0x0027bf0a
MOV R9,RDX
MOV RAX,R10
MOV R10,RDX
SHL R9,0x4
ADD R9,RDI
MOV RBX,qword ptr [R9]
CMP RBX,RCX
JNC 0x0027bf0a
SHL RAX,0x4
MOV R11,R10
ADD RAX,RDI
SHL R11,0x4
MOV qword ptr [RAX],RBX
MOV RDX,qword ptr [R9 + 0x8]
ADD R11,RDI
MOV qword ptr [RAX + 0x8],RDX
LEA RAX,[R10 + -0x1]
MOV RDX,RAX
SHR RDX,0x3f
ADD RDX,RAX
SAR RDX,0x1
CMP RSI,R10
JL 0x0027bec0
MOV qword ptr [R11],RCX
MOV qword ptr [R11 + 0x8],R8
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV R11,RSI
SHL R11,0x4
ADD R11,RDI
TEST RBP,RBP
JNZ 0x0027bf0a
MOV RAX,RSI
NOP word ptr [RAX + RAX*0x1]
LEA R9,[RDX + -0x2]
MOV RDX,R9
SHR RDX,0x3f
ADD RDX,R9
SAR RDX,0x1
CMP RDX,RAX
JNZ 0x0027be94
LEA RAX,[RAX + RAX*0x1 + 0x1]
MOV RDX,RAX
SHL RDX,0x4
ADD RDX,RDI
MOV R9,qword ptr [RDX]
MOV qword ptr [R11],R9
MOV R9,qword ptr [RDX + 0x8]
MOV qword ptr [R11 + 0x8],R9
MOV R11,RDX
JMP 0x0027be94
(translation_unit "void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}\n\n" (function_definition "void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" primitive_type (function_declarator "FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" identifier (parameter_list "(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "lVar5 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar5 = (long)(param_3 - 1) / 2" identifier = (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" identifier = identifier) ;) (if_statement "if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar5)" ( (binary_expression "param_2 < lVar5" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }" { (do_statement "do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);" do (compound_statement "{\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    }" { (expression_statement "lVar2 = (lVar7 + 1) * 2;" (assignment_expression "lVar2 = (lVar7 + 1) * 2" identifier = (binary_expression "(lVar7 + 1) * 2" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = lVar2 + -1;" (assignment_expression "lVar3 = lVar2 + -1" identifier = (binary_expression "lVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);" (assignment_expression "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1)" identifier = (cast_expression "(ulong *)((lVar7 + 1) * 0x20 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((lVar7 + 1) * 0x20 + param_1)" ( (binary_expression "(lVar7 + 1) * 0x20 + param_1" (binary_expression "(lVar7 + 1) * 0x20" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar9 = *puVar8;" (assignment_expression "uVar9 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (if_statement "if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" if (parenthesized_expression "(uVar9 <= uVar1)" ( (binary_expression "uVar9 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" { (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" identifier = identifier) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" identifier = identifier) ;) })) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar6 = uVar9;" (assignment_expression "*puVar6 = uVar9" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "puVar6[1] = puVar8[1];" (assignment_expression "puVar6[1] = puVar8[1]" (subscript_expression "puVar6[1]" identifier [ number_literal ]) = (subscript_expression "puVar8[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = lVar3;" (assignment_expression "lVar7 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar5)" ( (binary_expression "lVar3 < lVar5" identifier < identifier) )) ;) (if_statement "if ((param_3 & 1) == 0) goto LAB_0027bf38;" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0027bf38;" goto statement_identifier ;)) }) (else_clause "else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" else (compound_statement "{\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" { (expression_statement "puVar8 = (ulong *)(param_2 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(param_2 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(param_2 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 * 0x10 + param_1)" ( (binary_expression "param_2 * 0x10 + param_1" (binary_expression "param_2 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" identifier = identifier) ;) (if_statement "if ((param_3 & 1) != 0) goto LAB_0027bf0a;" if (parenthesized_expression "((param_3 & 1) != 0)" ( (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0027bf0a;" goto statement_identifier ;)) (labeled_statement "LAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" statement_identifier : (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" if (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" ( (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 2)" ( (binary_expression "param_3 - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "puVar6 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8[1] = puVar6[1];" (assignment_expression "puVar8[1] = puVar6[1]" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) }))) }))) (expression_statement "lVar7 = (lVar3 + -1) / 2;" (assignment_expression "lVar7 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar3)" ( (binary_expression "param_2 < lVar3" identifier < identifier) )) (compound_statement "{\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" { (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (while_statement "while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" while (parenthesized_expression "(lVar5 = lVar7, uVar1 < param_4)" ( (comma_expression "lVar5 = lVar7, uVar1 < param_4" (assignment_expression "lVar5 = lVar7" identifier = identifier) , (binary_expression "uVar1 < param_4" identifier < identifier)) )) (compound_statement "{\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" { (expression_statement "puVar4 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar4 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar8 = (ulong *)(lVar5 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar5 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar5 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 * 0x10 + param_1)" ( (binary_expression "lVar5 * 0x10 + param_1" (binary_expression "lVar5 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "puVar4[1] = puVar6[1];" (assignment_expression "puVar4[1] = puVar6[1]" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = (lVar5 + -1) / 2;" (assignment_expression "lVar7 = (lVar5 + -1) / 2" identifier = (binary_expression "(lVar5 + -1) / 2" (parenthesized_expression "(lVar5 + -1)" ( (binary_expression "lVar5 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (lVar5 <= param_2) break;" if (parenthesized_expression "(lVar5 <= param_2)" ( (binary_expression "lVar5 <= param_2" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" identifier = identifier) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) })) (labeled_statement "LAB_0027bf0a:\n  *puVar8 = param_4;" statement_identifier : (expression_statement "*puVar8 = param_4;" (assignment_expression "*puVar8 = param_4" (pointer_expression "*puVar8" * identifier) = identifier) ;)) (expression_statement "puVar8[1] = param_5;" (assignment_expression "puVar8[1] = param_5" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name: __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long unsigned int, long\n   unsigned int>*, std::vector<std::pair<long unsigned int, long unsigned int>,\n   std::allocator<std::pair<long unsigned int, long unsigned int> > > >, long int, std::pair<long\n   unsigned int, long unsigned int>,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64> > > */\n\nvoid std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long_unsigned_int,_long_unsigned_int>*,_std::vector<std::pair<long_unsigned_int,_long_unsigned_int>,_std::allocator<std::pair<long_unsigned_int,_long_unsigned_int>_>_>_>,_long_int,_std::pair<long_unsigned_int,_long_unsigned_int>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64>_>_>\n               (long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  long __topIndex;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(__len - 1) / 2;\n  lVar7 = __holeIndex;\n  if (__holeIndex < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + __first);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((__len & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(__holeIndex * 0x10 + __first);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (__holeIndex < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + __first);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= __holeIndex) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}\n\n" comment comment (declaration "void std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long_unsigned_int,_long_unsigned_int>*,_std::vector<std::pair<long_unsigned_int,_long_unsigned_int>,_std::allocator<std::pair<long_unsigned_int,_long_unsigned_int>_>_>_>,_long_int,_std::pair<long_unsigned_int,_long_unsigned_int>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64>_>_>\n               (long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;" primitive_type (ERROR "std::\n     __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<" identifier : : identifier < identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">*" > *) , (ERROR "_std::vector<std::pair<" identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">" >) , (ERROR "_std::allocator<std::pair<" identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">_>_>_>" > identifier > identifier > identifier >) , identifier , (ERROR "_std::pair<" identifier : : identifier <) identifier , identifier (ERROR ">" >) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64>_>_>\n               (long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)\n\n{\n  ulong" identifier : : identifier : : identifier < identifier : : identifier : : identifier < number_literal > identifier > (function_declarator "_>\n               (long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)" identifier (ERROR ">" >) (parameter_list "(long __first,long __holeIndex,ulong __len,ulong param_4,ulong param_5)" ( (parameter_declaration "long __first" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long __holeIndex" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong __len" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) { identifier) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long __topIndex;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "lVar5 = (long)(__len - 1) / 2;" (assignment_expression "lVar5 = (long)(__len - 1) / 2" identifier = (binary_expression "(long)(__len - 1) / 2" (cast_expression "(long)(__len - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__len - 1)" ( (binary_expression "__len - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar7 = __holeIndex;" (assignment_expression "lVar7 = __holeIndex" identifier = identifier) ;) (if_statement "if (__holeIndex < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + __first);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((__len & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(__holeIndex * 0x10 + __first);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" if (parenthesized_expression "(__holeIndex < lVar5)" ( (binary_expression "__holeIndex < lVar5" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + __first);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((__len & 1) == 0) goto LAB_0027bf38;\n  }" { (do_statement "do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + __first);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);" do (compound_statement "{\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + __first);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    }" { (expression_statement "lVar2 = (lVar7 + 1) * 2;" (assignment_expression "lVar2 = (lVar7 + 1) * 2" identifier = (binary_expression "(lVar7 + 1) * 2" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = lVar2 + -1;" (assignment_expression "lVar3 = lVar2 + -1" identifier = (binary_expression "lVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first);" (assignment_expression "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + __first)" identifier = (cast_expression "(ulong *)((lVar7 + 1) * 0x20 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((lVar7 + 1) * 0x20 + __first)" ( (binary_expression "(lVar7 + 1) * 0x20 + __first" (binary_expression "(lVar7 + 1) * 0x20" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8 = (ulong *)(lVar3 * 0x10 + __first);" (assignment_expression "puVar8 = (ulong *)(lVar3 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + __first)" ( (binary_expression "lVar3 * 0x10 + __first" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar9 = *puVar8;" (assignment_expression "uVar9 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (if_statement "if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" if (parenthesized_expression "(uVar9 <= uVar1)" ( (binary_expression "uVar9 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" { (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" identifier = identifier) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" identifier = identifier) ;) })) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + __first);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + __first)" ( (binary_expression "lVar7 * 0x10 + __first" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar6 = uVar9;" (assignment_expression "*puVar6 = uVar9" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "puVar6[1] = puVar8[1];" (assignment_expression "puVar6[1] = puVar8[1]" (subscript_expression "puVar6[1]" identifier [ number_literal ]) = (subscript_expression "puVar8[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = lVar3;" (assignment_expression "lVar7 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar5)" ( (binary_expression "lVar3 < lVar5" identifier < identifier) )) ;) (if_statement "if ((__len & 1) == 0) goto LAB_0027bf38;" if (parenthesized_expression "((__len & 1) == 0)" ( (binary_expression "(__len & 1) == 0" (parenthesized_expression "(__len & 1)" ( (binary_expression "__len & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0027bf38;" goto statement_identifier ;)) }) (else_clause "else {\n    puVar8 = (ulong *)(__holeIndex * 0x10 + __first);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" else (compound_statement "{\n    puVar8 = (ulong *)(__holeIndex * 0x10 + __first);\n    lVar3 = __holeIndex;\n    if ((__len & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" { (expression_statement "puVar8 = (ulong *)(__holeIndex * 0x10 + __first);" (assignment_expression "puVar8 = (ulong *)(__holeIndex * 0x10 + __first)" identifier = (cast_expression "(ulong *)(__holeIndex * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__holeIndex * 0x10 + __first)" ( (binary_expression "__holeIndex * 0x10 + __first" (binary_expression "__holeIndex * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = __holeIndex;" (assignment_expression "lVar3 = __holeIndex" identifier = identifier) ;) (if_statement "if ((__len & 1) != 0) goto LAB_0027bf0a;" if (parenthesized_expression "((__len & 1) != 0)" ( (binary_expression "(__len & 1) != 0" (parenthesized_expression "(__len & 1)" ( (binary_expression "__len & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0027bf0a;" goto statement_identifier ;)) (labeled_statement "LAB_0027bf38:\n    if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" statement_identifier : (if_statement "if ((long)(__len - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" if (parenthesized_expression "((long)(__len - 2) / 2 == lVar3)" ( (binary_expression "(long)(__len - 2) / 2 == lVar3" (binary_expression "(long)(__len - 2) / 2" (cast_expression "(long)(__len - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(__len - 2)" ( (binary_expression "__len - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "puVar6 = (ulong *)(lVar3 * 0x10 + __first);" (assignment_expression "puVar6 = (ulong *)(lVar3 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + __first)" ( (binary_expression "lVar3 * 0x10 + __first" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8[1] = puVar6[1];" (assignment_expression "puVar8[1] = puVar6[1]" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) }))) }))) (expression_statement "lVar7 = (lVar3 + -1) / 2;" (assignment_expression "lVar7 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (__holeIndex < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + __first);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= __holeIndex) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" if (parenthesized_expression "(__holeIndex < lVar3)" ( (binary_expression "__holeIndex < lVar3" identifier < identifier) )) (compound_statement "{\n    puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + __first);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= __holeIndex) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" { (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + __first);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + __first)" ( (binary_expression "lVar7 * 0x10 + __first" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (while_statement "while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + __first);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= __holeIndex) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" while (parenthesized_expression "(lVar5 = lVar7, uVar1 < param_4)" ( (comma_expression "lVar5 = lVar7, uVar1 < param_4" (assignment_expression "lVar5 = lVar7" identifier = identifier) , (binary_expression "uVar1 < param_4" identifier < identifier)) )) (compound_statement "{\n      puVar4 = (ulong *)(lVar3 * 0x10 + __first);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + __first);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= __holeIndex) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + __first);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" { (expression_statement "puVar4 = (ulong *)(lVar3 * 0x10 + __first);" (assignment_expression "puVar4 = (ulong *)(lVar3 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + __first)" ( (binary_expression "lVar3 * 0x10 + __first" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar8 = (ulong *)(lVar5 * 0x10 + __first);" (assignment_expression "puVar8 = (ulong *)(lVar5 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar5 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 * 0x10 + __first)" ( (binary_expression "lVar5 * 0x10 + __first" (binary_expression "lVar5 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "puVar4[1] = puVar6[1];" (assignment_expression "puVar4[1] = puVar6[1]" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = (lVar5 + -1) / 2;" (assignment_expression "lVar7 = (lVar5 + -1) / 2" identifier = (binary_expression "(lVar5 + -1) / 2" (parenthesized_expression "(lVar5 + -1)" ( (binary_expression "lVar5 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (lVar5 <= __holeIndex) break;" if (parenthesized_expression "(lVar5 <= __holeIndex)" ( (binary_expression "lVar5 <= __holeIndex" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + __first);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + __first)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + __first)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + __first)" ( (binary_expression "lVar7 * 0x10 + __first" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" identifier = identifier) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) })) (labeled_statement "LAB_0027bf0a:\n  *puVar8 = param_4;" statement_identifier : (expression_statement "*puVar8 = param_4;" (assignment_expression "*puVar8 = param_4" (pointer_expression "*puVar8" * identifier) = identifier) ;)) (expression_statement "puVar8[1] = param_5;" (assignment_expression "puVar8[1] = param_5" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}\n\n" (function_definition "void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" primitive_type (function_declarator "FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" identifier (parameter_list "(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "ulong param_5" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "lVar5 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar5 = (long)(param_3 - 1) / 2" identifier = (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) / number_literal)) ;) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" identifier = identifier) ;) (if_statement "if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar5)" ( (binary_expression "param_2 < lVar5" identifier < identifier) )) (compound_statement "{\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }" { (do_statement "do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);" do (compound_statement "{\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    }" { (expression_statement "lVar2 = (lVar7 + 1) * 2;" (assignment_expression "lVar2 = (lVar7 + 1) * 2" identifier = (binary_expression "(lVar7 + 1) * 2" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = lVar2 + -1;" (assignment_expression "lVar3 = lVar2 + -1" identifier = (binary_expression "lVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);" (assignment_expression "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1)" identifier = (cast_expression "(ulong *)((lVar7 + 1) * 0x20 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((lVar7 + 1) * 0x20 + param_1)" ( (binary_expression "(lVar7 + 1) * 0x20 + param_1" (binary_expression "(lVar7 + 1) * 0x20" (parenthesized_expression "(lVar7 + 1)" ( (binary_expression "lVar7 + 1" identifier + number_literal) )) * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar9 = *puVar8;" (assignment_expression "uVar9 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (if_statement "if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" if (parenthesized_expression "(uVar9 <= uVar1)" ( (binary_expression "uVar9 <= uVar1" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" { (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" identifier = identifier) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" identifier = identifier) ;) })) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar6 = uVar9;" (assignment_expression "*puVar6 = uVar9" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "puVar6[1] = puVar8[1];" (assignment_expression "puVar6[1] = puVar8[1]" (subscript_expression "puVar6[1]" identifier [ number_literal ]) = (subscript_expression "puVar8[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = lVar3;" (assignment_expression "lVar7 = lVar3" identifier = identifier) ;) }) while (parenthesized_expression "(lVar3 < lVar5)" ( (binary_expression "lVar3 < lVar5" identifier < identifier) )) ;) (if_statement "if ((param_3 & 1) == 0) goto LAB_0027bf38;" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0027bf38;" goto statement_identifier ;)) }) (else_clause "else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" else (compound_statement "{\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" { (expression_statement "puVar8 = (ulong *)(param_2 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(param_2 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(param_2 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 * 0x10 + param_1)" ( (binary_expression "param_2 * 0x10 + param_1" (binary_expression "param_2 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" identifier = identifier) ;) (if_statement "if ((param_3 & 1) != 0) goto LAB_0027bf0a;" if (parenthesized_expression "((param_3 & 1) != 0)" ( (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0027bf0a;" goto statement_identifier ;)) (labeled_statement "LAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" statement_identifier : (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" if (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" ( (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_3 - 2)" ( (binary_expression "param_3 - 2" identifier - number_literal) ))) / number_literal) == identifier) )) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" { (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" identifier = (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "puVar6 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar8[1] = puVar6[1];" (assignment_expression "puVar8[1] = puVar6[1]" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) }))) }))) (expression_statement "lVar7 = (lVar3 + -1) / 2;" (assignment_expression "lVar7 = (lVar3 + -1) / 2" identifier = (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" ( (binary_expression "lVar3 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" if (parenthesized_expression "(param_2 < lVar3)" ( (binary_expression "param_2 < lVar3" identifier < identifier) )) (compound_statement "{\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" { (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (while_statement "while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" while (parenthesized_expression "(lVar5 = lVar7, uVar1 < param_4)" ( (comma_expression "lVar5 = lVar7, uVar1 < param_4" (assignment_expression "lVar5 = lVar7" identifier = identifier) , (binary_expression "uVar1 < param_4" identifier < identifier)) )) (compound_statement "{\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" { (expression_statement "puVar4 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar4 = (ulong *)(lVar3 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 * 0x10 + param_1)" ( (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (expression_statement "puVar8 = (ulong *)(lVar5 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar5 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar5 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 * 0x10 + param_1)" ( (binary_expression "lVar5 * 0x10 + param_1" (binary_expression "lVar5 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "puVar4[1] = puVar6[1];" (assignment_expression "puVar4[1] = puVar6[1]" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = (lVar5 + -1) / 2;" (assignment_expression "lVar7 = (lVar5 + -1) / 2" identifier = (binary_expression "(lVar5 + -1) / 2" (parenthesized_expression "(lVar5 + -1)" ( (binary_expression "lVar5 + -1" identifier + number_literal) )) / number_literal)) ;) (if_statement "if (lVar5 <= param_2) break;" if (parenthesized_expression "(lVar5 <= param_2)" ( (binary_expression "lVar5 <= param_2" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" identifier = (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 * 0x10 + param_1)" ( (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" identifier * number_literal) + identifier) )))) ;) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" identifier = identifier) ;) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) })) (labeled_statement "LAB_0027bf0a:\n  *puVar8 = param_4;" statement_identifier : (expression_statement "*puVar8 = param_4;" (assignment_expression "*puVar8 = param_4" (pointer_expression "*puVar8" * identifier) = identifier) ;)) (expression_statement "puVar8[1] = param_5;" (assignment_expression "puVar8[1] = param_5" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) ))) / LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * 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 = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_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 (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (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 = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) ))) / LIT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (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 (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) / LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (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 = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < IDENT)) )) (compound_statement { (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 (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 (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) / LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) (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 = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)\n\n{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0027be10(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" (identifier "FUN_0027be10") (parameter_list "(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "ulong param_3" (type_identifier "ulong") (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) (, ",") (parameter_declaration "ulong param_5" (type_identifier "ulong") (identifier "param_5")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  long lVar2;\n  long lVar3;\n  ulong *puVar4;\n  long lVar5;\n  ulong *puVar6;\n  long lVar7;\n  ulong *puVar8;\n  ulong uVar9;\n  \n  lVar5 = (long)(param_3 - 1) / 2;\n  lVar7 = param_2;\n  if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }\n  lVar7 = (lVar3 + -1) / 2;\n  if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }\nLAB_0027bf0a:\n  *puVar8 = param_4;\n  puVar8[1] = param_5;\n  return;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "ulong *puVar4;" (type_identifier "ulong") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "ulong *puVar6;" (type_identifier "ulong") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "ulong *puVar8;" (type_identifier "ulong") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (expression_statement "lVar5 = (long)(param_3 - 1) / 2;" (assignment_expression "lVar5 = (long)(param_3 - 1) / 2" (identifier "lVar5") (= "=") (binary_expression "(long)(param_3 - 1) / 2" (cast_expression "(long)(param_3 - 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_3 - 1)" (( "(") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) () ")"))) (/ "/") (number_literal "2"))) (; ";")) (expression_statement "lVar7 = param_2;" (assignment_expression "lVar7 = param_2" (identifier "lVar7") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (param_2 < lVar5) {\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }\n  else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 < lVar5)" (( "(") (binary_expression "param_2 < lVar5" (identifier "param_2") (< "<") (identifier "lVar5")) () ")")) (compound_statement "{\n    do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);\n    if ((param_3 & 1) == 0) goto LAB_0027bf38;\n  }" ({ "{") (do_statement "do {\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    } while (lVar3 < lVar5);" (do "do") (compound_statement "{\n      lVar2 = (lVar7 + 1) * 2;\n      lVar3 = lVar2 + -1;\n      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);\n      uVar1 = *puVar6;\n      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);\n      uVar9 = *puVar8;\n      if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      *puVar6 = uVar9;\n      puVar6[1] = puVar8[1];\n      lVar7 = lVar3;\n    }" ({ "{") (expression_statement "lVar2 = (lVar7 + 1) * 2;" (assignment_expression "lVar2 = (lVar7 + 1) * 2" (identifier "lVar2") (= "=") (binary_expression "(lVar7 + 1) * 2" (parenthesized_expression "(lVar7 + 1)" (( "(") (binary_expression "lVar7 + 1" (identifier "lVar7") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar3 = lVar2 + -1;" (assignment_expression "lVar3 = lVar2 + -1" (identifier "lVar3") (= "=") (binary_expression "lVar2 + -1" (identifier "lVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);" (assignment_expression "puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1)" (identifier "puVar6") (= "=") (cast_expression "(ulong *)((lVar7 + 1) * 0x20 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((lVar7 + 1) * 0x20 + param_1)" (( "(") (binary_expression "(lVar7 + 1) * 0x20 + param_1" (binary_expression "(lVar7 + 1) * 0x20" (parenthesized_expression "(lVar7 + 1)" (( "(") (binary_expression "lVar7 + 1" (identifier "lVar7") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "0x20")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" (identifier "uVar1") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "puVar8 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar3 * 0x10 + param_1)" (identifier "puVar8") (= "=") (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 * 0x10 + param_1)" (( "(") (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" (identifier "lVar3") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "uVar9 = *puVar8;" (assignment_expression "uVar9 = *puVar8" (identifier "uVar9") (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (if_statement "if (uVar9 <= uVar1) {\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" (if "if") (parenthesized_expression "(uVar9 <= uVar1)" (( "(") (binary_expression "uVar9 <= uVar1" (identifier "uVar9") (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n        lVar3 = lVar2;\n        puVar8 = puVar6;\n        uVar9 = uVar1;\n      }" ({ "{") (expression_statement "lVar3 = lVar2;" (assignment_expression "lVar3 = lVar2" (identifier "lVar3") (= "=") (identifier "lVar2")) (; ";")) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" (identifier "puVar8") (= "=") (identifier "puVar6")) (; ";")) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" (identifier "uVar9") (= "=") (identifier "uVar1")) (; ";")) (} "}"))) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" (identifier "puVar6") (= "=") (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 * 0x10 + param_1)" (( "(") (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" (identifier "lVar7") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "*puVar6 = uVar9;" (assignment_expression "*puVar6 = uVar9" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "puVar6[1] = puVar8[1];" (assignment_expression "puVar6[1] = puVar8[1]" (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "puVar8[1]" (identifier "puVar8") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "lVar7 = lVar3;" (assignment_expression "lVar7 = lVar3" (identifier "lVar7") (= "=") (identifier "lVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar3 < lVar5)" (( "(") (binary_expression "lVar3 < lVar5" (identifier "lVar3") (< "<") (identifier "lVar5")) () ")")) (; ";")) (if_statement "if ((param_3 & 1) == 0) goto LAB_0027bf38;" (if "if") (parenthesized_expression "((param_3 & 1) == 0)" (( "(") (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0027bf38;" (goto "goto") (statement_identifier "LAB_0027bf38") (; ";"))) (} "}")) (else_clause "else {\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" (else "else") (compound_statement "{\n    puVar8 = (ulong *)(param_2 * 0x10 + param_1);\n    lVar3 = param_2;\n    if ((param_3 & 1) != 0) goto LAB_0027bf0a;\nLAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }\n  }" ({ "{") (expression_statement "puVar8 = (ulong *)(param_2 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(param_2 * 0x10 + param_1)" (identifier "puVar8") (= "=") (cast_expression "(ulong *)(param_2 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 * 0x10 + param_1)" (( "(") (binary_expression "param_2 * 0x10 + param_1" (binary_expression "param_2 * 0x10" (identifier "param_2") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "lVar3 = param_2;" (assignment_expression "lVar3 = param_2" (identifier "lVar3") (= "=") (identifier "param_2")) (; ";")) (if_statement "if ((param_3 & 1) != 0) goto LAB_0027bf0a;" (if "if") (parenthesized_expression "((param_3 & 1) != 0)" (( "(") (binary_expression "(param_3 & 1) != 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0027bf0a;" (goto "goto") (statement_identifier "LAB_0027bf0a") (; ";"))) (labeled_statement "LAB_0027bf38:\n    if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" (statement_identifier "LAB_0027bf38") (: ":") (if_statement "if ((long)(param_3 - 2) / 2 == lVar3) {\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" (if "if") (parenthesized_expression "((long)(param_3 - 2) / 2 == lVar3)" (( "(") (binary_expression "(long)(param_3 - 2) / 2 == lVar3" (binary_expression "(long)(param_3 - 2) / 2" (cast_expression "(long)(param_3 - 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_3 - 2)" (( "(") (binary_expression "param_3 - 2" (identifier "param_3") (- "-") (number_literal "2")) () ")"))) (/ "/") (number_literal "2")) (== "==") (identifier "lVar3")) () ")")) (compound_statement "{\n      lVar3 = lVar3 * 2 + 1;\n      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar8 = *puVar6;\n      puVar8[1] = puVar6[1];\n      puVar8 = puVar6;\n    }" ({ "{") (expression_statement "lVar3 = lVar3 * 2 + 1;" (assignment_expression "lVar3 = lVar3 * 2 + 1" (identifier "lVar3") (= "=") (binary_expression "lVar3 * 2 + 1" (binary_expression "lVar3 * 2" (identifier "lVar3") (* "*") (number_literal "2")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar6 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar3 * 0x10 + param_1)" (identifier "puVar6") (= "=") (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 * 0x10 + param_1)" (( "(") (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" (identifier "lVar3") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "puVar8[1] = puVar6[1];" (assignment_expression "puVar8[1] = puVar6[1]" (subscript_expression "puVar8[1]" (identifier "puVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" (identifier "puVar8") (= "=") (identifier "puVar6")) (; ";")) (} "}")))) (} "}")))) (expression_statement "lVar7 = (lVar3 + -1) / 2;" (assignment_expression "lVar7 = (lVar3 + -1) / 2" (identifier "lVar7") (= "=") (binary_expression "(lVar3 + -1) / 2" (parenthesized_expression "(lVar3 + -1)" (( "(") (binary_expression "lVar3 + -1" (identifier "lVar3") (+ "+") (number_literal "-1")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (if_statement "if (param_2 < lVar3) {\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 < lVar3)" (( "(") (binary_expression "param_2 < lVar3" (identifier "param_2") (< "<") (identifier "lVar3")) () ")")) (compound_statement "{\n    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n    uVar1 = *puVar6;\n    while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }\n  }" ({ "{") (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" (identifier "puVar6") (= "=") (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 * 0x10 + param_1)" (( "(") (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" (identifier "lVar7") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" (identifier "uVar1") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (while_statement "while (lVar5 = lVar7, uVar1 < param_4) {\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" (while "while") (parenthesized_expression "(lVar5 = lVar7, uVar1 < param_4)" (( "(") (comma_expression "lVar5 = lVar7, uVar1 < param_4" (assignment_expression "lVar5 = lVar7" (identifier "lVar5") (= "=") (identifier "lVar7")) (, ",") (binary_expression "uVar1 < param_4" (identifier "uVar1") (< "<") (identifier "param_4"))) () ")")) (compound_statement "{\n      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);\n      *puVar4 = uVar1;\n      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);\n      puVar4[1] = puVar6[1];\n      lVar7 = (lVar5 + -1) / 2;\n      if (lVar5 <= param_2) break;\n      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);\n      lVar3 = lVar5;\n      uVar1 = *puVar6;\n    }" ({ "{") (expression_statement "puVar4 = (ulong *)(lVar3 * 0x10 + param_1);" (assignment_expression "puVar4 = (ulong *)(lVar3 * 0x10 + param_1)" (identifier "puVar4") (= "=") (cast_expression "(ulong *)(lVar3 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 * 0x10 + param_1)" (( "(") (binary_expression "lVar3 * 0x10 + param_1" (binary_expression "lVar3 * 0x10" (identifier "lVar3") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar8 = (ulong *)(lVar5 * 0x10 + param_1);" (assignment_expression "puVar8 = (ulong *)(lVar5 * 0x10 + param_1)" (identifier "puVar8") (= "=") (cast_expression "(ulong *)(lVar5 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 * 0x10 + param_1)" (( "(") (binary_expression "lVar5 * 0x10 + param_1" (binary_expression "lVar5 * 0x10" (identifier "lVar5") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "puVar4[1] = puVar6[1];" (assignment_expression "puVar4[1] = puVar6[1]" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "lVar7 = (lVar5 + -1) / 2;" (assignment_expression "lVar7 = (lVar5 + -1) / 2" (identifier "lVar7") (= "=") (binary_expression "(lVar5 + -1) / 2" (parenthesized_expression "(lVar5 + -1)" (( "(") (binary_expression "lVar5 + -1" (identifier "lVar5") (+ "+") (number_literal "-1")) () ")")) (/ "/") (number_literal "2"))) (; ";")) (if_statement "if (lVar5 <= param_2) break;" (if "if") (parenthesized_expression "(lVar5 <= param_2)" (( "(") (binary_expression "lVar5 <= param_2" (identifier "lVar5") (<= "<=") (identifier "param_2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar6 = (ulong *)(lVar7 * 0x10 + param_1);" (assignment_expression "puVar6 = (ulong *)(lVar7 * 0x10 + param_1)" (identifier "puVar6") (= "=") (cast_expression "(ulong *)(lVar7 * 0x10 + param_1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 * 0x10 + param_1)" (( "(") (binary_expression "lVar7 * 0x10 + param_1" (binary_expression "lVar7 * 0x10" (identifier "lVar7") (* "*") (number_literal "0x10")) (+ "+") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" (identifier "lVar3") (= "=") (identifier "lVar5")) (; ";")) (expression_statement "uVar1 = *puVar6;" (assignment_expression "uVar1 = *puVar6" (identifier "uVar1") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_0027bf0a:\n  *puVar8 = param_4;" (statement_identifier "LAB_0027bf0a") (: ":") (expression_statement "*puVar8 = param_4;" (assignment_expression "*puVar8 = param_4" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "param_4")) (; ";"))) (expression_statement "puVar8[1] = param_5;" (assignment_expression "puVar8[1] = param_5" (subscript_expression "puVar8[1]" (identifier "puVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_5")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name: __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long unsigned int, long
   unsigned int>*, std::vector<std::pair<long unsigned int, long unsigned int>,
   std::allocator<std::pair<long unsigned int, long unsigned int> > > >, long int, std::pair<long
   unsigned int, long unsigned int>,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64> > > */

void std::
     __adjust_heap<__gnu_cxx::__normal_iterator<std::pair<long_unsigned_int,_long_unsigned_int>*,_std::vector<std::pair<long_unsigned_int,_long_unsigned_int>,_std::allocator<std::pair<long_unsigned_int,_long_unsigned_int>_>_>_>,_long_int,_std::pair<long_unsigned_int,_long_unsigned_int>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Eh_frame_hdr::Fde_address_compare<64>_>_>
               (long var_6,long var_2,type_1 var_1,type_1 var_10,type_1 param_5)

{
  type_1 var_9;
  long var_5;
  long var_7;
  type_1 *puVar4;
  long var_3;
  long __topIndex;
  type_1 *puVar6;
  long var_4;
  type_1 *puVar8;
  type_1 var_8;
  
  var_3 = (long)(var_1 - 1) / 2;
  var_4 = var_2;
  if (var_2 < var_3) {
    do {
      var_5 = (var_4 + 1) * 2;
      var_7 = var_5 + -1;
      puVar6 = (type_1 *)((var_4 + 1) * 0x20 + var_6);
      var_9 = *puVar6;
      puVar8 = (type_1 *)(var_7 * 0x10 + var_6);
      var_8 = *puVar8;
      if (var_8 <= var_9) {
        var_7 = var_5;
        puVar8 = puVar6;
        var_8 = var_9;
      }
      puVar6 = (type_1 *)(var_4 * 0x10 + var_6);
      *puVar6 = var_8;
      puVar6[1] = puVar8[1];
      var_4 = var_7;
    } while (var_7 < var_3);
    if ((var_1 & 1) == 0) goto LAB_0027bf38;
  }
  else {
    puVar8 = (type_1 *)(var_2 * 0x10 + var_6);
    var_7 = var_2;
    if ((var_1 & 1) != 0) goto LAB_0027bf0a;
LAB_0027bf38:
    if ((long)(var_1 - 2) / 2 == var_7) {
      var_7 = var_7 * 2 + 1;
      puVar6 = (type_1 *)(var_7 * 0x10 + var_6);
      *puVar8 = *puVar6;
      puVar8[1] = puVar6[1];
      puVar8 = puVar6;
    }
  }
  var_4 = (var_7 + -1) / 2;
  if (var_2 < var_7) {
    puVar6 = (type_1 *)(var_4 * 0x10 + var_6);
    var_9 = *puVar6;
    while (var_3 = var_4, var_9 < var_10) {
      puVar4 = (type_1 *)(var_7 * 0x10 + var_6);
      *puVar4 = var_9;
      puVar8 = (type_1 *)(var_3 * 0x10 + var_6);
      puVar4[1] = puVar6[1];
      var_4 = (var_3 + -1) / 2;
      if (var_3 <= var_2) break;
      puVar6 = (type_1 *)(var_4 * 0x10 + var_6);
      var_7 = var_3;
      var_9 = *puVar6;
    }
  }
LAB_0027bf0a:
  *puVar8 = var_10;
  puVar8[1] = param_5;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (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: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (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: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (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: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (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: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (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: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) body: (compound_statement (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: (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (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: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (return_statement))))

void MASKED(long param_1,long param_2,ulong param_3,ulong param_4,ulong param_5)

{
  ulong uVar1;
  long lVar2;
  long lVar3;
  ulong *puVar4;
  long lVar5;
  ulong *puVar6;
  long lVar7;
  ulong *puVar8;
  ulong uVar9;
  
  lVar5 = (long)(param_3 - 1) / 2;
  lVar7 = param_2;
  if (param_2 < lVar5) {
    do {
      lVar2 = (lVar7 + 1) * 2;
      lVar3 = lVar2 + -1;
      puVar6 = (ulong *)((lVar7 + 1) * 0x20 + param_1);
      uVar1 = *puVar6;
      puVar8 = (ulong *)(lVar3 * 0x10 + param_1);
      uVar9 = *puVar8;
      if (uVar9 <= uVar1) {
        lVar3 = lVar2;
        puVar8 = puVar6;
        uVar9 = uVar1;
      }
      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
      *puVar6 = uVar9;
      puVar6[1] = puVar8[1];
      lVar7 = lVar3;
    } while (lVar3 < lVar5);
    if ((param_3 & 1) == 0) goto LAB_0027bf38;
  }
  else {
    puVar8 = (ulong *)(param_2 * 0x10 + param_1);
    lVar3 = param_2;
    if ((param_3 & 1) != 0) goto LAB_0027bf0a;
LAB_0027bf38:
    if ((long)(param_3 - 2) / 2 == lVar3) {
      lVar3 = lVar3 * 2 + 1;
      puVar6 = (ulong *)(lVar3 * 0x10 + param_1);
      *puVar8 = *puVar6;
      puVar8[1] = puVar6[1];
      puVar8 = puVar6;
    }
  }
  lVar7 = (lVar3 + -1) / 2;
  if (param_2 < lVar3) {
    puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
    uVar1 = *puVar6;
    while (lVar5 = lVar7, uVar1 < param_4) {
      puVar4 = (ulong *)(lVar3 * 0x10 + param_1);
      *puVar4 = uVar1;
      puVar8 = (ulong *)(lVar5 * 0x10 + param_1);
      puVar4[1] = puVar6[1];
      lVar7 = (lVar5 + -1) / 2;
      if (lVar5 <= param_2) break;
      puVar6 = (ulong *)(lVar7 * 0x10 + param_1);
      lVar3 = lVar5;
      uVar1 = *puVar6;
    }
  }
LAB_0027bf0a:
  *puVar8 = param_4;
  puVar8[1] = param_5;
  return;
}

