
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name:
   __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,
   std::vector<gold::Object_merge_map::Input_merge_entry> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>
               (int *__first,int *__last)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  
  if (__last != __first) {
    for (piVar6 = __first + 3; piVar6 != __last; piVar6 = piVar6 + 3) {
      while( true ) {
        iVar1 = *piVar6;
        iVar2 = piVar6[1];
        iVar3 = piVar6[2];
        if (iVar1 < *__first) break;
        piVar5 = piVar6;
        if (iVar1 < piVar6[-3]) {
          do {
            piVar4 = piVar5;
            piVar5 = piVar4 + -3;
            *piVar4 = *piVar5;
            piVar4[1] = piVar4[-2];
            piVar4[2] = piVar4[-1];
          } while (iVar1 < piVar4[-6]);
          *piVar5 = iVar1;
          piVar4[-2] = iVar2;
          piVar4[-1] = iVar3;
        }
        else {
          *piVar6 = iVar1;
          piVar6[1] = iVar2;
          piVar6[2] = iVar3;
        }
        piVar6 = piVar6 + 3;
        if (__last == piVar6) {
          return;
        }
      }
      if (__first != piVar6) {
        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,
                (int)piVar6 - (int)__first);
      }
      *__first = iVar1;
      __first[1] = iVar2;
      __first[2] = iVar3;
    }
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void FUN_00160ca0(int *param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  
  if (param_2 != param_1) {
    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {
      while( true ) {
        iVar1 = *piVar6;
        iVar2 = piVar6[1];
        iVar3 = piVar6[2];
        if (iVar1 < *param_1) break;
        piVar5 = piVar6;
        if (iVar1 < piVar6[-3]) {
          do {
            piVar4 = piVar5;
            piVar5 = piVar4 + -3;
            *piVar4 = *piVar5;
            piVar4[1] = piVar4[-2];
            piVar4[2] = piVar4[-1];
          } while (iVar1 < piVar4[-6]);
          *piVar5 = iVar1;
          piVar4[-2] = iVar2;
          piVar4[-1] = iVar3;
        }
        else {
          *piVar6 = iVar1;
          piVar6[1] = iVar2;
          piVar6[2] = iVar3;
        }
        piVar6 = piVar6 + 3;
        if (param_2 == piVar6) {
          return;
        }
      }
      if (param_1 != piVar6) {
        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,
                (int)piVar6 - (int)param_1);
      }
      *param_1 = iVar1;
      param_1[1] = iVar2;
      param_1[2] = iVar3;
    }
  }
  return;
}


CALL 0x0004fb76
ADD EAX,0x1a135b
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV dword ptr [ESP + 0xc],EAX
MOV EBP,dword ptr [ESP + 0x30]
CMP dword ptr [ESP + 0x34],EBP
JZ 0x00160d6c
LEA ESI,[EBP + 0xc]
CMP ESI,dword ptr [ESP + 0x34]
JNZ 0x00160d1f
JMP 0x00160d6c
CMP EBP,ESI
JZ 0x00160d0d
MOV EAX,ESI
MOV dword ptr [ESP + 0x4],EDX
MOV EDX,0xc
SUB ESP,0x4
SUB EAX,EBP
MOV dword ptr [ESP + 0xc],ECX
SUB EDX,EAX
PUSH EAX
MOV EAX,EDX
PUSH EBP
ADD EAX,ESI
PUSH EAX
MOV EBX,dword ptr [ESP + 0x1c]
CALL 0x000268a0
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ESP + 0x4]
MOV dword ptr [EBP],EDI
ADD ESI,0xc
MOV dword ptr [EBP + 0x4],ECX
MOV dword ptr [EBP + 0x8],EDX
CMP dword ptr [ESP + 0x34],ESI
JZ 0x00160d6c
MOV EDI,dword ptr [ESI]
MOV ECX,dword ptr [ESI + 0x4]
MOV EDX,dword ptr [ESI + 0x8]
CMP EDI,dword ptr [EBP]
JL 0x00160cd8
LEA EAX,[ESI + -0xc]
CMP EDI,dword ptr [ESI + -0xc]
JL 0x00160d42
JMP 0x00160d78
MOV EAX,EBX
MOV EBX,dword ptr [EAX]
MOV dword ptr [EAX + 0xc],EBX
MOV EBX,dword ptr [EAX + 0x4]
MOV dword ptr [EAX + 0x10],EBX
MOV EBX,dword ptr [EAX + 0x8]
MOV dword ptr [EAX + 0x14],EBX
LEA EBX,[EAX + -0xc]
CMP EDI,dword ptr [EAX + -0xc]
JL 0x00160d40
MOV dword ptr [EAX],EDI
MOV dword ptr [EAX + 0x4],ECX
MOV dword ptr [EAX + 0x8],EDX
ADD ESI,0xc
CMP dword ptr [ESP + 0x34],ESI
JNZ 0x00160d1f
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,ESI
MOV dword ptr [EAX],EDI
MOV dword ptr [EAX + 0x4],ECX
MOV dword ptr [EAX + 0x8],EDX
JMP 0x00160d63
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid FUN_00160ca0(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_00160ca0(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00160ca0(int *param_1,int *param_2)" identifier (parameter_list "(int *param_1,int *param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (if_statement "if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" if (parenthesized_expression "(param_2 != param_1)" ( (binary_expression "param_2 != param_1" identifier != identifier) )) (compound_statement "{\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" { (for_statement "for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" for ( (assignment_expression "piVar6 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ; (binary_expression "piVar6 != param_2" identifier != identifier) ; (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ) (compound_statement "{\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" { (while_statement "while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" { (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar2 = piVar6[1];" (assignment_expression "iVar2 = piVar6[1]" identifier = (subscript_expression "piVar6[1]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = piVar6[2];" (assignment_expression "iVar3 = piVar6[2]" identifier = (subscript_expression "piVar6[2]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 < *param_1) break;" if (parenthesized_expression "(iVar1 < *param_1)" ( (binary_expression "iVar1 < *param_1" identifier < (pointer_expression "*param_1" * identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar5 = piVar6;" (assignment_expression "piVar5 = piVar6" identifier = identifier) ;) (if_statement "if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" if (parenthesized_expression "(iVar1 < piVar6[-3])" ( (binary_expression "iVar1 < piVar6[-3]" identifier < (subscript_expression "piVar6[-3]" identifier [ number_literal ])) )) (compound_statement "{\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }" { (do_statement "do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);" do (compound_statement "{\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          }" { (expression_statement "piVar4 = piVar5;" (assignment_expression "piVar4 = piVar5" identifier = identifier) ;) (expression_statement "piVar5 = piVar4 + -3;" (assignment_expression "piVar5 = piVar4 + -3" identifier = (binary_expression "piVar4 + -3" identifier + number_literal)) ;) (expression_statement "*piVar4 = *piVar5;" (assignment_expression "*piVar4 = *piVar5" (pointer_expression "*piVar4" * identifier) = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar4[1] = piVar4[-2];" (assignment_expression "piVar4[1] = piVar4[-2]" (subscript_expression "piVar4[1]" identifier [ number_literal ]) = (subscript_expression "piVar4[-2]" identifier [ number_literal ])) ;) (expression_statement "piVar4[2] = piVar4[-1];" (assignment_expression "piVar4[2] = piVar4[-1]" (subscript_expression "piVar4[2]" identifier [ number_literal ]) = (subscript_expression "piVar4[-1]" identifier [ number_literal ])) ;) }) while (parenthesized_expression "(iVar1 < piVar4[-6])" ( (binary_expression "iVar1 < piVar4[-6]" identifier < (subscript_expression "piVar4[-6]" identifier [ number_literal ])) )) ;) (expression_statement "*piVar5 = iVar1;" (assignment_expression "*piVar5 = iVar1" (pointer_expression "*piVar5" * identifier) = identifier) ;) (expression_statement "piVar4[-2] = iVar2;" (assignment_expression "piVar4[-2] = iVar2" (subscript_expression "piVar4[-2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar4[-1] = iVar3;" (assignment_expression "piVar4[-1] = iVar3" (subscript_expression "piVar4[-1]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" else (compound_statement "{\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" { (expression_statement "*piVar6 = iVar1;" (assignment_expression "*piVar6 = iVar1" (pointer_expression "*piVar6" * identifier) = identifier) ;) (expression_statement "piVar6[1] = iVar2;" (assignment_expression "piVar6[1] = iVar2" (subscript_expression "piVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar6[2] = iVar3;" (assignment_expression "piVar6[2] = iVar3" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = identifier) ;) }))) (expression_statement "piVar6 = piVar6 + 3;" (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ;) (if_statement "if (param_2 == piVar6) {\n          return;\n        }" if (parenthesized_expression "(param_2 == piVar6)" ( (binary_expression "param_2 == piVar6" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (if_statement "if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" if (parenthesized_expression "(param_1 != piVar6)" ( (binary_expression "param_1 != piVar6" identifier != identifier) )) (compound_statement "{\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" { (expression_statement "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);" (call_expression "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" identifier (argument_list "((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" ( (cast_expression "(void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" ( (binary_expression "(0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6" (parenthesized_expression "(0xc - ((int)piVar6 - (int)param_1))" ( (binary_expression "0xc - ((int)piVar6 - (int)param_1)" number_literal - (parenthesized_expression "((int)piVar6 - (int)param_1)" ( (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) + (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) })) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar2;" (assignment_expression "param_1[1] = iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar3;" (assignment_expression "param_1[2] = iVar3" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* DWARF original name:\n   __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,\n   std::vector<gold::Object_merge_map::Input_merge_entry> >,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare> > */\n\nvoid std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n               (int *__first,int *__last)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (__last != __first) {\n    for (piVar6 = __first + 3; piVar6 != __last; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }\n      if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }\n      *__first = iVar1;\n      __first[1] = iVar2;\n      __first[2] = iVar3;\n    }\n  }\n  return;\n}\n\n" comment comment comment (declaration "void std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n               (int *__first,int *__last)\n\n{\n  int iVar1;" primitive_type (ERROR "std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::" identifier : : identifier < identifier : : identifier < identifier : : identifier : :) identifier (ERROR "*" *) , (ERROR "_std::vector<gold::Object_merge_map::Input_merge_entry>" identifier : : identifier < identifier : : identifier : : identifier >) identifier (ERROR ">" >) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>\n               (int *__first,int *__last)\n\n{\n  int" identifier : : identifier : : identifier < identifier : : identifier : : identifier > (function_declarator "_>\n               (int *__first,int *__last)" identifier (ERROR ">" >) (parameter_list "(int *__first,int *__last)" ( (parameter_declaration "int *__first" primitive_type (pointer_declarator "*__first" * identifier)) , (parameter_declaration "int *__last" primitive_type (pointer_declarator "*__last" * identifier)) ))) { primitive_type) identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (if_statement "if (__last != __first) {\n    for (piVar6 = __first + 3; piVar6 != __last; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }\n      if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }\n      *__first = iVar1;\n      __first[1] = iVar2;\n      __first[2] = iVar3;\n    }\n  }" if (parenthesized_expression "(__last != __first)" ( (binary_expression "__last != __first" identifier != identifier) )) (compound_statement "{\n    for (piVar6 = __first + 3; piVar6 != __last; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }\n      if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }\n      *__first = iVar1;\n      __first[1] = iVar2;\n      __first[2] = iVar3;\n    }\n  }" { (for_statement "for (piVar6 = __first + 3; piVar6 != __last; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }\n      if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }\n      *__first = iVar1;\n      __first[1] = iVar2;\n      __first[2] = iVar3;\n    }" for ( (assignment_expression "piVar6 = __first + 3" identifier = (binary_expression "__first + 3" identifier + number_literal)) ; (binary_expression "piVar6 != __last" identifier != identifier) ; (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ) (compound_statement "{\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }\n      if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }\n      *__first = iVar1;\n      __first[1] = iVar2;\n      __first[2] = iVar3;\n    }" { (while_statement "while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *__first) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (__last == piVar6) {\n          return;\n        }\n      }" { (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar2 = piVar6[1];" (assignment_expression "iVar2 = piVar6[1]" identifier = (subscript_expression "piVar6[1]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = piVar6[2];" (assignment_expression "iVar3 = piVar6[2]" identifier = (subscript_expression "piVar6[2]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 < *__first) break;" if (parenthesized_expression "(iVar1 < *__first)" ( (binary_expression "iVar1 < *__first" identifier < (pointer_expression "*__first" * identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar5 = piVar6;" (assignment_expression "piVar5 = piVar6" identifier = identifier) ;) (if_statement "if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" if (parenthesized_expression "(iVar1 < piVar6[-3])" ( (binary_expression "iVar1 < piVar6[-3]" identifier < (subscript_expression "piVar6[-3]" identifier [ number_literal ])) )) (compound_statement "{\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }" { (do_statement "do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);" do (compound_statement "{\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          }" { (expression_statement "piVar4 = piVar5;" (assignment_expression "piVar4 = piVar5" identifier = identifier) ;) (expression_statement "piVar5 = piVar4 + -3;" (assignment_expression "piVar5 = piVar4 + -3" identifier = (binary_expression "piVar4 + -3" identifier + number_literal)) ;) (expression_statement "*piVar4 = *piVar5;" (assignment_expression "*piVar4 = *piVar5" (pointer_expression "*piVar4" * identifier) = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar4[1] = piVar4[-2];" (assignment_expression "piVar4[1] = piVar4[-2]" (subscript_expression "piVar4[1]" identifier [ number_literal ]) = (subscript_expression "piVar4[-2]" identifier [ number_literal ])) ;) (expression_statement "piVar4[2] = piVar4[-1];" (assignment_expression "piVar4[2] = piVar4[-1]" (subscript_expression "piVar4[2]" identifier [ number_literal ]) = (subscript_expression "piVar4[-1]" identifier [ number_literal ])) ;) }) while (parenthesized_expression "(iVar1 < piVar4[-6])" ( (binary_expression "iVar1 < piVar4[-6]" identifier < (subscript_expression "piVar4[-6]" identifier [ number_literal ])) )) ;) (expression_statement "*piVar5 = iVar1;" (assignment_expression "*piVar5 = iVar1" (pointer_expression "*piVar5" * identifier) = identifier) ;) (expression_statement "piVar4[-2] = iVar2;" (assignment_expression "piVar4[-2] = iVar2" (subscript_expression "piVar4[-2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar4[-1] = iVar3;" (assignment_expression "piVar4[-1] = iVar3" (subscript_expression "piVar4[-1]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" else (compound_statement "{\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" { (expression_statement "*piVar6 = iVar1;" (assignment_expression "*piVar6 = iVar1" (pointer_expression "*piVar6" * identifier) = identifier) ;) (expression_statement "piVar6[1] = iVar2;" (assignment_expression "piVar6[1] = iVar2" (subscript_expression "piVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar6[2] = iVar3;" (assignment_expression "piVar6[2] = iVar3" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = identifier) ;) }))) (expression_statement "piVar6 = piVar6 + 3;" (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ;) (if_statement "if (__last == piVar6) {\n          return;\n        }" if (parenthesized_expression "(__last == piVar6)" ( (binary_expression "__last == piVar6" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (if_statement "if (__first != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }" if (parenthesized_expression "(__first != piVar6)" ( (binary_expression "__first != piVar6" identifier != identifier) )) (compound_statement "{\n        memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);\n      }" { (expression_statement "memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first);" (call_expression "memmove((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first)" identifier (argument_list "((void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6),__first,\n                (int)piVar6 - (int)__first)" ( (cast_expression "(void *)((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((0xc - ((int)piVar6 - (int)__first)) + (int)piVar6)" ( (binary_expression "(0xc - ((int)piVar6 - (int)__first)) + (int)piVar6" (parenthesized_expression "(0xc - ((int)piVar6 - (int)__first))" ( (binary_expression "0xc - ((int)piVar6 - (int)__first)" number_literal - (parenthesized_expression "((int)piVar6 - (int)__first)" ( (binary_expression "(int)piVar6 - (int)__first" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)__first" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) + (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , (binary_expression "(int)piVar6 - (int)__first" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)__first" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) })) (expression_statement "*__first = iVar1;" (assignment_expression "*__first = iVar1" (pointer_expression "*__first" * identifier) = identifier) ;) (expression_statement "__first[1] = iVar2;" (assignment_expression "__first[1] = iVar2" (subscript_expression "__first[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__first[2] = iVar3;" (assignment_expression "__first[2] = iVar3" (subscript_expression "__first[2]" identifier [ number_literal ]) = identifier) ;) })) })) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00160ca0(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00160ca0(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00160ca0(int *param_1,int *param_2)" identifier (parameter_list "(int *param_1,int *param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (if_statement "if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" if (parenthesized_expression "(param_2 != param_1)" ( (binary_expression "param_2 != param_1" identifier != identifier) )) (compound_statement "{\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" { (for_statement "for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" for ( (assignment_expression "piVar6 = param_1 + 3" identifier = (binary_expression "param_1 + 3" identifier + number_literal)) ; (binary_expression "piVar6 != param_2" identifier != identifier) ; (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ) (compound_statement "{\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" { (while_statement "while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" { (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar2 = piVar6[1];" (assignment_expression "iVar2 = piVar6[1]" identifier = (subscript_expression "piVar6[1]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = piVar6[2];" (assignment_expression "iVar3 = piVar6[2]" identifier = (subscript_expression "piVar6[2]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 < *param_1) break;" if (parenthesized_expression "(iVar1 < *param_1)" ( (binary_expression "iVar1 < *param_1" identifier < (pointer_expression "*param_1" * identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar5 = piVar6;" (assignment_expression "piVar5 = piVar6" identifier = identifier) ;) (if_statement "if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" if (parenthesized_expression "(iVar1 < piVar6[-3])" ( (binary_expression "iVar1 < piVar6[-3]" identifier < (subscript_expression "piVar6[-3]" identifier [ number_literal ])) )) (compound_statement "{\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }" { (do_statement "do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);" do (compound_statement "{\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          }" { (expression_statement "piVar4 = piVar5;" (assignment_expression "piVar4 = piVar5" identifier = identifier) ;) (expression_statement "piVar5 = piVar4 + -3;" (assignment_expression "piVar5 = piVar4 + -3" identifier = (binary_expression "piVar4 + -3" identifier + number_literal)) ;) (expression_statement "*piVar4 = *piVar5;" (assignment_expression "*piVar4 = *piVar5" (pointer_expression "*piVar4" * identifier) = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar4[1] = piVar4[-2];" (assignment_expression "piVar4[1] = piVar4[-2]" (subscript_expression "piVar4[1]" identifier [ number_literal ]) = (subscript_expression "piVar4[-2]" identifier [ number_literal ])) ;) (expression_statement "piVar4[2] = piVar4[-1];" (assignment_expression "piVar4[2] = piVar4[-1]" (subscript_expression "piVar4[2]" identifier [ number_literal ]) = (subscript_expression "piVar4[-1]" identifier [ number_literal ])) ;) }) while (parenthesized_expression "(iVar1 < piVar4[-6])" ( (binary_expression "iVar1 < piVar4[-6]" identifier < (subscript_expression "piVar4[-6]" identifier [ number_literal ])) )) ;) (expression_statement "*piVar5 = iVar1;" (assignment_expression "*piVar5 = iVar1" (pointer_expression "*piVar5" * identifier) = identifier) ;) (expression_statement "piVar4[-2] = iVar2;" (assignment_expression "piVar4[-2] = iVar2" (subscript_expression "piVar4[-2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar4[-1] = iVar3;" (assignment_expression "piVar4[-1] = iVar3" (subscript_expression "piVar4[-1]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" else (compound_statement "{\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" { (expression_statement "*piVar6 = iVar1;" (assignment_expression "*piVar6 = iVar1" (pointer_expression "*piVar6" * identifier) = identifier) ;) (expression_statement "piVar6[1] = iVar2;" (assignment_expression "piVar6[1] = iVar2" (subscript_expression "piVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar6[2] = iVar3;" (assignment_expression "piVar6[2] = iVar3" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = identifier) ;) }))) (expression_statement "piVar6 = piVar6 + 3;" (assignment_expression "piVar6 = piVar6 + 3" identifier = (binary_expression "piVar6 + 3" identifier + number_literal)) ;) (if_statement "if (param_2 == piVar6) {\n          return;\n        }" if (parenthesized_expression "(param_2 == piVar6)" ( (binary_expression "param_2 == piVar6" identifier == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (if_statement "if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" if (parenthesized_expression "(param_1 != piVar6)" ( (binary_expression "param_1 != piVar6" identifier != identifier) )) (compound_statement "{\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" { (expression_statement "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);" (call_expression "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" identifier (argument_list "((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" ( (cast_expression "(void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" ( (binary_expression "(0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6" (parenthesized_expression "(0xc - ((int)piVar6 - (int)param_1))" ( (binary_expression "0xc - ((int)piVar6 - (int)param_1)" number_literal - (parenthesized_expression "((int)piVar6 - (int)param_1)" ( (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) + (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ;) })) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar2;" (assignment_expression "param_1[1] = iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar3;" (assignment_expression "param_1[2] = iVar3" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (for_statement for ( (assignment_expression IDENT = (binary_expression IDENT + LIT)) ; (binary_expression IDENT != IDENT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * IDENT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) , IDENT , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_00160ca0(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00160ca0(int *param_1,int *param_2)" (identifier "FUN_00160ca0") (parameter_list "(int *param_1,int *param_2)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (if_statement "if (param_2 != param_1) {\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 != param_1)" (( "(") (binary_expression "param_2 != param_1" (identifier "param_2") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }\n  }" ({ "{") (for_statement "for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" (for "for") (( "(") (assignment_expression "piVar6 = param_1 + 3" (identifier "piVar6") (= "=") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3"))) (; ";") (binary_expression "piVar6 != param_2" (identifier "piVar6") (!= "!=") (identifier "param_2")) (; ";") (assignment_expression "piVar6 = piVar6 + 3" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 3" (identifier "piVar6") (+ "+") (number_literal "3"))) () ")") (compound_statement "{\n      while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }\n      if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }\n      *param_1 = iVar1;\n      param_1[1] = iVar2;\n      param_1[2] = iVar3;\n    }" ({ "{") (while_statement "while( true ) {\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar1 = *piVar6;\n        iVar2 = piVar6[1];\n        iVar3 = piVar6[2];\n        if (iVar1 < *param_1) break;\n        piVar5 = piVar6;\n        if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }\n        piVar6 = piVar6 + 3;\n        if (param_2 == piVar6) {\n          return;\n        }\n      }" ({ "{") (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" (identifier "iVar1") (= "=") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (; ";")) (expression_statement "iVar2 = piVar6[1];" (assignment_expression "iVar2 = piVar6[1]" (identifier "iVar2") (= "=") (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar3 = piVar6[2];" (assignment_expression "iVar3 = piVar6[2]" (identifier "iVar3") (= "=") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (iVar1 < *param_1) break;" (if "if") (parenthesized_expression "(iVar1 < *param_1)" (( "(") (binary_expression "iVar1 < *param_1" (identifier "iVar1") (< "<") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "piVar5 = piVar6;" (assignment_expression "piVar5 = piVar6" (identifier "piVar5") (= "=") (identifier "piVar6")) (; ";")) (if_statement "if (iVar1 < piVar6[-3]) {\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }\n        else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" (if "if") (parenthesized_expression "(iVar1 < piVar6[-3])" (( "(") (binary_expression "iVar1 < piVar6[-3]" (identifier "iVar1") (< "<") (subscript_expression "piVar6[-3]" (identifier "piVar6") ([ "[") (number_literal "-3") (] "]"))) () ")")) (compound_statement "{\n          do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);\n          *piVar5 = iVar1;\n          piVar4[-2] = iVar2;\n          piVar4[-1] = iVar3;\n        }" ({ "{") (do_statement "do {\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          } while (iVar1 < piVar4[-6]);" (do "do") (compound_statement "{\n            piVar4 = piVar5;\n            piVar5 = piVar4 + -3;\n            *piVar4 = *piVar5;\n            piVar4[1] = piVar4[-2];\n            piVar4[2] = piVar4[-1];\n          }" ({ "{") (expression_statement "piVar4 = piVar5;" (assignment_expression "piVar4 = piVar5" (identifier "piVar4") (= "=") (identifier "piVar5")) (; ";")) (expression_statement "piVar5 = piVar4 + -3;" (assignment_expression "piVar5 = piVar4 + -3" (identifier "piVar5") (= "=") (binary_expression "piVar4 + -3" (identifier "piVar4") (+ "+") (number_literal "-3"))) (; ";")) (expression_statement "*piVar4 = *piVar5;" (assignment_expression "*piVar4 = *piVar5" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (= "=") (pointer_expression "*piVar5" (* "*") (identifier "piVar5"))) (; ";")) (expression_statement "piVar4[1] = piVar4[-2];" (assignment_expression "piVar4[1] = piVar4[-2]" (subscript_expression "piVar4[1]" (identifier "piVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "piVar4[-2]" (identifier "piVar4") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "piVar4[2] = piVar4[-1];" (assignment_expression "piVar4[2] = piVar4[-1]" (subscript_expression "piVar4[2]" (identifier "piVar4") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "piVar4[-1]" (identifier "piVar4") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar1 < piVar4[-6])" (( "(") (binary_expression "iVar1 < piVar4[-6]" (identifier "iVar1") (< "<") (subscript_expression "piVar4[-6]" (identifier "piVar4") ([ "[") (number_literal "-6") (] "]"))) () ")")) (; ";")) (expression_statement "*piVar5 = iVar1;" (assignment_expression "*piVar5 = iVar1" (pointer_expression "*piVar5" (* "*") (identifier "piVar5")) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "piVar4[-2] = iVar2;" (assignment_expression "piVar4[-2] = iVar2" (subscript_expression "piVar4[-2]" (identifier "piVar4") ([ "[") (number_literal "-2") (] "]")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "piVar4[-1] = iVar3;" (assignment_expression "piVar4[-1] = iVar3" (subscript_expression "piVar4[-1]" (identifier "piVar4") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (} "}")) (else_clause "else {\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" (else "else") (compound_statement "{\n          *piVar6 = iVar1;\n          piVar6[1] = iVar2;\n          piVar6[2] = iVar3;\n        }" ({ "{") (expression_statement "*piVar6 = iVar1;" (assignment_expression "*piVar6 = iVar1" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "piVar6[1] = iVar2;" (assignment_expression "piVar6[1] = iVar2" (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "piVar6[2] = iVar3;" (assignment_expression "piVar6[2] = iVar3" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (} "}")))) (expression_statement "piVar6 = piVar6 + 3;" (assignment_expression "piVar6 = piVar6 + 3" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 3" (identifier "piVar6") (+ "+") (number_literal "3"))) (; ";")) (if_statement "if (param_2 == piVar6) {\n          return;\n        }" (if "if") (parenthesized_expression "(param_2 == piVar6)" (( "(") (binary_expression "param_2 == piVar6" (identifier "param_2") (== "==") (identifier "piVar6")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (if_statement "if (param_1 != piVar6) {\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" (if "if") (parenthesized_expression "(param_1 != piVar6)" (( "(") (binary_expression "param_1 != piVar6" (identifier "param_1") (!= "!=") (identifier "piVar6")) () ")")) (compound_statement "{\n        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);\n      }" ({ "{") (expression_statement "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1);" (call_expression "memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" (identifier "memmove") (argument_list "((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,\n                (int)piVar6 - (int)param_1)" (( "(") (cast_expression "(void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6)" (( "(") (binary_expression "(0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6" (parenthesized_expression "(0xc - ((int)piVar6 - (int)param_1))" (( "(") (binary_expression "0xc - ((int)piVar6 - (int)param_1)" (number_literal "0xc") (- "-") (parenthesized_expression "((int)piVar6 - (int)param_1)" (( "(") (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar6")) (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")"))) () ")")) (+ "+") (cast_expression "(int)piVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar6"))) () ")"))) (, ",") (identifier "param_1") (, ",") (binary_expression "(int)piVar6 - (int)param_1" (cast_expression "(int)piVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar6")) (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = iVar1;" (assignment_expression "*param_1 = iVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "param_1[1] = iVar2;" (assignment_expression "param_1[1] = iVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "param_1[2] = iVar3;" (assignment_expression "param_1[2] = iVar3" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* DWARF original name:
   __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,
   std::vector<gold::Object_merge_map::Input_merge_entry> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Object_merge_map::Input_merge_entry*,_std::vector<gold::Object_merge_map::Input_merge_entry>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Object_merge_map::Input_merge_compare>_>
               (int *var_2,int *var_1)

{
  int var_4;
  int iVar2;
  int iVar3;
  int *var_5;
  int *piVar5;
  int *var_3;
  
  if (var_1 != var_2) {
    for (var_3 = var_2 + 3; var_3 != var_1; var_3 = var_3 + 3) {
      while( true ) {
        var_4 = *var_3;
        iVar2 = var_3[1];
        iVar3 = var_3[2];
        if (var_4 < *var_2) break;
        piVar5 = var_3;
        if (var_4 < var_3[-3]) {
          do {
            var_5 = piVar5;
            piVar5 = var_5 + -3;
            *var_5 = *piVar5;
            var_5[1] = var_5[-2];
            var_5[2] = var_5[-1];
          } while (var_4 < var_5[-6]);
          *piVar5 = var_4;
          var_5[-2] = iVar2;
          var_5[-1] = iVar3;
        }
        else {
          *var_3 = var_4;
          var_3[1] = iVar2;
          var_3[2] = iVar3;
        }
        var_3 = var_3 + 3;
        if (var_1 == var_3) {
          return;
        }
      }
      if (var_2 != var_3) {
        var_6((void *)((0xc - ((int)var_3 - (int)var_2)) + (int)var_3),var_2,
                (int)var_3 - (int)var_2);
      }
      *var_2 = var_4;
      var_2[1] = iVar2;
      var_2[2] = iVar3;
    }
  }
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(int *param_1,int *param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int *piVar6;
  
  if (param_2 != param_1) {
    for (piVar6 = param_1 + 3; piVar6 != param_2; piVar6 = piVar6 + 3) {
      while( true ) {
        iVar1 = *piVar6;
        iVar2 = piVar6[1];
        iVar3 = piVar6[2];
        if (iVar1 < *param_1) break;
        piVar5 = piVar6;
        if (iVar1 < piVar6[-3]) {
          do {
            piVar4 = piVar5;
            piVar5 = piVar4 + -3;
            *piVar4 = *piVar5;
            piVar4[1] = piVar4[-2];
            piVar4[2] = piVar4[-1];
          } while (iVar1 < piVar4[-6]);
          *piVar5 = iVar1;
          piVar4[-2] = iVar2;
          piVar4[-1] = iVar3;
        }
        else {
          *piVar6 = iVar1;
          piVar6[1] = iVar2;
          piVar6[2] = iVar3;
        }
        piVar6 = piVar6 + 3;
        if (param_2 == piVar6) {
          return;
        }
      }
      if (param_1 != piVar6) {
        memmove((void *)((0xc - ((int)piVar6 - (int)param_1)) + (int)piVar6),param_1,
                (int)piVar6 - (int)param_1);
      }
      *param_1 = iVar1;
      param_1[1] = iVar2;
      param_1[2] = iVar3;
    }
  }
  return;
}

