
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original name:
   __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> >, gold::Output_segment**,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */

void std::
     __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                        __last,Output_segment **__buffer,
               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)

{
  Output_segment **__last2;
  Output_segment **__last2_00;
  Output_segment **ppOVar1;
  __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
  _Var2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
  _Var7;
  long lVar8;
  
  lVar4 = (long)__last._M_current - (long)__first._M_current;
  __last2 = (Output_segment **)((long)__buffer + lVar4);
  lVar8 = lVar4 >> 3;
  _Var2._M_current = __first._M_current;
  if (lVar4 < 0x31) {
    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
              (__first,__last,__comp);
    return;
  }
  do {
    _Var7._M_current = _Var2._M_current + 7;
    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
              (_Var2,_Var7,__comp);
    _Var2._M_current = _Var7._M_current;
  } while (0x30 < (long)__last._M_current - (long)_Var7._M_current);
  __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
            (_Var7,__last,__comp);
  if (0x38 < lVar4) {
    lVar4 = 7;
    do {
      lVar5 = lVar4 * 2;
      lVar3 = lVar8;
      _Var7._M_current = __first._M_current;
      ppOVar1 = __buffer;
      _Var2._M_current = __first._M_current;
      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {
        do {
          _Var2._M_current = _Var7._M_current + lVar4 * 2;
          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                                      )(_Var2._M_current + -lVar4),
                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);
          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;
          _Var7._M_current = _Var2._M_current;
        } while (lVar5 <= lVar3);
      }
      if (lVar4 <= lVar3) {
        lVar3 = lVar4;
      }
      lVar6 = lVar4 * 4;
      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                        )(_Var2._M_current + lVar3),
                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);
      ppOVar1 = __buffer;
      _Var2._M_current = __first._M_current;
      if (lVar8 < lVar6) {
        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {
          lVar5 = lVar8;
        }
        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);
        return;
      }
      do {
        __last2_00 = ppOVar1 + lVar4 * 4;
        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,
                           __comp);
        lVar3 = (long)__last2 - (long)__last2_00 >> 3;
        ppOVar1 = __last2_00;
      } while (lVar6 <= lVar3);
      if (lVar3 <= lVar5) {
        lVar5 = lVar3;
      }
      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);
      lVar4 = lVar6;
    } while (lVar6 < lVar8);
  }
  return;
}



void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  
  lVar5 = param_2 - param_1;
  lVar1 = param_3 + lVar5;
  lVar9 = lVar5 >> 3;
  lVar7 = param_1;
  if (lVar5 < 0x31) {
    FUN_0038b340(param_1,param_2,param_4);
    return;
  }
  do {
    lVar6 = lVar7 + 0x38;
    FUN_0038b340(lVar7,lVar6,param_4);
    lVar7 = lVar6;
  } while (0x30 < param_2 - lVar6);
  FUN_0038b340(lVar6,param_2,param_4);
  if (0x38 < lVar5) {
    lVar7 = 7;
    do {
      lVar6 = lVar7 * 2;
      lVar3 = lVar9;
      lVar2 = param_3;
      lVar5 = param_1;
      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {
        lVar8 = param_1;
        do {
          lVar5 = lVar8 + lVar7 * 0x10;
          lVar3 = lVar5 + lVar7 * -8;
          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);
          lVar3 = param_2 - lVar5 >> 3;
          lVar8 = lVar5;
        } while (lVar6 <= lVar3);
      }
      if (lVar7 <= lVar3) {
        lVar3 = lVar7;
      }
      lVar8 = lVar7 * 4;
      lVar3 = lVar5 + lVar3 * 8;
      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);
      if (lVar9 < lVar8) {
        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {
          lVar6 = lVar9;
        }
        lVar7 = param_3 + lVar6 * 8;
        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);
        return;
      }
      lVar5 = param_3;
      lVar3 = param_1;
      do {
        lVar2 = lVar5 + lVar7 * 0x20;
        lVar4 = lVar2 + lVar7 * -0x10;
        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);
        lVar4 = lVar1 - lVar2 >> 3;
        lVar5 = lVar2;
      } while (lVar8 <= lVar4);
      if (lVar4 <= lVar6) {
        lVar6 = lVar4;
      }
      lVar7 = lVar2 + lVar6 * 8;
      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);
      lVar7 = lVar8;
    } while (lVar8 < lVar9);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RSI
SUB RBX,RDI
MOV R15,RBX
LEA RAX,[RDX + RBX*0x1]
SUB RSP,0x38
SAR R15,0x3
MOV qword ptr [RSP + 0x8],RAX
CMP RBX,0x30
JLE 0x0038f9f0
MOV qword ptr [RSP + 0x18],RDX
MOV R12,RCX
MOV R14,RSI
MOV qword ptr [RSP + 0x10],RDI
NOP
LEA RBP,[RDI + 0x38]
MOV RDX,R12
MOV RSI,RBP
CALL 0x0038b340
MOV RAX,R14
MOV RDI,RBP
SUB RAX,RBP
CMP RAX,0x30
JG 0x0038f820
MOV RDX,R12
MOV RSI,R14
CALL 0x0038b340
CMP RBX,0x38
JLE 0x0038f990
MOV EBP,0x7
NOP dword ptr [RAX + RAX*0x1]
LEA RBX,[RBP + RBP*0x1]
CMP R15,RBX
JL 0x0038f9d8
MOV R11,RBP
MOV R8,qword ptr [RSP + 0x18]
MOV RDI,qword ptr [RSP + 0x10]
LEA R13,[RBP*0x8]
SHL R11,0x4
MOV qword ptr [RSP + 0x28],RBP
SUB R13,R11
MOV RBP,R11
MOV qword ptr [RSP + 0x20],R13
NOP word ptr [RAX + RAX*0x1]
MOV RAX,qword ptr [RSP + 0x20]
LEA R13,[RDI + RBP*0x1]
MOV R9,R12
MOV RCX,R13
LEA RSI,[R13 + RAX*0x1]
MOV RDX,RSI
CALL 0x0038f660
MOV RDX,R14
MOV RDI,R13
SUB RDX,R13
MOV R8,RAX
SAR RDX,0x3
CMP RBX,RDX
JLE 0x0038f8a0
MOV RBP,qword ptr [RSP + 0x28]
CMP RBP,RDX
MOV R9,R12
MOV RCX,R14
MOV RDI,R13
CMOVLE RDX,RBP
SHL RBP,0x2
LEA RSI,[R13 + RDX*0x8]
MOV RDX,RSI
CALL 0x0038f660
MOV R8,qword ptr [RSP + 0x10]
CMP R15,RBP
JL 0x0038f9a0
LEA R11,[RBP*0x8]
MOV RDI,qword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x28],RBX
LEA R13,[RBX*0x8]
SUB R13,R11
MOV RBX,R12
MOV R12,R11
MOV qword ptr [RSP + 0x20],R13
NOP dword ptr [RAX]
MOV RAX,qword ptr [RSP + 0x20]
LEA R13,[RDI + R12*0x1]
MOV R9,RBX
MOV RCX,R13
LEA RSI,[R13 + RAX*0x1]
MOV RDX,RSI
CALL 0x0038f720
MOV RDX,qword ptr [RSP + 0x8]
MOV RDI,R13
MOV R8,RAX
SUB RDX,R13
SAR RDX,0x3
CMP RBP,RDX
JLE 0x0038f930
MOV R12,RBX
MOV RBX,qword ptr [RSP + 0x28]
MOV RCX,qword ptr [RSP + 0x8]
MOV R9,R12
CMP RDX,RBX
CMOVLE RBX,RDX
LEA RSI,[R13 + RBX*0x8]
MOV RDX,RSI
CALL 0x0038f720
CMP R15,RBP
JG 0x0038f860
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP R15,RBX
MOV RDI,qword ptr [RSP + 0x18]
MOV R8,qword ptr [RSP + 0x10]
MOV R9,R12
CMOVLE RBX,R15
MOV RCX,qword ptr [RSP + 0x8]
ADD RSP,0x38
LEA RSI,[RDI + RBX*0x8]
POP RBX
POP RBP
MOV RDX,RSI
POP R12
POP R13
POP R14
POP R15
JMP 0x0038f720
MOV R8,qword ptr [RSP + 0x18]
MOV RDX,R15
MOV R13,qword ptr [RSP + 0x10]
JMP 0x0038f8d6
ADD RSP,0x38
MOV RDX,RCX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP 0x0038b340
(translation_unit "void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long param_2,long param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar5 = param_2 - param_1;" (assignment_expression "lVar5 = param_2 - param_1" identifier = (binary_expression "param_2 - param_1" identifier - identifier)) ;) (expression_statement "lVar1 = param_3 + lVar5;" (assignment_expression "lVar1 = param_3 + lVar5" identifier = (binary_expression "param_3 + lVar5" identifier + identifier)) ;) (expression_statement "lVar9 = lVar5 >> 3;" (assignment_expression "lVar9 = lVar5 >> 3" identifier = (binary_expression "lVar5 >> 3" identifier >> number_literal)) ;) (expression_statement "lVar7 = param_1;" (assignment_expression "lVar7 = param_1" identifier = identifier) ;) (if_statement "if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" if (parenthesized_expression "(lVar5 < 0x31)" ( (binary_expression "lVar5 < 0x31" identifier < number_literal) )) (compound_statement "{\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" { (expression_statement "FUN_0038b340(param_1,param_2,param_4);" (call_expression "FUN_0038b340(param_1,param_2,param_4)" identifier (argument_list "(param_1,param_2,param_4)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);" do (compound_statement "{\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  }" { (expression_statement "lVar6 = lVar7 + 0x38;" (assignment_expression "lVar6 = lVar7 + 0x38" identifier = (binary_expression "lVar7 + 0x38" identifier + number_literal)) ;) (expression_statement "FUN_0038b340(lVar7,lVar6,param_4);" (call_expression "FUN_0038b340(lVar7,lVar6,param_4)" identifier (argument_list "(lVar7,lVar6,param_4)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(0x30 < param_2 - lVar6)" ( (binary_expression "0x30 < param_2 - lVar6" number_literal < (binary_expression "param_2 - lVar6" identifier - identifier)) )) ;) (expression_statement "FUN_0038b340(lVar6,param_2,param_4);" (call_expression "FUN_0038b340(lVar6,param_2,param_4)" identifier (argument_list "(lVar6,param_2,param_4)" ( identifier , identifier , identifier ))) ;) (if_statement "if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" if (parenthesized_expression "(0x38 < lVar5)" ( (binary_expression "0x38 < lVar5" number_literal < identifier) )) (compound_statement "{\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" { (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" identifier = number_literal) ;) (do_statement "do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);" do (compound_statement "{\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    }" { (expression_statement "lVar6 = lVar7 * 2;" (assignment_expression "lVar6 = lVar7 * 2" identifier = (binary_expression "lVar7 * 2" identifier * number_literal)) ;) (expression_statement "lVar3 = lVar9;" (assignment_expression "lVar3 = lVar9" identifier = identifier) ;) (expression_statement "lVar2 = param_3;" (assignment_expression "lVar2 = param_3" identifier = identifier) ;) (expression_statement "lVar5 = param_1;" (assignment_expression "lVar5 = param_1" identifier = identifier) ;) (if_statement "if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" if (parenthesized_expression "(SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0)" ( (binary_expression "SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" identifier (argument_list "(lVar9,lVar6)" ( identifier , identifier ))) == (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" identifier + (binary_expression "lVar7 * -2" identifier * number_literal)) < number_literal)) )) (compound_statement "{\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" { (expression_statement "lVar8 = param_1;" (assignment_expression "lVar8 = param_1" identifier = identifier) ;) (do_statement "do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);" do (compound_statement "{\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        }" { (expression_statement "lVar5 = lVar8 + lVar7 * 0x10;" (assignment_expression "lVar5 = lVar8 + lVar7 * 0x10" identifier = (binary_expression "lVar8 + lVar7 * 0x10" identifier + (binary_expression "lVar7 * 0x10" identifier * number_literal))) ;) (expression_statement "lVar3 = lVar5 + lVar7 * -8;" (assignment_expression "lVar3 = lVar5 + lVar7 * -8" identifier = (binary_expression "lVar5 + lVar7 * -8" identifier + (binary_expression "lVar7 * -8" identifier * number_literal))) ;) (expression_statement "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);" (assignment_expression "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" identifier = (call_expression "FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" identifier (argument_list "(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "lVar3 = param_2 - lVar5 >> 3;" (assignment_expression "lVar3 = param_2 - lVar5 >> 3" identifier = (binary_expression "param_2 - lVar5 >> 3" (binary_expression "param_2 - lVar5" identifier - identifier) >> number_literal)) ;) (expression_statement "lVar8 = lVar5;" (assignment_expression "lVar8 = lVar5" identifier = identifier) ;) }) while (parenthesized_expression "(lVar6 <= lVar3)" ( (binary_expression "lVar6 <= lVar3" identifier <= identifier) )) ;) })) (if_statement "if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }" if (parenthesized_expression "(lVar7 <= lVar3)" ( (binary_expression "lVar7 <= lVar3" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar7;\n      }" { (expression_statement "lVar3 = lVar7;" (assignment_expression "lVar3 = lVar7" identifier = identifier) ;) })) (expression_statement "lVar8 = lVar7 * 4;" (assignment_expression "lVar8 = lVar7 * 4" identifier = (binary_expression "lVar7 * 4" identifier * number_literal)) ;) (expression_statement "lVar3 = lVar5 + lVar3 * 8;" (assignment_expression "lVar3 = lVar5 + lVar3 * 8" identifier = (binary_expression "lVar5 + lVar3 * 8" identifier + (binary_expression "lVar3 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);" (call_expression "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" identifier (argument_list "(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" if (parenthesized_expression "(lVar9 < lVar8)" ( (binary_expression "lVar9 < lVar8" identifier < identifier) )) (compound_statement "{\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" { (if_statement "if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }" if (parenthesized_expression "(lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0)" ( (binary_expression "lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 == lVar6" identifier == identifier) || (binary_expression "SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" identifier (argument_list "(lVar9,lVar6)" ( identifier , identifier ))) != (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" identifier + (binary_expression "lVar7 * -2" identifier * number_literal)) < number_literal))) )) (compound_statement "{\n          lVar6 = lVar9;\n        }" { (expression_statement "lVar6 = lVar9;" (assignment_expression "lVar6 = lVar9" identifier = identifier) ;) })) (expression_statement "lVar7 = param_3 + lVar6 * 8;" (assignment_expression "lVar7 = param_3 + lVar6 * 8" identifier = (binary_expression "param_3 + lVar6 * 8" identifier + (binary_expression "lVar6 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);" (call_expression "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4)" identifier (argument_list "(param_3,lVar7,lVar7,lVar1,param_1,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "lVar5 = param_3;" (assignment_expression "lVar5 = param_3" identifier = identifier) ;) (expression_statement "lVar3 = param_1;" (assignment_expression "lVar3 = param_1" identifier = identifier) ;) (do_statement "do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);" do (compound_statement "{\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      }" { (expression_statement "lVar2 = lVar5 + lVar7 * 0x20;" (assignment_expression "lVar2 = lVar5 + lVar7 * 0x20" identifier = (binary_expression "lVar5 + lVar7 * 0x20" identifier + (binary_expression "lVar7 * 0x20" identifier * number_literal))) ;) (expression_statement "lVar4 = lVar2 + lVar7 * -0x10;" (assignment_expression "lVar4 = lVar2 + lVar7 * -0x10" identifier = (binary_expression "lVar2 + lVar7 * -0x10" identifier + (binary_expression "lVar7 * -0x10" identifier * number_literal))) ;) (expression_statement "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);" (assignment_expression "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" identifier = (call_expression "FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" identifier (argument_list "(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "lVar4 = lVar1 - lVar2 >> 3;" (assignment_expression "lVar4 = lVar1 - lVar2 >> 3" identifier = (binary_expression "lVar1 - lVar2 >> 3" (binary_expression "lVar1 - lVar2" identifier - identifier) >> number_literal)) ;) (expression_statement "lVar5 = lVar2;" (assignment_expression "lVar5 = lVar2" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 <= lVar4)" ( (binary_expression "lVar8 <= lVar4" identifier <= identifier) )) ;) (if_statement "if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }" if (parenthesized_expression "(lVar4 <= lVar6)" ( (binary_expression "lVar4 <= lVar6" identifier <= identifier) )) (compound_statement "{\n        lVar6 = lVar4;\n      }" { (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" identifier = identifier) ;) })) (expression_statement "lVar7 = lVar2 + lVar6 * 8;" (assignment_expression "lVar7 = lVar2 + lVar6 * 8" identifier = (binary_expression "lVar2 + lVar6 * 8" identifier + (binary_expression "lVar6 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);" (call_expression "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" identifier (argument_list "(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = lVar8;" (assignment_expression "lVar7 = lVar8" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 < lVar9)" ( (binary_expression "lVar8 < lVar9" identifier < identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original name:\n   __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,\n   std::vector<gold::Output_segment*> >, gold::Output_segment**,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */\n\nvoid std::\n     __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,Output_segment **__buffer,\n               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment **__last2;\n  Output_segment **__last2_00;\n  Output_segment **ppOVar1;\n  __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  __normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var7;\n  long lVar8;\n  \n  lVar4 = (long)__last._M_current - (long)__first._M_current;\n  __last2 = (Output_segment **)((long)__buffer + lVar4);\n  lVar8 = lVar4 >> 3;\n  _Var2._M_current = __first._M_current;\n  if (lVar4 < 0x31) {\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (__first,__last,__comp);\n    return;\n  }\n  do {\n    _Var7._M_current = _Var2._M_current + 7;\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (_Var2,_Var7,__comp);\n    _Var2._M_current = _Var7._M_current;\n  } while (0x30 < (long)__last._M_current - (long)_Var7._M_current);\n  __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n            (_Var7,__last,__comp);\n  if (0x38 < lVar4) {\n    lVar4 = 7;\n    do {\n      lVar5 = lVar4 * 2;\n      lVar3 = lVar8;\n      _Var7._M_current = __first._M_current;\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }\n      if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }\n      lVar6 = lVar4 * 4;\n      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }\n      do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);\n      if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }\n      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);\n      lVar4 = lVar6;\n    } while (lVar6 < lVar8);\n  }\n  return;\n}\n\n" comment comment comment (declaration "void std::\n     __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,Output_segment **__buffer,\n               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment **__last2;" primitive_type (ERROR "std::\n     __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "**,_std::vector<gold::Output_segment*>_" * (pointer_declarator "*,_std::vector<gold::Output_segment*>_" * (ERROR ",_std::vector<gold::Output_segment*>" , identifier : : identifier < identifier : : identifier * >) identifier)) (ERROR ">,_gold::Output_segment**" > , (ERROR "_gold::Output_segment" identifier : : identifier) * *) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,Output_segment **__buffer,\n               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment" identifier : : identifier : : identifier < identifier : : identifier : : identifier > (function_declarator "_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,Output_segment **__buffer,\n               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)" identifier (ERROR ">" >) (parameter_list "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,Output_segment **__buffer,\n               _Iter_comp_iter<gold::Layout::Compare_segments> __comp)" ( (parameter_declaration "__normal_iterator<gold::Output_segment**" type_identifier (ERROR "<gold::Output_segment" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_segment*" type_identifier (ERROR "::vector<gold::Output_segment" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_segment*>_>_>\n                __first" type_identifier (ERROR "::allocator<gold::Output_segment*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "__normal_iterator<gold::Output_segment**" type_identifier (ERROR "<gold::Output_segment" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_segment*" type_identifier (ERROR "::vector<gold::Output_segment" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_segment*>_>_>\n                        __last" type_identifier (ERROR "::allocator<gold::Output_segment*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "Output_segment **__buffer" type_identifier (pointer_declarator "**__buffer" * (pointer_declarator "*__buffer" * identifier))) , (parameter_declaration "_Iter_comp_iter<gold::Layout::Compare_segments> __comp" type_identifier (ERROR "<gold::Layout::Compare_segments>" < identifier : : identifier : : identifier >) identifier) ))) { identifier) (pointer_declarator "**__last2" * (pointer_declarator "*__last2" * identifier)) ;) (declaration "Output_segment **__last2_00;" type_identifier (pointer_declarator "**__last2_00" * (pointer_declarator "*__last2_00" * identifier)) ;) (declaration "Output_segment **ppOVar1;" type_identifier (pointer_declarator "**ppOVar1" * (pointer_declarator "*ppOVar1" * identifier)) ;) (expression_statement "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var2;" (update_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var2" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var2" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) --) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (expression_statement "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var7;" (update_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var7" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n  _Var7" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) --) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar4 = (long)__last._M_current - (long)__first._M_current;" (assignment_expression "lVar4 = (long)__last._M_current - (long)__first._M_current" identifier = (binary_expression "(long)__last._M_current - (long)__first._M_current" (cast_expression "(long)__last._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last._M_current" identifier . field_identifier)) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier)))) ;) (expression_statement "__last2 = (Output_segment **)((long)__buffer + lVar4);" (assignment_expression "__last2 = (Output_segment **)((long)__buffer + lVar4)" identifier = (cast_expression "(Output_segment **)((long)__buffer + lVar4)" ( (type_descriptor "Output_segment **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)__buffer + lVar4)" ( (binary_expression "(long)__buffer + lVar4" (cast_expression "(long)__buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "lVar8 = lVar4 >> 3;" (assignment_expression "lVar8 = lVar4 >> 3" identifier = (binary_expression "lVar4 >> 3" identifier >> number_literal)) ;) (expression_statement "_Var2._M_current = __first._M_current;" (assignment_expression "_Var2._M_current = __first._M_current" (field_expression "_Var2._M_current" identifier . field_identifier) = (field_expression "__first._M_current" identifier . field_identifier)) ;) (if_statement "if (lVar4 < 0x31) {\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (__first,__last,__comp);\n    return;\n  }" if (parenthesized_expression "(lVar4 < 0x31)" ( (binary_expression "lVar4 < 0x31" identifier < number_literal) )) (compound_statement "{\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (__first,__last,__comp);\n    return;\n  }" { (expression_statement "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (__first,__last,__comp);" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (__first,__last,__comp)" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold" (binary_expression "__insertion_sort<__gnu_cxx" identifier < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(__first,__last,__comp)" ( (comma_expression "__first,__last,__comp" identifier , (comma_expression "__last,__comp" identifier , identifier)) ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    _Var7._M_current = _Var2._M_current + 7;\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (_Var2,_Var7,__comp);\n    _Var2._M_current = _Var7._M_current;\n  } while (0x30 < (long)__last._M_current - (long)_Var7._M_current);" do (compound_statement "{\n    _Var7._M_current = _Var2._M_current + 7;\n    __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (_Var2,_Var7,__comp);\n    _Var2._M_current = _Var7._M_current;\n  }" { (expression_statement "_Var7._M_current = _Var2._M_current + 7;" (assignment_expression "_Var7._M_current = _Var2._M_current + 7" (field_expression "_Var7._M_current" identifier . field_identifier) = (binary_expression "_Var2._M_current + 7" (field_expression "_Var2._M_current" identifier . field_identifier) + number_literal)) ;) (expression_statement "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (_Var2,_Var7,__comp);" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n              (_Var2,_Var7,__comp)" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold" (binary_expression "__insertion_sort<__gnu_cxx" identifier < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(_Var2,_Var7,__comp)" ( (comma_expression "_Var2,_Var7,__comp" identifier , (comma_expression "_Var7,__comp" identifier , identifier)) ))) ;) (expression_statement "_Var2._M_current = _Var7._M_current;" (assignment_expression "_Var2._M_current = _Var7._M_current" (field_expression "_Var2._M_current" identifier . field_identifier) = (field_expression "_Var7._M_current" identifier . field_identifier)) ;) }) while (parenthesized_expression "(0x30 < (long)__last._M_current - (long)_Var7._M_current)" ( (binary_expression "0x30 < (long)__last._M_current - (long)_Var7._M_current" number_literal < (binary_expression "(long)__last._M_current - (long)_Var7._M_current" (cast_expression "(long)__last._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last._M_current" identifier . field_identifier)) - (cast_expression "(long)_Var7._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "_Var7._M_current" identifier . field_identifier)))) )) ;) (expression_statement "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n            (_Var7,__last,__comp);" (update_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n            (_Var7,__last,__comp)" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n            (_Var7,__last,__comp)" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__insertion_sort<__gnu_cxx::__normal_iterator<gold" (binary_expression "__insertion_sort<__gnu_cxx" identifier < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(_Var7,__last,__comp)" ( (comma_expression "_Var7,__last,__comp" identifier , (comma_expression "__last,__comp" identifier , identifier)) ))) --) ;) (if_statement "if (0x38 < lVar4) {\n    lVar4 = 7;\n    do {\n      lVar5 = lVar4 * 2;\n      lVar3 = lVar8;\n      _Var7._M_current = __first._M_current;\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }\n      if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }\n      lVar6 = lVar4 * 4;\n      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }\n      do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);\n      if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }\n      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);\n      lVar4 = lVar6;\n    } while (lVar6 < lVar8);\n  }" if (parenthesized_expression "(0x38 < lVar4)" ( (binary_expression "0x38 < lVar4" number_literal < identifier) )) (compound_statement "{\n    lVar4 = 7;\n    do {\n      lVar5 = lVar4 * 2;\n      lVar3 = lVar8;\n      _Var7._M_current = __first._M_current;\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }\n      if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }\n      lVar6 = lVar4 * 4;\n      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }\n      do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);\n      if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }\n      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);\n      lVar4 = lVar6;\n    } while (lVar6 < lVar8);\n  }" { (expression_statement "lVar4 = 7;" (assignment_expression "lVar4 = 7" identifier = number_literal) ;) (do_statement "do {\n      lVar5 = lVar4 * 2;\n      lVar3 = lVar8;\n      _Var7._M_current = __first._M_current;\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }\n      if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }\n      lVar6 = lVar4 * 4;\n      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }\n      do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);\n      if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }\n      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);\n      lVar4 = lVar6;\n    } while (lVar6 < lVar8);" do (compound_statement "{\n      lVar5 = lVar4 * 2;\n      lVar3 = lVar8;\n      _Var7._M_current = __first._M_current;\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }\n      if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }\n      lVar6 = lVar4 * 4;\n      __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);\n      ppOVar1 = __buffer;\n      _Var2._M_current = __first._M_current;\n      if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }\n      do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);\n      if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }\n      __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);\n      lVar4 = lVar6;\n    }" { (expression_statement "lVar5 = lVar4 * 2;" (assignment_expression "lVar5 = lVar4 * 2" identifier = (binary_expression "lVar4 * 2" identifier * number_literal)) ;) (expression_statement "lVar3 = lVar8;" (assignment_expression "lVar3 = lVar8" identifier = identifier) ;) (expression_statement "_Var7._M_current = __first._M_current;" (assignment_expression "_Var7._M_current = __first._M_current" (field_expression "_Var7._M_current" identifier . field_identifier) = (field_expression "__first._M_current" identifier . field_identifier)) ;) (expression_statement "ppOVar1 = __buffer;" (assignment_expression "ppOVar1 = __buffer" identifier = identifier) ;) (expression_statement "_Var2._M_current = __first._M_current;" (assignment_expression "_Var2._M_current = __first._M_current" (field_expression "_Var2._M_current" identifier . field_identifier) = (field_expression "__first._M_current" identifier . field_identifier)) ;) (if_statement "if (SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0) {\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }" if (parenthesized_expression "(SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0)" ( (binary_expression "SBORROW8(lVar8,lVar5) == lVar8 + lVar4 * -2 < 0" (call_expression "SBORROW8(lVar8,lVar5)" identifier (argument_list "(lVar8,lVar5)" ( identifier , identifier ))) == (binary_expression "lVar8 + lVar4 * -2 < 0" (binary_expression "lVar8 + lVar4 * -2" identifier + (binary_expression "lVar4 * -2" identifier * number_literal)) < number_literal)) )) (compound_statement "{\n        do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);\n      }" { (do_statement "do {\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        } while (lVar5 <= lVar3);" do (compound_statement "{\n          _Var2._M_current = _Var7._M_current + lVar4 * 2;\n          ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);\n          lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;\n          _Var7._M_current = _Var2._M_current;\n        }" { (expression_statement "_Var2._M_current = _Var7._M_current + lVar4 * 2;" (assignment_expression "_Var2._M_current = _Var7._M_current + lVar4 * 2" (field_expression "_Var2._M_current" identifier . field_identifier) = (binary_expression "_Var7._M_current + lVar4 * 2" (field_expression "_Var7._M_current" identifier . field_identifier) + (binary_expression "lVar4 * 2" identifier * number_literal))) ;) (expression_statement "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp);" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                              (_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp)" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "ppOVar1 = __move_merge<__gnu_cxx::__normal_iterator<gold" (assignment_expression "ppOVar1 = __move_merge<__gnu_cxx" identifier = (binary_expression "__move_merge<__gnu_cxx" identifier < identifier)) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,___gnu_cxx" * (ERROR "," ,) identifier)) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp)" ( (comma_expression "_Var7,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp" identifier , (comma_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4),\n                               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp" (call_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )(_Var2._M_current + -lVar4)" (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                      )" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) )) (argument_list "(_Var2._M_current + -lVar4)" ( (binary_expression "_Var2._M_current + -lVar4" (field_expression "_Var2._M_current" identifier . field_identifier) + (unary_expression "-lVar4" - identifier)) ))) , (comma_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4),_Var2,ppOVar1,__comp" (call_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )(_Var2._M_current + -lVar4)" (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                                )" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) )) (argument_list "(_Var2._M_current + -lVar4)" ( (binary_expression "_Var2._M_current + -lVar4" (field_expression "_Var2._M_current" identifier . field_identifier) + (unary_expression "-lVar4" - identifier)) ))) , (comma_expression "_Var2,ppOVar1,__comp" identifier , (comma_expression "ppOVar1,__comp" identifier , identifier))))) ))) ;) (expression_statement "lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3;" (assignment_expression "lVar3 = (long)__last._M_current - (long)_Var2._M_current >> 3" identifier = (binary_expression "(long)__last._M_current - (long)_Var2._M_current >> 3" (binary_expression "(long)__last._M_current - (long)_Var2._M_current" (cast_expression "(long)__last._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__last._M_current" identifier . field_identifier)) - (cast_expression "(long)_Var2._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "_Var2._M_current" identifier . field_identifier))) >> number_literal)) ;) (expression_statement "_Var7._M_current = _Var2._M_current;" (assignment_expression "_Var7._M_current = _Var2._M_current" (field_expression "_Var7._M_current" identifier . field_identifier) = (field_expression "_Var2._M_current" identifier . field_identifier)) ;) }) while (parenthesized_expression "(lVar5 <= lVar3)" ( (binary_expression "lVar5 <= lVar3" identifier <= identifier) )) ;) })) (if_statement "if (lVar4 <= lVar3) {\n        lVar3 = lVar4;\n      }" if (parenthesized_expression "(lVar4 <= lVar3)" ( (binary_expression "lVar4 <= lVar3" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar4;\n      }" { (expression_statement "lVar3 = lVar4;" (assignment_expression "lVar3 = lVar4" identifier = identifier) ;) })) (expression_statement "lVar6 = lVar4 * 4;" (assignment_expression "lVar6 = lVar4 * 4" identifier = (binary_expression "lVar4 * 4" identifier * number_literal)) ;) (expression_statement "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp);" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp)" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold::Output_segment**,___gnu_cxx" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,_gold" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__move_merge<__gnu_cxx::__normal_iterator<gold" (binary_expression "__move_merge<__gnu_cxx" identifier < identifier) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,___gnu_cxx" * (ERROR "," ,) identifier)) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp)" ( (comma_expression "_Var2,(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp" identifier , (comma_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3),\n                 (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp" (call_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )(_Var2._M_current + lVar3)" (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        )" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) )) (argument_list "(_Var2._M_current + lVar3)" ( (binary_expression "_Var2._M_current + lVar3" (field_expression "_Var2._M_current" identifier . field_identifier) + identifier) ))) , (comma_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3),__last,ppOVar1,__comp" (call_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )(_Var2._M_current + lVar3)" (parenthesized_expression "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                  )" ( (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std" (binary_expression "__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__normal_iterator<gold::Output_segment**,_std" (binary_expression "__normal_iterator<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > identifier) > identifier) )) (argument_list "(_Var2._M_current + lVar3)" ( (binary_expression "_Var2._M_current + lVar3" (field_expression "_Var2._M_current" identifier . field_identifier) + identifier) ))) , (comma_expression "__last,ppOVar1,__comp" identifier , (comma_expression "ppOVar1,__comp" identifier , identifier))))) ))) ;) (expression_statement "ppOVar1 = __buffer;" (assignment_expression "ppOVar1 = __buffer" identifier = identifier) ;) (expression_statement "_Var2._M_current = __first._M_current;" (assignment_expression "_Var2._M_current = __first._M_current" (field_expression "_Var2._M_current" identifier . field_identifier) = (field_expression "__first._M_current" identifier . field_identifier)) ;) (if_statement "if (lVar8 < lVar6) {\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }" if (parenthesized_expression "(lVar8 < lVar6)" ( (binary_expression "lVar8 < lVar6" identifier < identifier) )) (compound_statement "{\n        if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }\n        __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);\n        return;\n      }" { (if_statement "if (lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0) {\n          lVar5 = lVar8;\n        }" if (parenthesized_expression "(lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0)" ( (binary_expression "lVar8 == lVar5 || SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0" (binary_expression "lVar8 == lVar5" identifier == identifier) || (binary_expression "SBORROW8(lVar8,lVar5) != lVar8 + lVar4 * -2 < 0" (call_expression "SBORROW8(lVar8,lVar5)" identifier (argument_list "(lVar8,lVar5)" ( identifier , identifier ))) != (binary_expression "lVar8 + lVar4 * -2 < 0" (binary_expression "lVar8 + lVar4 * -2" identifier + (binary_expression "lVar4 * -2" identifier * number_literal)) < number_literal))) )) (compound_statement "{\n          lVar5 = lVar8;\n        }" { (expression_statement "lVar5 = lVar8;" (assignment_expression "lVar5 = lVar8" identifier = identifier) ;) })) (expression_statement "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp);" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                  (__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp)" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx" (binary_expression "__move_merge<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,___gnu_cxx" * (ERROR "," ,) identifier)) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp)" ( (comma_expression "__buffer,__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp" identifier , (comma_expression "__buffer + lVar5,__buffer + lVar5,__last2,__first,__comp" (binary_expression "__buffer + lVar5" identifier + identifier) , (comma_expression "__buffer + lVar5,__last2,__first,__comp" (binary_expression "__buffer + lVar5" identifier + identifier) , (comma_expression "__last2,__first,__comp" identifier , (comma_expression "__first,__comp" identifier , identifier))))) ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      } while (lVar6 <= lVar3);" do (compound_statement "{\n        __last2_00 = ppOVar1 + lVar4 * 4;\n        _Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);\n        lVar3 = (long)__last2 - (long)__last2_00 >> 3;\n        ppOVar1 = __last2_00;\n      }" { (expression_statement "__last2_00 = ppOVar1 + lVar4 * 4;" (assignment_expression "__last2_00 = ppOVar1 + lVar4 * 4" identifier = (binary_expression "ppOVar1 + lVar4 * 4" identifier + (binary_expression "lVar4 * 4" identifier * number_literal))) ;) (expression_statement "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp);" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                          (ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp)" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold" (binary_expression "_Var2 = __move_merge<gold::Output_segment**,___gnu_cxx" (assignment_expression "_Var2 = __move_merge<gold" identifier = (binary_expression "__move_merge<gold" identifier < identifier)) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,___gnu_cxx" * (ERROR "," ,) identifier)) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp)" ( (comma_expression "ppOVar1,__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp" identifier , (comma_expression "__last2_00 + lVar4 * -2,__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp" (binary_expression "__last2_00 + lVar4 * -2" identifier + (binary_expression "lVar4 * -2" identifier * number_literal)) , (comma_expression "__last2_00 + lVar4 * -2,__last2_00,_Var2,\n                           __comp" (binary_expression "__last2_00 + lVar4 * -2" identifier + (binary_expression "lVar4 * -2" identifier * number_literal)) , (comma_expression "__last2_00,_Var2,\n                           __comp" identifier , (comma_expression "_Var2,\n                           __comp" identifier , identifier))))) ))) ;) (expression_statement "lVar3 = (long)__last2 - (long)__last2_00 >> 3;" (assignment_expression "lVar3 = (long)__last2 - (long)__last2_00 >> 3" identifier = (binary_expression "(long)__last2 - (long)__last2_00 >> 3" (binary_expression "(long)__last2 - (long)__last2_00" (cast_expression "(long)__last2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__last2_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (expression_statement "ppOVar1 = __last2_00;" (assignment_expression "ppOVar1 = __last2_00" identifier = identifier) ;) }) while (parenthesized_expression "(lVar6 <= lVar3)" ( (binary_expression "lVar6 <= lVar3" identifier <= identifier) )) ;) (if_statement "if (lVar3 <= lVar5) {\n        lVar5 = lVar3;\n      }" if (parenthesized_expression "(lVar3 <= lVar5)" ( (binary_expression "lVar3 <= lVar5" identifier <= identifier) )) (compound_statement "{\n        lVar5 = lVar3;\n      }" { (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) })) (expression_statement "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp);" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n                (__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp)" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold::Output_segment**,_std" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx::__normal_iterator<gold" (binary_expression "__move_merge<gold::Output_segment**,___gnu_cxx" (binary_expression "__move_merge<gold" identifier < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,___gnu_cxx" * (ERROR "," ,) identifier)) (ERROR "::__normal_iterator" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (pointer_expression "*,_std" * (ERROR "," ,) identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Output_segment" : : identifier) * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) (ERROR "::__ops::_Iter_comp_iter" : : identifier : : identifier) < identifier) (ERROR "::Layout::Compare_segments" : : identifier : : identifier) > identifier) > (parenthesized_expression "(__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp)" ( (comma_expression "__last2_00,__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp" identifier , (comma_expression "__last2_00 + lVar5,__last2_00 + lVar5,__last2,_Var2,__comp" (binary_expression "__last2_00 + lVar5" identifier + identifier) , (comma_expression "__last2_00 + lVar5,__last2,_Var2,__comp" (binary_expression "__last2_00 + lVar5" identifier + identifier) , (comma_expression "__last2,_Var2,__comp" identifier , (comma_expression "_Var2,__comp" identifier , identifier))))) ))) ;) (expression_statement "lVar4 = lVar6;" (assignment_expression "lVar4 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(lVar6 < lVar8)" ( (binary_expression "lVar6 < lVar8" identifier < identifier) )) ;) })) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)" identifier (parameter_list "(long param_1,long param_2,long param_3,undefined8 param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar5 = param_2 - param_1;" (assignment_expression "lVar5 = param_2 - param_1" identifier = (binary_expression "param_2 - param_1" identifier - identifier)) ;) (expression_statement "lVar1 = param_3 + lVar5;" (assignment_expression "lVar1 = param_3 + lVar5" identifier = (binary_expression "param_3 + lVar5" identifier + identifier)) ;) (expression_statement "lVar9 = lVar5 >> 3;" (assignment_expression "lVar9 = lVar5 >> 3" identifier = (binary_expression "lVar5 >> 3" identifier >> number_literal)) ;) (expression_statement "lVar7 = param_1;" (assignment_expression "lVar7 = param_1" identifier = identifier) ;) (if_statement "if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" if (parenthesized_expression "(lVar5 < 0x31)" ( (binary_expression "lVar5 < 0x31" identifier < number_literal) )) (compound_statement "{\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" { (expression_statement "FUN_0038b340(param_1,param_2,param_4);" (call_expression "FUN_0038b340(param_1,param_2,param_4)" identifier (argument_list "(param_1,param_2,param_4)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);" do (compound_statement "{\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  }" { (expression_statement "lVar6 = lVar7 + 0x38;" (assignment_expression "lVar6 = lVar7 + 0x38" identifier = (binary_expression "lVar7 + 0x38" identifier + number_literal)) ;) (expression_statement "FUN_0038b340(lVar7,lVar6,param_4);" (call_expression "FUN_0038b340(lVar7,lVar6,param_4)" identifier (argument_list "(lVar7,lVar6,param_4)" ( identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" identifier = identifier) ;) }) while (parenthesized_expression "(0x30 < param_2 - lVar6)" ( (binary_expression "0x30 < param_2 - lVar6" number_literal < (binary_expression "param_2 - lVar6" identifier - identifier)) )) ;) (expression_statement "FUN_0038b340(lVar6,param_2,param_4);" (call_expression "FUN_0038b340(lVar6,param_2,param_4)" identifier (argument_list "(lVar6,param_2,param_4)" ( identifier , identifier , identifier ))) ;) (if_statement "if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" if (parenthesized_expression "(0x38 < lVar5)" ( (binary_expression "0x38 < lVar5" number_literal < identifier) )) (compound_statement "{\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" { (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" identifier = number_literal) ;) (do_statement "do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);" do (compound_statement "{\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    }" { (expression_statement "lVar6 = lVar7 * 2;" (assignment_expression "lVar6 = lVar7 * 2" identifier = (binary_expression "lVar7 * 2" identifier * number_literal)) ;) (expression_statement "lVar3 = lVar9;" (assignment_expression "lVar3 = lVar9" identifier = identifier) ;) (expression_statement "lVar2 = param_3;" (assignment_expression "lVar2 = param_3" identifier = identifier) ;) (expression_statement "lVar5 = param_1;" (assignment_expression "lVar5 = param_1" identifier = identifier) ;) (if_statement "if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" if (parenthesized_expression "(SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0)" ( (binary_expression "SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" identifier (argument_list "(lVar9,lVar6)" ( identifier , identifier ))) == (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" identifier + (binary_expression "lVar7 * -2" identifier * number_literal)) < number_literal)) )) (compound_statement "{\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" { (expression_statement "lVar8 = param_1;" (assignment_expression "lVar8 = param_1" identifier = identifier) ;) (do_statement "do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);" do (compound_statement "{\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        }" { (expression_statement "lVar5 = lVar8 + lVar7 * 0x10;" (assignment_expression "lVar5 = lVar8 + lVar7 * 0x10" identifier = (binary_expression "lVar8 + lVar7 * 0x10" identifier + (binary_expression "lVar7 * 0x10" identifier * number_literal))) ;) (expression_statement "lVar3 = lVar5 + lVar7 * -8;" (assignment_expression "lVar3 = lVar5 + lVar7 * -8" identifier = (binary_expression "lVar5 + lVar7 * -8" identifier + (binary_expression "lVar7 * -8" identifier * number_literal))) ;) (expression_statement "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);" (assignment_expression "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" identifier = (call_expression "FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" identifier (argument_list "(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "lVar3 = param_2 - lVar5 >> 3;" (assignment_expression "lVar3 = param_2 - lVar5 >> 3" identifier = (binary_expression "param_2 - lVar5 >> 3" (binary_expression "param_2 - lVar5" identifier - identifier) >> number_literal)) ;) (expression_statement "lVar8 = lVar5;" (assignment_expression "lVar8 = lVar5" identifier = identifier) ;) }) while (parenthesized_expression "(lVar6 <= lVar3)" ( (binary_expression "lVar6 <= lVar3" identifier <= identifier) )) ;) })) (if_statement "if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }" if (parenthesized_expression "(lVar7 <= lVar3)" ( (binary_expression "lVar7 <= lVar3" identifier <= identifier) )) (compound_statement "{\n        lVar3 = lVar7;\n      }" { (expression_statement "lVar3 = lVar7;" (assignment_expression "lVar3 = lVar7" identifier = identifier) ;) })) (expression_statement "lVar8 = lVar7 * 4;" (assignment_expression "lVar8 = lVar7 * 4" identifier = (binary_expression "lVar7 * 4" identifier * number_literal)) ;) (expression_statement "lVar3 = lVar5 + lVar3 * 8;" (assignment_expression "lVar3 = lVar5 + lVar3 * 8" identifier = (binary_expression "lVar5 + lVar3 * 8" identifier + (binary_expression "lVar3 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);" (call_expression "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" identifier (argument_list "(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" if (parenthesized_expression "(lVar9 < lVar8)" ( (binary_expression "lVar9 < lVar8" identifier < identifier) )) (compound_statement "{\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" { (if_statement "if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }" if (parenthesized_expression "(lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0)" ( (binary_expression "lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 == lVar6" identifier == identifier) || (binary_expression "SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" identifier (argument_list "(lVar9,lVar6)" ( identifier , identifier ))) != (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" identifier + (binary_expression "lVar7 * -2" identifier * number_literal)) < number_literal))) )) (compound_statement "{\n          lVar6 = lVar9;\n        }" { (expression_statement "lVar6 = lVar9;" (assignment_expression "lVar6 = lVar9" identifier = identifier) ;) })) (expression_statement "lVar7 = param_3 + lVar6 * 8;" (assignment_expression "lVar7 = param_3 + lVar6 * 8" identifier = (binary_expression "param_3 + lVar6 * 8" identifier + (binary_expression "lVar6 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);" (call_expression "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4)" identifier (argument_list "(param_3,lVar7,lVar7,lVar1,param_1,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "lVar5 = param_3;" (assignment_expression "lVar5 = param_3" identifier = identifier) ;) (expression_statement "lVar3 = param_1;" (assignment_expression "lVar3 = param_1" identifier = identifier) ;) (do_statement "do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);" do (compound_statement "{\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      }" { (expression_statement "lVar2 = lVar5 + lVar7 * 0x20;" (assignment_expression "lVar2 = lVar5 + lVar7 * 0x20" identifier = (binary_expression "lVar5 + lVar7 * 0x20" identifier + (binary_expression "lVar7 * 0x20" identifier * number_literal))) ;) (expression_statement "lVar4 = lVar2 + lVar7 * -0x10;" (assignment_expression "lVar4 = lVar2 + lVar7 * -0x10" identifier = (binary_expression "lVar2 + lVar7 * -0x10" identifier + (binary_expression "lVar7 * -0x10" identifier * number_literal))) ;) (expression_statement "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);" (assignment_expression "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" identifier = (call_expression "FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" identifier (argument_list "(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "lVar4 = lVar1 - lVar2 >> 3;" (assignment_expression "lVar4 = lVar1 - lVar2 >> 3" identifier = (binary_expression "lVar1 - lVar2 >> 3" (binary_expression "lVar1 - lVar2" identifier - identifier) >> number_literal)) ;) (expression_statement "lVar5 = lVar2;" (assignment_expression "lVar5 = lVar2" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 <= lVar4)" ( (binary_expression "lVar8 <= lVar4" identifier <= identifier) )) ;) (if_statement "if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }" if (parenthesized_expression "(lVar4 <= lVar6)" ( (binary_expression "lVar4 <= lVar6" identifier <= identifier) )) (compound_statement "{\n        lVar6 = lVar4;\n      }" { (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" identifier = identifier) ;) })) (expression_statement "lVar7 = lVar2 + lVar6 * 8;" (assignment_expression "lVar7 = lVar2 + lVar6 * 8" identifier = (binary_expression "lVar2 + lVar6 * 8" identifier + (binary_expression "lVar6 * 8" identifier * number_literal))) ;) (expression_statement "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);" (call_expression "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" identifier (argument_list "(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "lVar7 = lVar8;" (assignment_expression "lVar7 = lVar8" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 < lVar9)" ( (binary_expression "lVar8 < lVar9" identifier < 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 (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - IDENT)) )) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) == (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) < LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT == IDENT) || (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) != (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) < LIT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0038f7e0(long param_1,long param_2,long param_3,undefined8 param_4)" (identifier "FUN_0038f7e0") (parameter_list "(long param_1,long param_2,long param_3,undefined8 param_4)" (( "(") (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 "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) () ")"))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  long lVar6;\n  long lVar7;\n  long lVar8;\n  long lVar9;\n  \n  lVar5 = param_2 - param_1;\n  lVar1 = param_3 + lVar5;\n  lVar9 = lVar5 >> 3;\n  lVar7 = param_1;\n  if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }\n  do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);\n  FUN_0038b340(lVar6,param_2,param_4);\n  if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (expression_statement "lVar5 = param_2 - param_1;" (assignment_expression "lVar5 = param_2 - param_1" (identifier "lVar5") (= "=") (binary_expression "param_2 - param_1" (identifier "param_2") (- "-") (identifier "param_1"))) (; ";")) (expression_statement "lVar1 = param_3 + lVar5;" (assignment_expression "lVar1 = param_3 + lVar5" (identifier "lVar1") (= "=") (binary_expression "param_3 + lVar5" (identifier "param_3") (+ "+") (identifier "lVar5"))) (; ";")) (expression_statement "lVar9 = lVar5 >> 3;" (assignment_expression "lVar9 = lVar5 >> 3" (identifier "lVar9") (= "=") (binary_expression "lVar5 >> 3" (identifier "lVar5") (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar7 = param_1;" (assignment_expression "lVar7 = param_1" (identifier "lVar7") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (lVar5 < 0x31) {\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" (if "if") (parenthesized_expression "(lVar5 < 0x31)" (( "(") (binary_expression "lVar5 < 0x31" (identifier "lVar5") (< "<") (number_literal "0x31")) () ")")) (compound_statement "{\n    FUN_0038b340(param_1,param_2,param_4);\n    return;\n  }" ({ "{") (expression_statement "FUN_0038b340(param_1,param_2,param_4);" (call_expression "FUN_0038b340(param_1,param_2,param_4)" (identifier "FUN_0038b340") (argument_list "(param_1,param_2,param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_4") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (do_statement "do {\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  } while (0x30 < param_2 - lVar6);" (do "do") (compound_statement "{\n    lVar6 = lVar7 + 0x38;\n    FUN_0038b340(lVar7,lVar6,param_4);\n    lVar7 = lVar6;\n  }" ({ "{") (expression_statement "lVar6 = lVar7 + 0x38;" (assignment_expression "lVar6 = lVar7 + 0x38" (identifier "lVar6") (= "=") (binary_expression "lVar7 + 0x38" (identifier "lVar7") (+ "+") (number_literal "0x38"))) (; ";")) (expression_statement "FUN_0038b340(lVar7,lVar6,param_4);" (call_expression "FUN_0038b340(lVar7,lVar6,param_4)" (identifier "FUN_0038b340") (argument_list "(lVar7,lVar6,param_4)" (( "(") (identifier "lVar7") (, ",") (identifier "lVar6") (, ",") (identifier "param_4") () ")"))) (; ";")) (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" (identifier "lVar7") (= "=") (identifier "lVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0x30 < param_2 - lVar6)" (( "(") (binary_expression "0x30 < param_2 - lVar6" (number_literal "0x30") (< "<") (binary_expression "param_2 - lVar6" (identifier "param_2") (- "-") (identifier "lVar6"))) () ")")) (; ";")) (expression_statement "FUN_0038b340(lVar6,param_2,param_4);" (call_expression "FUN_0038b340(lVar6,param_2,param_4)" (identifier "FUN_0038b340") (argument_list "(lVar6,param_2,param_4)" (( "(") (identifier "lVar6") (, ",") (identifier "param_2") (, ",") (identifier "param_4") () ")"))) (; ";")) (if_statement "if (0x38 < lVar5) {\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" (if "if") (parenthesized_expression "(0x38 < lVar5)" (( "(") (binary_expression "0x38 < lVar5" (number_literal "0x38") (< "<") (identifier "lVar5")) () ")")) (compound_statement "{\n    lVar7 = 7;\n    do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);\n  }" ({ "{") (expression_statement "lVar7 = 7;" (assignment_expression "lVar7 = 7" (identifier "lVar7") (= "=") (number_literal "7")) (; ";")) (do_statement "do {\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    } while (lVar8 < lVar9);" (do "do") (compound_statement "{\n      lVar6 = lVar7 * 2;\n      lVar3 = lVar9;\n      lVar2 = param_3;\n      lVar5 = param_1;\n      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }\n      if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }\n      lVar8 = lVar7 * 4;\n      lVar3 = lVar5 + lVar3 * 8;\n      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);\n      if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }\n      lVar5 = param_3;\n      lVar3 = param_1;\n      do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);\n      if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }\n      lVar7 = lVar2 + lVar6 * 8;\n      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);\n      lVar7 = lVar8;\n    }" ({ "{") (expression_statement "lVar6 = lVar7 * 2;" (assignment_expression "lVar6 = lVar7 * 2" (identifier "lVar6") (= "=") (binary_expression "lVar7 * 2" (identifier "lVar7") (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar3 = lVar9;" (assignment_expression "lVar3 = lVar9" (identifier "lVar3") (= "=") (identifier "lVar9")) (; ";")) (expression_statement "lVar2 = param_3;" (assignment_expression "lVar2 = param_3" (identifier "lVar2") (= "=") (identifier "param_3")) (; ";")) (expression_statement "lVar5 = param_1;" (assignment_expression "lVar5 = param_1" (identifier "lVar5") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" (if "if") (parenthesized_expression "(SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0)" (( "(") (binary_expression "SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" (identifier "SBORROW8") (argument_list "(lVar9,lVar6)" (( "(") (identifier "lVar9") (, ",") (identifier "lVar6") () ")"))) (== "==") (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" (identifier "lVar9") (+ "+") (binary_expression "lVar7 * -2" (identifier "lVar7") (* "*") (number_literal "-2"))) (< "<") (number_literal "0"))) () ")")) (compound_statement "{\n        lVar8 = param_1;\n        do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);\n      }" ({ "{") (expression_statement "lVar8 = param_1;" (assignment_expression "lVar8 = param_1" (identifier "lVar8") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        } while (lVar6 <= lVar3);" (do "do") (compound_statement "{\n          lVar5 = lVar8 + lVar7 * 0x10;\n          lVar3 = lVar5 + lVar7 * -8;\n          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);\n          lVar3 = param_2 - lVar5 >> 3;\n          lVar8 = lVar5;\n        }" ({ "{") (expression_statement "lVar5 = lVar8 + lVar7 * 0x10;" (assignment_expression "lVar5 = lVar8 + lVar7 * 0x10" (identifier "lVar5") (= "=") (binary_expression "lVar8 + lVar7 * 0x10" (identifier "lVar8") (+ "+") (binary_expression "lVar7 * 0x10" (identifier "lVar7") (* "*") (number_literal "0x10")))) (; ";")) (expression_statement "lVar3 = lVar5 + lVar7 * -8;" (assignment_expression "lVar3 = lVar5 + lVar7 * -8" (identifier "lVar3") (= "=") (binary_expression "lVar5 + lVar7 * -8" (identifier "lVar5") (+ "+") (binary_expression "lVar7 * -8" (identifier "lVar7") (* "*") (number_literal "-8")))) (; ";")) (expression_statement "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);" (assignment_expression "lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" (identifier "lVar2") (= "=") (call_expression "FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" (identifier "FUN_0038f660") (argument_list "(lVar8,lVar3,lVar3,lVar5,lVar2,param_4)" (( "(") (identifier "lVar8") (, ",") (identifier "lVar3") (, ",") (identifier "lVar3") (, ",") (identifier "lVar5") (, ",") (identifier "lVar2") (, ",") (identifier "param_4") () ")")))) (; ";")) (expression_statement "lVar3 = param_2 - lVar5 >> 3;" (assignment_expression "lVar3 = param_2 - lVar5 >> 3" (identifier "lVar3") (= "=") (binary_expression "param_2 - lVar5 >> 3" (binary_expression "param_2 - lVar5" (identifier "param_2") (- "-") (identifier "lVar5")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar8 = lVar5;" (assignment_expression "lVar8 = lVar5" (identifier "lVar8") (= "=") (identifier "lVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar6 <= lVar3)" (( "(") (binary_expression "lVar6 <= lVar3" (identifier "lVar6") (<= "<=") (identifier "lVar3")) () ")")) (; ";")) (} "}"))) (if_statement "if (lVar7 <= lVar3) {\n        lVar3 = lVar7;\n      }" (if "if") (parenthesized_expression "(lVar7 <= lVar3)" (( "(") (binary_expression "lVar7 <= lVar3" (identifier "lVar7") (<= "<=") (identifier "lVar3")) () ")")) (compound_statement "{\n        lVar3 = lVar7;\n      }" ({ "{") (expression_statement "lVar3 = lVar7;" (assignment_expression "lVar3 = lVar7" (identifier "lVar3") (= "=") (identifier "lVar7")) (; ";")) (} "}"))) (expression_statement "lVar8 = lVar7 * 4;" (assignment_expression "lVar8 = lVar7 * 4" (identifier "lVar8") (= "=") (binary_expression "lVar7 * 4" (identifier "lVar7") (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar3 = lVar5 + lVar3 * 8;" (assignment_expression "lVar3 = lVar5 + lVar3 * 8" (identifier "lVar3") (= "=") (binary_expression "lVar5 + lVar3 * 8" (identifier "lVar5") (+ "+") (binary_expression "lVar3 * 8" (identifier "lVar3") (* "*") (number_literal "8")))) (; ";")) (expression_statement "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);" (call_expression "FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" (identifier "FUN_0038f660") (argument_list "(lVar5,lVar3,lVar3,param_2,lVar2,param_4)" (( "(") (identifier "lVar5") (, ",") (identifier "lVar3") (, ",") (identifier "lVar3") (, ",") (identifier "param_2") (, ",") (identifier "lVar2") (, ",") (identifier "param_4") () ")"))) (; ";")) (if_statement "if (lVar9 < lVar8) {\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" (if "if") (parenthesized_expression "(lVar9 < lVar8)" (( "(") (binary_expression "lVar9 < lVar8" (identifier "lVar9") (< "<") (identifier "lVar8")) () ")")) (compound_statement "{\n        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }\n        lVar7 = param_3 + lVar6 * 8;\n        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);\n        return;\n      }" ({ "{") (if_statement "if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {\n          lVar6 = lVar9;\n        }" (if "if") (parenthesized_expression "(lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0)" (( "(") (binary_expression "lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 == lVar6" (identifier "lVar9") (== "==") (identifier "lVar6")) (|| "||") (binary_expression "SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0" (call_expression "SBORROW8(lVar9,lVar6)" (identifier "SBORROW8") (argument_list "(lVar9,lVar6)" (( "(") (identifier "lVar9") (, ",") (identifier "lVar6") () ")"))) (!= "!=") (binary_expression "lVar9 + lVar7 * -2 < 0" (binary_expression "lVar9 + lVar7 * -2" (identifier "lVar9") (+ "+") (binary_expression "lVar7 * -2" (identifier "lVar7") (* "*") (number_literal "-2"))) (< "<") (number_literal "0")))) () ")")) (compound_statement "{\n          lVar6 = lVar9;\n        }" ({ "{") (expression_statement "lVar6 = lVar9;" (assignment_expression "lVar6 = lVar9" (identifier "lVar6") (= "=") (identifier "lVar9")) (; ";")) (} "}"))) (expression_statement "lVar7 = param_3 + lVar6 * 8;" (assignment_expression "lVar7 = param_3 + lVar6 * 8" (identifier "lVar7") (= "=") (binary_expression "param_3 + lVar6 * 8" (identifier "param_3") (+ "+") (binary_expression "lVar6 * 8" (identifier "lVar6") (* "*") (number_literal "8")))) (; ";")) (expression_statement "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);" (call_expression "FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4)" (identifier "FUN_0038f720") (argument_list "(param_3,lVar7,lVar7,lVar1,param_1,param_4)" (( "(") (identifier "param_3") (, ",") (identifier "lVar7") (, ",") (identifier "lVar7") (, ",") (identifier "lVar1") (, ",") (identifier "param_1") (, ",") (identifier "param_4") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "lVar5 = param_3;" (assignment_expression "lVar5 = param_3" (identifier "lVar5") (= "=") (identifier "param_3")) (; ";")) (expression_statement "lVar3 = param_1;" (assignment_expression "lVar3 = param_1" (identifier "lVar3") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      } while (lVar8 <= lVar4);" (do "do") (compound_statement "{\n        lVar2 = lVar5 + lVar7 * 0x20;\n        lVar4 = lVar2 + lVar7 * -0x10;\n        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);\n        lVar4 = lVar1 - lVar2 >> 3;\n        lVar5 = lVar2;\n      }" ({ "{") (expression_statement "lVar2 = lVar5 + lVar7 * 0x20;" (assignment_expression "lVar2 = lVar5 + lVar7 * 0x20" (identifier "lVar2") (= "=") (binary_expression "lVar5 + lVar7 * 0x20" (identifier "lVar5") (+ "+") (binary_expression "lVar7 * 0x20" (identifier "lVar7") (* "*") (number_literal "0x20")))) (; ";")) (expression_statement "lVar4 = lVar2 + lVar7 * -0x10;" (assignment_expression "lVar4 = lVar2 + lVar7 * -0x10" (identifier "lVar4") (= "=") (binary_expression "lVar2 + lVar7 * -0x10" (identifier "lVar2") (+ "+") (binary_expression "lVar7 * -0x10" (identifier "lVar7") (* "*") (number_literal "-0x10")))) (; ";")) (expression_statement "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);" (assignment_expression "lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" (identifier "lVar3") (= "=") (call_expression "FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" (identifier "FUN_0038f720") (argument_list "(lVar5,lVar4,lVar4,lVar2,lVar3,param_4)" (( "(") (identifier "lVar5") (, ",") (identifier "lVar4") (, ",") (identifier "lVar4") (, ",") (identifier "lVar2") (, ",") (identifier "lVar3") (, ",") (identifier "param_4") () ")")))) (; ";")) (expression_statement "lVar4 = lVar1 - lVar2 >> 3;" (assignment_expression "lVar4 = lVar1 - lVar2 >> 3" (identifier "lVar4") (= "=") (binary_expression "lVar1 - lVar2 >> 3" (binary_expression "lVar1 - lVar2" (identifier "lVar1") (- "-") (identifier "lVar2")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar5 = lVar2;" (assignment_expression "lVar5 = lVar2" (identifier "lVar5") (= "=") (identifier "lVar2")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar8 <= lVar4)" (( "(") (binary_expression "lVar8 <= lVar4" (identifier "lVar8") (<= "<=") (identifier "lVar4")) () ")")) (; ";")) (if_statement "if (lVar4 <= lVar6) {\n        lVar6 = lVar4;\n      }" (if "if") (parenthesized_expression "(lVar4 <= lVar6)" (( "(") (binary_expression "lVar4 <= lVar6" (identifier "lVar4") (<= "<=") (identifier "lVar6")) () ")")) (compound_statement "{\n        lVar6 = lVar4;\n      }" ({ "{") (expression_statement "lVar6 = lVar4;" (assignment_expression "lVar6 = lVar4" (identifier "lVar6") (= "=") (identifier "lVar4")) (; ";")) (} "}"))) (expression_statement "lVar7 = lVar2 + lVar6 * 8;" (assignment_expression "lVar7 = lVar2 + lVar6 * 8" (identifier "lVar7") (= "=") (binary_expression "lVar2 + lVar6 * 8" (identifier "lVar2") (+ "+") (binary_expression "lVar6 * 8" (identifier "lVar6") (* "*") (number_literal "8")))) (; ";")) (expression_statement "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);" (call_expression "FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" (identifier "FUN_0038f720") (argument_list "(lVar2,lVar7,lVar7,lVar1,lVar3,param_4)" (( "(") (identifier "lVar2") (, ",") (identifier "lVar7") (, ",") (identifier "lVar7") (, ",") (identifier "lVar1") (, ",") (identifier "lVar3") (, ",") (identifier "param_4") () ")"))) (; ";")) (expression_statement "lVar7 = lVar8;" (assignment_expression "lVar7 = lVar8" (identifier "lVar7") (= "=") (identifier "lVar8")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar8 < lVar9)" (( "(") (binary_expression "lVar8 < lVar9" (identifier "lVar8") (< "<") (identifier "lVar9")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original name:
   __merge_sort_with_buffer<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> >, gold::Output_segment**,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */

void std::
     __merge_sort_with_buffer<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_14::type_1**,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
               (var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
                __first,var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
                        __last,type_1 **var_19,
               _Iter_comp_iter<var_2::Layout::Compare_segments> __comp)

{
  type_1 **__last2;
  type_1 **var_21;
  type_1 **var_20;
  var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
  var_5;
  long var_17;
  long var_7;
  long var_16;
  long var_18;
  var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>
  var_6;
  long var_12;
  
  var_7 = (long)__last._M_current - (long)__first._M_current;
  __last2 = (type_1 **)((long)var_19 + var_7);
  var_12 = var_7 >> 3;
  var_5._M_current = __first._M_current;
  if (var_7 < 0x31) {
    var_8<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
              (__first,__last,__comp);
    return;
  }
  do {
    var_6._M_current = var_5._M_current + 7;
    var_8<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
              (var_5,var_6,__comp);
    var_5._M_current = var_6._M_current;
  } while (0x30 < (long)__last._M_current - (long)var_6._M_current);
  var_8<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
            (var_6,__last,__comp);
  if (0x38 < var_7) {
    var_7 = 7;
    do {
      var_16 = var_7 * 2;
      var_17 = var_12;
      var_6._M_current = __first._M_current;
      var_20 = var_19;
      var_5._M_current = __first._M_current;
      if (var_11(var_12,var_16) == var_12 + var_7 * -2 < 0) {
        do {
          var_5._M_current = var_6._M_current + var_7 * 2;
          var_20 = var_13<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_14::type_1**,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
                              (var_6,(var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>var_15
                                      )(var_5._M_current + -var_7),
                               (var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>var_15
                                )(var_5._M_current + -var_7),var_5,var_20,__comp);
          var_17 = (long)__last._M_current - (long)var_5._M_current >> 3;
          var_6._M_current = var_5._M_current;
        } while (var_16 <= var_17);
      }
      if (var_7 <= var_17) {
        var_17 = var_7;
      }
      var_18 = var_7 * 4;
      var_13<var_9::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_14::type_1**,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
                (var_5,(var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>var_15
                        )(var_5._M_current + var_17),
                 (var_1<var_2::type_1**,var_3::vector<var_2::type_1*,var_3::allocator<var_2::type_1*>var_4>var_4>var_15
                  )(var_5._M_current + var_17),__last,var_20,__comp);
      var_20 = var_19;
      var_5._M_current = __first._M_current;
      if (var_12 < var_18) {
        if (var_12 == var_16 || var_11(var_12,var_16) != var_12 + var_7 * -2 < 0) {
          var_16 = var_12;
        }
        var_13<var_2::type_1**,var_10::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
                  (var_19,var_19 + var_16,var_19 + var_16,__last2,__first,__comp);
        return;
      }
      do {
        var_21 = var_20 + var_7 * 4;
        var_5 = var_13<var_2::type_1**,var_10::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
                          (var_20,var_21 + var_7 * -2,var_21 + var_7 * -2,var_21,var_5,
                           __comp);
        var_17 = (long)__last2 - (long)var_21 >> 3;
        var_20 = var_21;
      } while (var_18 <= var_17);
      if (var_17 <= var_16) {
        var_16 = var_17;
      }
      var_13<var_2::type_1**,var_10::var_1<var_2::type_1**,var_3::vector<var_2::type_1*>var_4>,var_10::__ops::_Iter_comp_iter<var_2::Layout::Compare_segments>var_4>
                (var_21,var_21 + var_16,var_21 + var_16,__last2,var_5,__comp);
      var_7 = var_18;
    } while (var_18 < var_12);
  }
  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: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (return_statement))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (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: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (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: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (return_statement))))

void MASKED(long param_1,long param_2,long param_3,undefined8 param_4)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  long lVar6;
  long lVar7;
  long lVar8;
  long lVar9;
  
  lVar5 = param_2 - param_1;
  lVar1 = param_3 + lVar5;
  lVar9 = lVar5 >> 3;
  lVar7 = param_1;
  if (lVar5 < 0x31) {
    FUN_0038b340(param_1,param_2,param_4);
    return;
  }
  do {
    lVar6 = lVar7 + 0x38;
    FUN_0038b340(lVar7,lVar6,param_4);
    lVar7 = lVar6;
  } while (0x30 < param_2 - lVar6);
  FUN_0038b340(lVar6,param_2,param_4);
  if (0x38 < lVar5) {
    lVar7 = 7;
    do {
      lVar6 = lVar7 * 2;
      lVar3 = lVar9;
      lVar2 = param_3;
      lVar5 = param_1;
      if (SBORROW8(lVar9,lVar6) == lVar9 + lVar7 * -2 < 0) {
        lVar8 = param_1;
        do {
          lVar5 = lVar8 + lVar7 * 0x10;
          lVar3 = lVar5 + lVar7 * -8;
          lVar2 = FUN_0038f660(lVar8,lVar3,lVar3,lVar5,lVar2,param_4);
          lVar3 = param_2 - lVar5 >> 3;
          lVar8 = lVar5;
        } while (lVar6 <= lVar3);
      }
      if (lVar7 <= lVar3) {
        lVar3 = lVar7;
      }
      lVar8 = lVar7 * 4;
      lVar3 = lVar5 + lVar3 * 8;
      FUN_0038f660(lVar5,lVar3,lVar3,param_2,lVar2,param_4);
      if (lVar9 < lVar8) {
        if (lVar9 == lVar6 || SBORROW8(lVar9,lVar6) != lVar9 + lVar7 * -2 < 0) {
          lVar6 = lVar9;
        }
        lVar7 = param_3 + lVar6 * 8;
        FUN_0038f720(param_3,lVar7,lVar7,lVar1,param_1,param_4);
        return;
      }
      lVar5 = param_3;
      lVar3 = param_1;
      do {
        lVar2 = lVar5 + lVar7 * 0x20;
        lVar4 = lVar2 + lVar7 * -0x10;
        lVar3 = FUN_0038f720(lVar5,lVar4,lVar4,lVar2,lVar3,param_4);
        lVar4 = lVar1 - lVar2 >> 3;
        lVar5 = lVar2;
      } while (lVar8 <= lVar4);
      if (lVar4 <= lVar6) {
        lVar6 = lVar4;
      }
      lVar7 = lVar2 + lVar6 * 8;
      FUN_0038f720(lVar2,lVar7,lVar7,lVar1,lVar3,param_4);
      lVar7 = lVar8;
    } while (lVar8 < lVar9);
  }
  return;
}

