
void sequential_sort(line *lines,size_t nlines,line *temp,_Bool to_temp)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  size_t sVar6;
  char *pcVar7;
  undefined8 uVar8;
  int iVar9;
  long lVar10;
  line *plVar11;
  line *plVar12;
  line *plVar13;
  ulong nlines_00;
  size_t sVar14;
  
  if (nlines == 2) {
    iVar9 = compare(lines + -1,lines + -2);
    if (to_temp) {
      plVar11 = lines + (int)~(uint)(0 < iVar9);
      sVar14 = plVar11->length;
      temp[-1].text = plVar11->text;
      temp[-1].length = sVar14;
      pcVar3 = plVar11->keylim;
      temp[-1].keybeg = plVar11->keybeg;
      temp[-1].keylim = pcVar3;
      plVar11 = lines + (int)((0 < iVar9) - 2);
      sVar14 = plVar11->length;
      temp[-2].text = plVar11->text;
      temp[-2].length = sVar14;
      pcVar3 = plVar11->keylim;
      temp[-2].keybeg = plVar11->keybeg;
      temp[-2].keylim = pcVar3;
    }
    else if (0 < iVar9) {
      pcVar3 = lines[-1].text;
      sVar14 = lines[-1].length;
      temp[-1].text = pcVar3;
      temp[-1].length = sVar14;
      pcVar4 = lines[-1].keybeg;
      pcVar5 = lines[-1].keylim;
      temp[-1].keybeg = pcVar4;
      temp[-1].keylim = pcVar5;
      sVar6 = lines[-2].length;
      lines[-1].text = lines[-2].text;
      lines[-1].length = sVar6;
      pcVar7 = lines[-2].keylim;
      lines[-1].keybeg = lines[-2].keybeg;
      lines[-1].keylim = pcVar7;
      lines[-2].text = pcVar3;
      lines[-2].length = sVar14;
      lines[-2].keybeg = pcVar4;
      lines[-2].keylim = pcVar5;
    }
  }
  else {
    nlines_00 = nlines >> 1;
    sVar14 = nlines - nlines_00;
    if (to_temp) {
      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);
      plVar11 = temp;
      if (3 < nlines) {
        sequential_sort(lines,nlines_00,temp,!to_temp);
      }
    }
    else {
      sequential_sort(lines + -nlines_00,sVar14,temp,false);
      plVar11 = lines;
      if (nlines < 4) {
        sVar6 = lines[-1].length;
        temp[-1].text = lines[-1].text;
        temp[-1].length = sVar6;
        pcVar3 = lines[-1].keylim;
        temp[-1].keybeg = lines[-1].keybeg;
        temp[-1].keylim = pcVar3;
        lines = temp;
      }
      else {
        sequential_sort(lines,nlines_00,temp,!to_temp);
        lines = temp;
      }
    }
    plVar13 = plVar11 + -nlines_00;
    do {
      while( true ) {
        plVar12 = plVar11;
        plVar11 = plVar12 + -1;
        iVar9 = compare(lines + -1,plVar13 + -1);
        if (iVar9 < 1) break;
        sVar6 = plVar13[-1].length;
        plVar11->text = plVar13[-1].text;
        plVar12[-1].length = sVar6;
        pcVar3 = plVar13[-1].keylim;
        plVar12[-1].keybeg = plVar13[-1].keybeg;
        plVar12[-1].keylim = pcVar3;
        sVar14 = sVar14 - 1;
        plVar13 = plVar13 + -1;
        if (sVar14 == 0) {
          lVar10 = -0x20;
          do {
            puVar2 = (undefined8 *)((long)&lines->text + lVar10);
            uVar8 = puVar2[1];
            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);
            *puVar1 = *puVar2;
            puVar1[1] = uVar8;
            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);
            uVar8 = puVar1[1];
            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);
            *puVar2 = *puVar1;
            puVar2[1] = uVar8;
            lVar10 = lVar10 + -0x20;
            nlines_00 = nlines_00 - 1;
          } while (nlines_00 != 0);
          return;
        }
      }
      sVar6 = lines[-1].length;
      plVar11->text = lines[-1].text;
      plVar12[-1].length = sVar6;
      pcVar3 = lines[-1].keylim;
      plVar12[-1].keybeg = lines[-1].keybeg;
      plVar12[-1].keylim = pcVar3;
      nlines_00 = nlines_00 - 1;
      lines = lines + -1;
    } while (nlines_00 != 0);
  }
  return;
}



void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  ulong uVar10;
  long lVar11;
  
  if (param_2 == 2) {
    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);
    if (param_4 == 0) {
      if (0 < iVar6) {
        uVar2 = param_1[-4];
        uVar3 = param_1[-3];
        param_3[-4] = uVar2;
        param_3[-3] = uVar3;
        uVar4 = param_1[-2];
        uVar5 = param_1[-1];
        param_3[-2] = uVar4;
        param_3[-1] = uVar5;
        param_1[-4] = param_1[-8];
        param_1[-3] = param_1[-7];
        param_1[-2] = param_1[-6];
        param_1[-1] = param_1[-5];
        param_1[-8] = uVar2;
        param_1[-7] = uVar3;
        param_1[-6] = uVar4;
        param_1[-5] = uVar5;
      }
    }
    else {
      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;
      uVar2 = puVar7[1];
      param_3[-4] = *puVar7;
      param_3[-3] = uVar2;
      uVar2 = puVar7[3];
      param_3[-2] = puVar7[2];
      param_3[-1] = uVar2;
      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;
      uVar2 = param_1[1];
      param_3[-8] = *param_1;
      param_3[-7] = uVar2;
      uVar2 = param_1[3];
      param_3[-6] = param_1[2];
      param_3[-5] = uVar2;
    }
  }
  else {
    uVar10 = param_2 >> 1;
    lVar11 = param_2 - uVar10;
    if (param_4 == 0) {
      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);
      puVar7 = param_1;
      if (param_2 < 4) {
        uVar2 = param_1[-3];
        param_3[-4] = param_1[-4];
        param_3[-3] = uVar2;
        uVar2 = param_1[-1];
        param_3[-2] = param_1[-2];
        param_3[-1] = uVar2;
        param_1 = param_3;
      }
      else {
        FUN_00105945(param_1,uVar10,param_3,1);
        param_1 = param_3;
      }
    }
    else {
      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);
      puVar7 = param_3;
      if (3 < param_2) {
        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);
      }
    }
    puVar9 = puVar7 + uVar10 * -4;
    do {
      while( true ) {
        puVar8 = puVar7;
        puVar7 = puVar8 + -4;
        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);
        if (iVar6 < 1) break;
        uVar2 = puVar9[-3];
        *puVar7 = puVar9[-4];
        puVar8[-3] = uVar2;
        uVar2 = puVar9[-1];
        puVar8[-2] = puVar9[-2];
        puVar8[-1] = uVar2;
        lVar11 = lVar11 + -1;
        puVar9 = puVar9 + -4;
        if (lVar11 == 0) {
          lVar11 = -0x20;
          do {
            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];
            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);
            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;
            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);
            uVar2 = puVar9[1];
            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);
            *puVar1 = *puVar9;
            puVar1[1] = uVar2;
            lVar11 = lVar11 + -0x20;
            uVar10 = uVar10 - 1;
          } while (uVar10 != 0);
          return;
        }
      }
      uVar2 = param_1[-3];
      *puVar7 = param_1[-4];
      puVar8[-3] = uVar2;
      uVar2 = param_1[-1];
      puVar8[-2] = param_1[-2];
      puVar8[-1] = uVar2;
      uVar10 = uVar10 - 1;
      param_1 = param_1 + -4;
    } while (uVar10 != 0);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV RBP,RDI
MOV RBX,RDX
MOV dword ptr [RSP + 0x8],ECX
CMP RSI,0x2
JZ 0x001059b2
MOV R15,RSI
MOV R13,RSI
SHR R13,0x1
MOV R14,RSI
SUB R14,R13
MOV R12,R13
SHL R12,0x5
NEG R12
LEA RDI,[RDI + R12*0x1]
CMP byte ptr [RSP + 0x8],0x0
JZ 0x00105af4
LEA RDX,[RDX + R12*0x1]
MOV ECX,0x1
MOV RSI,R14
CALL 0x00105945
CMP R15,0x3
JA 0x00105b4e
ADD R12,RBX
SUB RBX,0x20
JMP 0x00105a65
LEA RSI,[RDI + -0x40]
LEA RDI,[RDI + -0x20]
CALL 0x0010587c
CMP byte ptr [RSP + 0x8],0x0
JZ 0x00105a10
TEST EAX,EAX
SETG AL
MOVZX EAX,AL
MOV EDX,EAX
NOT EDX
MOVSXD RDX,EDX
SHL RDX,0x5
ADD RDX,RBP
MOVDQU XMM6,xmmword ptr [RDX]
MOVUPS xmmword ptr [RBX + -0x20],XMM6
MOVDQU XMM7,xmmword ptr [RDX + 0x10]
MOVUPS xmmword ptr [RBX + -0x10],XMM7
SUB EAX,0x2
CDQE
SHL RAX,0x5
ADD RBP,RAX
MOVDQU XMM6,xmmword ptr [RBP]
MOVUPS xmmword ptr [RBX + -0x40],XMM6
MOVDQU XMM7,xmmword ptr [RBP + 0x10]
MOVUPS xmmword ptr [RBX + -0x30],XMM7
JMP 0x00105ac6
TEST EAX,EAX
JLE 0x00105ac6
MOV RSI,qword ptr [RBP + -0x20]
MOV RDI,qword ptr [RBP + -0x18]
MOV qword ptr [RBX + -0x20],RSI
MOV qword ptr [RBX + -0x18],RDI
MOV RAX,qword ptr [RBP + -0x10]
MOV RDX,qword ptr [RBP + -0x8]
MOV qword ptr [RBX + -0x10],RAX
MOV qword ptr [RBX + -0x8],RDX
MOVDQU XMM6,xmmword ptr [RBP + -0x40]
MOVUPS xmmword ptr [RBP + -0x20],XMM6
MOVDQU XMM7,xmmword ptr [RBP + -0x30]
MOVUPS xmmword ptr [RBP + -0x10],XMM7
MOV qword ptr [RBP + -0x40],RSI
MOV qword ptr [RBP + -0x38],RDI
MOV qword ptr [RBP + -0x30],RAX
MOV qword ptr [RBP + -0x28],RDX
JMP 0x00105ac6
MOV R12,qword ptr [RSP + 0x8]
SUB RBX,0x20
LEA RAX,[R12 + -0x20]
MOV qword ptr [RSP + 0x8],RAX
LEA R15,[RBP + -0x20]
MOV RSI,RAX
MOV RDI,R15
CALL 0x0010587c
TEST EAX,EAX
JLE 0x00105ad5
MOV RDX,RBX
MOVDQU XMM2,xmmword ptr [R12 + -0x20]
MOVUPS xmmword ptr [RBX],XMM2
MOVDQU XMM3,xmmword ptr [R12 + -0x10]
MOVUPS xmmword ptr [RBX + 0x10],XMM3
SUB R14,0x1
JNZ 0x00105a5c
MOV RAX,-0x20
MOVDQU XMM4,xmmword ptr [RBP + RAX*0x1]
MOVUPS xmmword ptr [RDX + RAX*0x1],XMM4
MOVDQU XMM5,xmmword ptr [RBP + RAX*0x1 + 0x10]
MOVUPS xmmword ptr [RDX + RAX*0x1 + 0x10],XMM5
SUB RAX,0x20
SUB R13,0x1
JNZ 0x00105aa7
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOVDQU XMM0,xmmword ptr [RBP + -0x20]
MOVUPS xmmword ptr [RBX],XMM0
MOVDQU XMM1,xmmword ptr [RBP + -0x10]
MOVUPS xmmword ptr [RBX + 0x10],XMM1
SUB R13,0x1
JZ 0x00105ac6
MOV RBP,R15
JMP 0x00105a61
MOV ECX,0x0
MOV RSI,R14
CALL 0x00105945
CMP R15,0x3
JA 0x00105b27
MOVDQU XMM6,xmmword ptr [RBP + -0x20]
MOVUPS xmmword ptr [RBX + -0x20],XMM6
MOVDQU XMM7,xmmword ptr [RBP + -0x10]
MOVUPS xmmword ptr [RBX + -0x10],XMM7
MOV RAX,RBX
MOV RBX,RBP
MOV RBP,RAX
JMP 0x001059a6
MOVZX ECX,byte ptr [RSP + 0x8]
XOR ECX,0x1
MOVZX ECX,CL
MOV RDX,RBX
MOV RSI,R13
MOV RDI,RBP
CALL 0x00105945
MOV RAX,RBX
MOV RBX,RBP
MOV RBP,RAX
JMP 0x001059a6
MOVZX ECX,byte ptr [RSP + 0x8]
XOR ECX,0x1
MOVZX ECX,CL
MOV RDX,RBX
MOV RSI,R13
MOV RDI,RBP
CALL 0x00105945
JMP 0x001059a6
(translation_unit "void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)\n\n{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)\n\n{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" identifier (parameter_list "(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "byte param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }" { (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8)" identifier = (call_expression "FUN_0010587c(param_1 + -4,param_1 + -8)" identifier (argument_list "(param_1 + -4,param_1 + -8)" ( (binary_expression "param_1 + -4" identifier + number_literal) , (binary_expression "param_1 + -8" identifier + number_literal) )))) ;) (if_statement "if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }" { (if_statement "if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" { (expression_statement "uVar2 = param_1[-4];" (assignment_expression "uVar2 = param_1[-4]" identifier = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = param_1[-3];" (assignment_expression "uVar3 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = uVar2;" (assignment_expression "param_3[-4] = uVar2" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_3[-3] = uVar3;" (assignment_expression "param_3[-3] = uVar3" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = param_1[-2];" (assignment_expression "uVar4 = param_1[-2]" identifier = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = param_1[-1];" (assignment_expression "uVar5 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = uVar4;" (assignment_expression "param_3[-2] = uVar4" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_3[-1] = uVar5;" (assignment_expression "param_3[-1] = uVar5" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-4] = param_1[-8];" (assignment_expression "param_1[-4] = param_1[-8]" (subscript_expression "param_1[-4]" identifier [ number_literal ]) = (subscript_expression "param_1[-8]" identifier [ number_literal ])) ;) (expression_statement "param_1[-3] = param_1[-7];" (assignment_expression "param_1[-3] = param_1[-7]" (subscript_expression "param_1[-3]" identifier [ number_literal ]) = (subscript_expression "param_1[-7]" identifier [ number_literal ])) ;) (expression_statement "param_1[-2] = param_1[-6];" (assignment_expression "param_1[-2] = param_1[-6]" (subscript_expression "param_1[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-6]" identifier [ number_literal ])) ;) (expression_statement "param_1[-1] = param_1[-5];" (assignment_expression "param_1[-1] = param_1[-5]" (subscript_expression "param_1[-1]" identifier [ number_literal ]) = (subscript_expression "param_1[-5]" identifier [ number_literal ])) ;) (expression_statement "param_1[-8] = uVar2;" (assignment_expression "param_1[-8] = uVar2" (subscript_expression "param_1[-8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-7] = uVar3;" (assignment_expression "param_1[-7] = uVar3" (subscript_expression "param_1[-7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-6] = uVar4;" (assignment_expression "param_1[-6] = uVar4" (subscript_expression "param_1[-6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-5] = uVar5;" (assignment_expression "param_1[-5] = uVar5" (subscript_expression "param_1[-5]" identifier [ number_literal ]) = identifier) ;) })) }) (else_clause "else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" else (compound_statement "{\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" { (expression_statement "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;" (assignment_expression "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4" identifier = (binary_expression "param_1 + (long)(int)~(uint)(0 < iVar6) * 4" identifier + (binary_expression "(long)(int)~(uint)(0 < iVar6) * 4" (cast_expression "(long)(int)~(uint)(0 < iVar6)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)~(uint)(0 < iVar6)" ( (type_descriptor "int" primitive_type) ) (unary_expression "~(uint)(0 < iVar6)" ~ (call_expression "(uint)(0 < iVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )))))) * number_literal))) ;) (expression_statement "uVar2 = puVar7[1];" (assignment_expression "uVar2 = puVar7[1]" identifier = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = *puVar7;" (assignment_expression "param_3[-4] = *puVar7" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = puVar7[3];" (assignment_expression "uVar2 = puVar7[3]" identifier = (subscript_expression "puVar7[3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = puVar7[2];" (assignment_expression "param_3[-2] = puVar7[2]" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = (subscript_expression "puVar7[2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;" (assignment_expression "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4" identifier = (binary_expression "param_1 + (long)(int)((0 < iVar6) - 2) * 4" identifier + (binary_expression "(long)(int)((0 < iVar6) - 2) * 4" (cast_expression "(long)(int)((0 < iVar6) - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((0 < iVar6) - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0 < iVar6) - 2)" ( (binary_expression "(0 < iVar6) - 2" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) - number_literal) )))) * number_literal))) ;) (expression_statement "uVar2 = param_1[1];" (assignment_expression "uVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-8] = *param_1;" (assignment_expression "param_3[-8] = *param_1" (subscript_expression "param_3[-8]" identifier [ number_literal ]) = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "param_3[-7] = uVar2;" (assignment_expression "param_3[-7] = uVar2" (subscript_expression "param_3[-7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-6] = param_1[2];" (assignment_expression "param_3[-6] = param_1[2]" (subscript_expression "param_3[-6]" identifier [ number_literal ]) = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-5] = uVar2;" (assignment_expression "param_3[-5] = uVar2" (subscript_expression "param_3[-5]" identifier [ number_literal ]) = identifier) ;) }))) }) (else_clause "else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" else (compound_statement "{\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" { (expression_statement "uVar10 = param_2 >> 1;" (assignment_expression "uVar10 = param_2 >> 1" identifier = (binary_expression "param_2 >> 1" identifier >> number_literal)) ;) (expression_statement "lVar11 = param_2 - uVar10;" (assignment_expression "lVar11 = param_2 - uVar10" identifier = (binary_expression "param_2 - uVar10" identifier - identifier)) ;) (if_statement "if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }" { (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0)" identifier (argument_list "(param_1 + uVar10 * -4,lVar11,param_3,0)" ( (binary_expression "param_1 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , identifier , identifier , number_literal ))) ;) (expression_statement "puVar7 = param_1;" (assignment_expression "puVar7 = param_1" identifier = identifier) ;) (if_statement "if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" if (parenthesized_expression "(param_2 < 4)" ( (binary_expression "param_2 < 4" identifier < number_literal) )) (compound_statement "{\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }" { (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = param_1[-4];" (assignment_expression "param_3[-4] = param_1[-4]" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = param_1[-2];" (assignment_expression "param_3[-2] = param_1[-2]" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" else (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" { (expression_statement "FUN_00105945(param_1,uVar10,param_3,1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,1)" identifier (argument_list "(param_1,uVar10,param_3,1)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" identifier = identifier) ;) }))) }) (else_clause "else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" else (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" { (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" identifier (argument_list "(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" ( (binary_expression "param_1 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , identifier , (binary_expression "param_3 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , number_literal ))) ;) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" identifier = identifier) ;) (if_statement "if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" if (parenthesized_expression "(3 < param_2)" ( (binary_expression "3 < param_2" number_literal < identifier) )) (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" { (expression_statement "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1)" identifier (argument_list "(param_1,uVar10,param_3,param_4 ^ 1)" ( identifier , identifier , identifier , (binary_expression "param_4 ^ 1" identifier ^ number_literal) ))) ;) })) }))) (expression_statement "puVar9 = puVar7 + uVar10 * -4;" (assignment_expression "puVar9 = puVar7 + uVar10 * -4" identifier = (binary_expression "puVar7 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal))) ;) (do_statement "do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);" do (compound_statement "{\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    }" { (while_statement "while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" { (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = puVar8 + -4;" (assignment_expression "puVar7 = puVar8 + -4" identifier = (binary_expression "puVar8 + -4" identifier + number_literal)) ;) (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4)" identifier = (call_expression "FUN_0010587c(param_1 + -4,puVar9 + -4)" identifier (argument_list "(param_1 + -4,puVar9 + -4)" ( (binary_expression "param_1 + -4" identifier + number_literal) , (binary_expression "puVar9 + -4" identifier + number_literal) )))) ;) (if_statement "if (iVar6 < 1) break;" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = puVar9[-3];" (assignment_expression "uVar2 = puVar9[-3]" identifier = (subscript_expression "puVar9[-3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = puVar9[-4];" (assignment_expression "*puVar7 = puVar9[-4]" (pointer_expression "*puVar7" * identifier) = (subscript_expression "puVar9[-4]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = puVar9[-1];" (assignment_expression "uVar2 = puVar9[-1]" identifier = (subscript_expression "puVar9[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-2] = puVar9[-2];" (assignment_expression "puVar8[-2] = puVar9[-2]" (subscript_expression "puVar8[-2]" identifier [ number_literal ]) = (subscript_expression "puVar9[-2]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar11 = lVar11 + -1;" (assignment_expression "lVar11 = lVar11 + -1" identifier = (binary_expression "lVar11 + -1" identifier + number_literal)) ;) (expression_statement "puVar9 = puVar9 + -4;" (assignment_expression "puVar9 = puVar9 + -4" identifier = (binary_expression "puVar9 + -4" identifier + number_literal)) ;) (if_statement "if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" if (parenthesized_expression "(lVar11 == 0)" ( (binary_expression "lVar11 == 0" identifier == number_literal) )) (compound_statement "{\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" { (expression_statement "lVar11 = -0x20;" (assignment_expression "lVar11 = -0x20" identifier = number_literal) ;) (do_statement "do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);" do (compound_statement "{\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          }" { (expression_statement "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];" (assignment_expression "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1]" identifier = (subscript_expression "((undefined8 *)((long)param_1 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)param_1 + lVar11))" ( (cast_expression "(undefined8 *)((long)param_1 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11)" ( (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11)" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar11)" * (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar11)" ( (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)param_1 + lVar11)" * (cast_expression "(undefined8 *)((long)param_1 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11)" ( (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))))) ;) (expression_statement "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2" (subscript_expression "((undefined8 *)((long)puVar7 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar11))" ( (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar11)" ( (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10)" identifier = (cast_expression "(undefined8 *)((long)param_1 + lVar11 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11 + 0x10)" ( (binary_expression "(long)param_1 + lVar11 + 0x10" (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "uVar2 = puVar9[1];" (assignment_expression "uVar2 = puVar9[1]" identifier = (subscript_expression "puVar9[1]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);" (assignment_expression "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10)" identifier = (cast_expression "(undefined8 *)((long)puVar8 + lVar11 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar11 + -0x10)" ( (binary_expression "(long)puVar8 + lVar11 + -0x10" (binary_expression "(long)puVar8 + lVar11" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*puVar1 = *puVar9;" (assignment_expression "*puVar1 = *puVar9" (pointer_expression "*puVar1" * identifier) = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "puVar1[1] = uVar2;" (assignment_expression "puVar1[1] = uVar2" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar11 = lVar11 + -0x20;" (assignment_expression "lVar11 = lVar11 + -0x20" identifier = (binary_expression "lVar11 + -0x20" identifier + number_literal)) ;) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) (return_statement "return;" return ;) })) })) (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = param_1[-4];" (assignment_expression "*puVar7 = param_1[-4]" (pointer_expression "*puVar7" * identifier) = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-2] = param_1[-2];" (assignment_expression "puVar8[-2] = param_1[-2]" (subscript_expression "puVar8[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + -4;" (assignment_expression "param_1 = param_1 + -4" identifier = (binary_expression "param_1 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void sequential_sort(line *lines,size_t nlines,line *temp,_Bool to_temp)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  size_t sVar6;\n  char *pcVar7;\n  undefined8 uVar8;\n  int iVar9;\n  long lVar10;\n  line *plVar11;\n  line *plVar12;\n  line *plVar13;\n  ulong nlines_00;\n  size_t sVar14;\n  \n  if (nlines == 2) {\n    iVar9 = compare(lines + -1,lines + -2);\n    if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }\n  }\n  else {\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }\n  return;\n}\n\n" (function_definition "void sequential_sort(line *lines,size_t nlines,line *temp,_Bool to_temp)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  size_t sVar6;\n  char *pcVar7;\n  undefined8 uVar8;\n  int iVar9;\n  long lVar10;\n  line *plVar11;\n  line *plVar12;\n  line *plVar13;\n  ulong nlines_00;\n  size_t sVar14;\n  \n  if (nlines == 2) {\n    iVar9 = compare(lines + -1,lines + -2);\n    if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }\n  }\n  else {\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "sequential_sort(line *lines,size_t nlines,line *temp,_Bool to_temp)" identifier (parameter_list "(line *lines,size_t nlines,line *temp,_Bool to_temp)" ( (parameter_declaration "line *lines" type_identifier (pointer_declarator "*lines" * identifier)) , (parameter_declaration "size_t nlines" primitive_type identifier) , (parameter_declaration "line *temp" type_identifier (pointer_declarator "*temp" * identifier)) , (parameter_declaration "_Bool to_temp" type_identifier identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  size_t sVar6;\n  char *pcVar7;\n  undefined8 uVar8;\n  int iVar9;\n  long lVar10;\n  line *plVar11;\n  line *plVar12;\n  line *plVar13;\n  ulong nlines_00;\n  size_t sVar14;\n  \n  if (nlines == 2) {\n    iVar9 = compare(lines + -1,lines + -2);\n    if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }\n  }\n  else {\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "line *plVar11;" type_identifier (pointer_declarator "*plVar11" * identifier) ;) (declaration "line *plVar12;" type_identifier (pointer_declarator "*plVar12" * identifier) ;) (declaration "line *plVar13;" type_identifier (pointer_declarator "*plVar13" * identifier) ;) (declaration "ulong nlines_00;" type_identifier identifier ;) (declaration "size_t sVar14;" primitive_type identifier ;) (if_statement "if (nlines == 2) {\n    iVar9 = compare(lines + -1,lines + -2);\n    if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }\n  }\n  else {\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }" if (parenthesized_expression "(nlines == 2)" ( (binary_expression "nlines == 2" identifier == number_literal) )) (compound_statement "{\n    iVar9 = compare(lines + -1,lines + -2);\n    if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }\n  }" { (expression_statement "iVar9 = compare(lines + -1,lines + -2);" (assignment_expression "iVar9 = compare(lines + -1,lines + -2)" identifier = (call_expression "compare(lines + -1,lines + -2)" identifier (argument_list "(lines + -1,lines + -2)" ( (binary_expression "lines + -1" identifier + number_literal) , (binary_expression "lines + -2" identifier + number_literal) )))) ;) (if_statement "if (to_temp) {\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }\n    else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }" if (parenthesized_expression "(to_temp)" ( identifier )) (compound_statement "{\n      plVar11 = lines + (int)~(uint)(0 < iVar9);\n      sVar14 = plVar11->length;\n      temp[-1].text = plVar11->text;\n      temp[-1].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-1].keybeg = plVar11->keybeg;\n      temp[-1].keylim = pcVar3;\n      plVar11 = lines + (int)((0 < iVar9) - 2);\n      sVar14 = plVar11->length;\n      temp[-2].text = plVar11->text;\n      temp[-2].length = sVar14;\n      pcVar3 = plVar11->keylim;\n      temp[-2].keybeg = plVar11->keybeg;\n      temp[-2].keylim = pcVar3;\n    }" { (expression_statement "plVar11 = lines + (int)~(uint)(0 < iVar9);" (assignment_expression "plVar11 = lines + (int)~(uint)(0 < iVar9)" identifier = (binary_expression "lines + (int)~(uint)(0 < iVar9)" identifier + (cast_expression "(int)~(uint)(0 < iVar9)" ( (type_descriptor "int" primitive_type) ) (unary_expression "~(uint)(0 < iVar9)" ~ (call_expression "(uint)(0 < iVar9)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) ))))))) ;) (expression_statement "sVar14 = plVar11->length;" (assignment_expression "sVar14 = plVar11->length" identifier = (field_expression "plVar11->length" identifier -> field_identifier)) ;) (expression_statement "temp[-1].text = plVar11->text;" (assignment_expression "temp[-1].text = plVar11->text" (field_expression "temp[-1].text" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "plVar11->text" identifier -> field_identifier)) ;) (expression_statement "temp[-1].length = sVar14;" (assignment_expression "temp[-1].length = sVar14" (field_expression "temp[-1].length" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar3 = plVar11->keylim;" (assignment_expression "pcVar3 = plVar11->keylim" identifier = (field_expression "plVar11->keylim" identifier -> field_identifier)) ;) (expression_statement "temp[-1].keybeg = plVar11->keybeg;" (assignment_expression "temp[-1].keybeg = plVar11->keybeg" (field_expression "temp[-1].keybeg" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "plVar11->keybeg" identifier -> field_identifier)) ;) (expression_statement "temp[-1].keylim = pcVar3;" (assignment_expression "temp[-1].keylim = pcVar3" (field_expression "temp[-1].keylim" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "plVar11 = lines + (int)((0 < iVar9) - 2);" (assignment_expression "plVar11 = lines + (int)((0 < iVar9) - 2)" identifier = (binary_expression "lines + (int)((0 < iVar9) - 2)" identifier + (cast_expression "(int)((0 < iVar9) - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0 < iVar9) - 2)" ( (binary_expression "(0 < iVar9) - 2" (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) )) - number_literal) ))))) ;) (expression_statement "sVar14 = plVar11->length;" (assignment_expression "sVar14 = plVar11->length" identifier = (field_expression "plVar11->length" identifier -> field_identifier)) ;) (expression_statement "temp[-2].text = plVar11->text;" (assignment_expression "temp[-2].text = plVar11->text" (field_expression "temp[-2].text" (subscript_expression "temp[-2]" identifier [ number_literal ]) . field_identifier) = (field_expression "plVar11->text" identifier -> field_identifier)) ;) (expression_statement "temp[-2].length = sVar14;" (assignment_expression "temp[-2].length = sVar14" (field_expression "temp[-2].length" (subscript_expression "temp[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar3 = plVar11->keylim;" (assignment_expression "pcVar3 = plVar11->keylim" identifier = (field_expression "plVar11->keylim" identifier -> field_identifier)) ;) (expression_statement "temp[-2].keybeg = plVar11->keybeg;" (assignment_expression "temp[-2].keybeg = plVar11->keybeg" (field_expression "temp[-2].keybeg" (subscript_expression "temp[-2]" identifier [ number_literal ]) . field_identifier) = (field_expression "plVar11->keybeg" identifier -> field_identifier)) ;) (expression_statement "temp[-2].keylim = pcVar3;" (assignment_expression "temp[-2].keylim = pcVar3" (field_expression "temp[-2].keylim" (subscript_expression "temp[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) }) (else_clause "else if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }" else (if_statement "if (0 < iVar9) {\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }" if (parenthesized_expression "(0 < iVar9)" ( (binary_expression "0 < iVar9" number_literal < identifier) )) (compound_statement "{\n      pcVar3 = lines[-1].text;\n      sVar14 = lines[-1].length;\n      temp[-1].text = pcVar3;\n      temp[-1].length = sVar14;\n      pcVar4 = lines[-1].keybeg;\n      pcVar5 = lines[-1].keylim;\n      temp[-1].keybeg = pcVar4;\n      temp[-1].keylim = pcVar5;\n      sVar6 = lines[-2].length;\n      lines[-1].text = lines[-2].text;\n      lines[-1].length = sVar6;\n      pcVar7 = lines[-2].keylim;\n      lines[-1].keybeg = lines[-2].keybeg;\n      lines[-1].keylim = pcVar7;\n      lines[-2].text = pcVar3;\n      lines[-2].length = sVar14;\n      lines[-2].keybeg = pcVar4;\n      lines[-2].keylim = pcVar5;\n    }" { (expression_statement "pcVar3 = lines[-1].text;" (assignment_expression "pcVar3 = lines[-1].text" identifier = (field_expression "lines[-1].text" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "sVar14 = lines[-1].length;" (assignment_expression "sVar14 = lines[-1].length" identifier = (field_expression "lines[-1].length" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].text = pcVar3;" (assignment_expression "temp[-1].text = pcVar3" (field_expression "temp[-1].text" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "temp[-1].length = sVar14;" (assignment_expression "temp[-1].length = sVar14" (field_expression "temp[-1].length" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar4 = lines[-1].keybeg;" (assignment_expression "pcVar4 = lines[-1].keybeg" identifier = (field_expression "lines[-1].keybeg" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pcVar5 = lines[-1].keylim;" (assignment_expression "pcVar5 = lines[-1].keylim" identifier = (field_expression "lines[-1].keylim" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].keybeg = pcVar4;" (assignment_expression "temp[-1].keybeg = pcVar4" (field_expression "temp[-1].keybeg" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "temp[-1].keylim = pcVar5;" (assignment_expression "temp[-1].keylim = pcVar5" (field_expression "temp[-1].keylim" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "sVar6 = lines[-2].length;" (assignment_expression "sVar6 = lines[-2].length" identifier = (field_expression "lines[-2].length" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "lines[-1].text = lines[-2].text;" (assignment_expression "lines[-1].text = lines[-2].text" (field_expression "lines[-1].text" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "lines[-2].text" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "lines[-1].length = sVar6;" (assignment_expression "lines[-1].length = sVar6" (field_expression "lines[-1].length" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar7 = lines[-2].keylim;" (assignment_expression "pcVar7 = lines[-2].keylim" identifier = (field_expression "lines[-2].keylim" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "lines[-1].keybeg = lines[-2].keybeg;" (assignment_expression "lines[-1].keybeg = lines[-2].keybeg" (field_expression "lines[-1].keybeg" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "lines[-2].keybeg" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "lines[-1].keylim = pcVar7;" (assignment_expression "lines[-1].keylim = pcVar7" (field_expression "lines[-1].keylim" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "lines[-2].text = pcVar3;" (assignment_expression "lines[-2].text = pcVar3" (field_expression "lines[-2].text" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "lines[-2].length = sVar14;" (assignment_expression "lines[-2].length = sVar14" (field_expression "lines[-2].length" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "lines[-2].keybeg = pcVar4;" (assignment_expression "lines[-2].keybeg = pcVar4" (field_expression "lines[-2].keybeg" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "lines[-2].keylim = pcVar5;" (assignment_expression "lines[-2].keylim = pcVar5" (field_expression "lines[-2].keylim" (subscript_expression "lines[-2]" identifier [ number_literal ]) . field_identifier) = identifier) ;) })))) }) (else_clause "else {\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }" else (compound_statement "{\n    nlines_00 = nlines >> 1;\n    sVar14 = nlines - nlines_00;\n    if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }\n    plVar13 = plVar11 + -nlines_00;\n    do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);\n  }" { (expression_statement "nlines_00 = nlines >> 1;" (assignment_expression "nlines_00 = nlines >> 1" identifier = (binary_expression "nlines >> 1" identifier >> number_literal)) ;) (expression_statement "sVar14 = nlines - nlines_00;" (assignment_expression "sVar14 = nlines - nlines_00" identifier = (binary_expression "nlines - nlines_00" identifier - identifier)) ;) (if_statement "if (to_temp) {\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }\n    else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }" if (parenthesized_expression "(to_temp)" ( identifier )) (compound_statement "{\n      sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);\n      plVar11 = temp;\n      if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }\n    }" { (expression_statement "sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true);" (call_expression "sequential_sort(lines + -nlines_00,sVar14,temp + -nlines_00,true)" identifier (argument_list "(lines + -nlines_00,sVar14,temp + -nlines_00,true)" ( (binary_expression "lines + -nlines_00" identifier + (unary_expression "-nlines_00" - identifier)) , identifier , (binary_expression "temp + -nlines_00" identifier + (unary_expression "-nlines_00" - identifier)) , true ))) ;) (expression_statement "plVar11 = temp;" (assignment_expression "plVar11 = temp" identifier = identifier) ;) (if_statement "if (3 < nlines) {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }" if (parenthesized_expression "(3 < nlines)" ( (binary_expression "3 < nlines" number_literal < identifier) )) (compound_statement "{\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n      }" { (expression_statement "sequential_sort(lines,nlines_00,temp,!to_temp);" (call_expression "sequential_sort(lines,nlines_00,temp,!to_temp)" identifier (argument_list "(lines,nlines_00,temp,!to_temp)" ( identifier , identifier , identifier , (unary_expression "!to_temp" ! identifier) ))) ;) })) }) (else_clause "else {\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }" else (compound_statement "{\n      sequential_sort(lines + -nlines_00,sVar14,temp,false);\n      plVar11 = lines;\n      if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }\n    }" { (expression_statement "sequential_sort(lines + -nlines_00,sVar14,temp,false);" (call_expression "sequential_sort(lines + -nlines_00,sVar14,temp,false)" identifier (argument_list "(lines + -nlines_00,sVar14,temp,false)" ( (binary_expression "lines + -nlines_00" identifier + (unary_expression "-nlines_00" - identifier)) , identifier , identifier , false ))) ;) (expression_statement "plVar11 = lines;" (assignment_expression "plVar11 = lines" identifier = identifier) ;) (if_statement "if (nlines < 4) {\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }\n      else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }" if (parenthesized_expression "(nlines < 4)" ( (binary_expression "nlines < 4" identifier < number_literal) )) (compound_statement "{\n        sVar6 = lines[-1].length;\n        temp[-1].text = lines[-1].text;\n        temp[-1].length = sVar6;\n        pcVar3 = lines[-1].keylim;\n        temp[-1].keybeg = lines[-1].keybeg;\n        temp[-1].keylim = pcVar3;\n        lines = temp;\n      }" { (expression_statement "sVar6 = lines[-1].length;" (assignment_expression "sVar6 = lines[-1].length" identifier = (field_expression "lines[-1].length" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].text = lines[-1].text;" (assignment_expression "temp[-1].text = lines[-1].text" (field_expression "temp[-1].text" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "lines[-1].text" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].length = sVar6;" (assignment_expression "temp[-1].length = sVar6" (field_expression "temp[-1].length" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar3 = lines[-1].keylim;" (assignment_expression "pcVar3 = lines[-1].keylim" identifier = (field_expression "lines[-1].keylim" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].keybeg = lines[-1].keybeg;" (assignment_expression "temp[-1].keybeg = lines[-1].keybeg" (field_expression "temp[-1].keybeg" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "lines[-1].keybeg" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "temp[-1].keylim = pcVar3;" (assignment_expression "temp[-1].keylim = pcVar3" (field_expression "temp[-1].keylim" (subscript_expression "temp[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "lines = temp;" (assignment_expression "lines = temp" identifier = identifier) ;) }) (else_clause "else {\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }" else (compound_statement "{\n        sequential_sort(lines,nlines_00,temp,!to_temp);\n        lines = temp;\n      }" { (expression_statement "sequential_sort(lines,nlines_00,temp,!to_temp);" (call_expression "sequential_sort(lines,nlines_00,temp,!to_temp)" identifier (argument_list "(lines,nlines_00,temp,!to_temp)" ( identifier , identifier , identifier , (unary_expression "!to_temp" ! identifier) ))) ;) (expression_statement "lines = temp;" (assignment_expression "lines = temp" identifier = identifier) ;) }))) }))) (expression_statement "plVar13 = plVar11 + -nlines_00;" (assignment_expression "plVar13 = plVar11 + -nlines_00" identifier = (binary_expression "plVar11 + -nlines_00" identifier + (unary_expression "-nlines_00" - identifier))) ;) (do_statement "do {\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    } while (nlines_00 != 0);" do (compound_statement "{\n      while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }\n      sVar6 = lines[-1].length;\n      plVar11->text = lines[-1].text;\n      plVar12[-1].length = sVar6;\n      pcVar3 = lines[-1].keylim;\n      plVar12[-1].keybeg = lines[-1].keybeg;\n      plVar12[-1].keylim = pcVar3;\n      nlines_00 = nlines_00 - 1;\n      lines = lines + -1;\n    }" { (while_statement "while( true ) {\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        plVar12 = plVar11;\n        plVar11 = plVar12 + -1;\n        iVar9 = compare(lines + -1,plVar13 + -1);\n        if (iVar9 < 1) break;\n        sVar6 = plVar13[-1].length;\n        plVar11->text = plVar13[-1].text;\n        plVar12[-1].length = sVar6;\n        pcVar3 = plVar13[-1].keylim;\n        plVar12[-1].keybeg = plVar13[-1].keybeg;\n        plVar12[-1].keylim = pcVar3;\n        sVar14 = sVar14 - 1;\n        plVar13 = plVar13 + -1;\n        if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }\n      }" { (expression_statement "plVar12 = plVar11;" (assignment_expression "plVar12 = plVar11" identifier = identifier) ;) (expression_statement "plVar11 = plVar12 + -1;" (assignment_expression "plVar11 = plVar12 + -1" identifier = (binary_expression "plVar12 + -1" identifier + number_literal)) ;) (expression_statement "iVar9 = compare(lines + -1,plVar13 + -1);" (assignment_expression "iVar9 = compare(lines + -1,plVar13 + -1)" identifier = (call_expression "compare(lines + -1,plVar13 + -1)" identifier (argument_list "(lines + -1,plVar13 + -1)" ( (binary_expression "lines + -1" identifier + number_literal) , (binary_expression "plVar13 + -1" identifier + number_literal) )))) ;) (if_statement "if (iVar9 < 1) break;" if (parenthesized_expression "(iVar9 < 1)" ( (binary_expression "iVar9 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "sVar6 = plVar13[-1].length;" (assignment_expression "sVar6 = plVar13[-1].length" identifier = (field_expression "plVar13[-1].length" (subscript_expression "plVar13[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar11->text = plVar13[-1].text;" (assignment_expression "plVar11->text = plVar13[-1].text" (field_expression "plVar11->text" identifier -> field_identifier) = (field_expression "plVar13[-1].text" (subscript_expression "plVar13[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].length = sVar6;" (assignment_expression "plVar12[-1].length = sVar6" (field_expression "plVar12[-1].length" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar3 = plVar13[-1].keylim;" (assignment_expression "pcVar3 = plVar13[-1].keylim" identifier = (field_expression "plVar13[-1].keylim" (subscript_expression "plVar13[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].keybeg = plVar13[-1].keybeg;" (assignment_expression "plVar12[-1].keybeg = plVar13[-1].keybeg" (field_expression "plVar12[-1].keybeg" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "plVar13[-1].keybeg" (subscript_expression "plVar13[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].keylim = pcVar3;" (assignment_expression "plVar12[-1].keylim = pcVar3" (field_expression "plVar12[-1].keylim" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "sVar14 = sVar14 - 1;" (assignment_expression "sVar14 = sVar14 - 1" identifier = (binary_expression "sVar14 - 1" identifier - number_literal)) ;) (expression_statement "plVar13 = plVar13 + -1;" (assignment_expression "plVar13 = plVar13 + -1" identifier = (binary_expression "plVar13 + -1" identifier + number_literal)) ;) (if_statement "if (sVar14 == 0) {\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }" if (parenthesized_expression "(sVar14 == 0)" ( (binary_expression "sVar14 == 0" identifier == number_literal) )) (compound_statement "{\n          lVar10 = -0x20;\n          do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);\n          return;\n        }" { (expression_statement "lVar10 = -0x20;" (assignment_expression "lVar10 = -0x20" identifier = number_literal) ;) (do_statement "do {\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          } while (nlines_00 != 0);" do (compound_statement "{\n            puVar2 = (undefined8 *)((long)&lines->text + lVar10);\n            uVar8 = puVar2[1];\n            puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);\n            *puVar1 = *puVar2;\n            puVar1[1] = uVar8;\n            puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);\n            uVar8 = puVar1[1];\n            puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);\n            *puVar2 = *puVar1;\n            puVar2[1] = uVar8;\n            lVar10 = lVar10 + -0x20;\n            nlines_00 = nlines_00 - 1;\n          }" { (expression_statement "puVar2 = (undefined8 *)((long)&lines->text + lVar10);" (assignment_expression "puVar2 = (undefined8 *)((long)&lines->text + lVar10)" identifier = (cast_expression "(undefined8 *)((long)&lines->text + lVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&lines->text + lVar10)" ( (binary_expression "(long)&lines->text + lVar10" (cast_expression "(long)&lines->text" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&lines->text" & (field_expression "lines->text" identifier -> field_identifier))) + identifier) )))) ;) (expression_statement "uVar8 = puVar2[1];" (assignment_expression "uVar8 = puVar2[1]" identifier = (subscript_expression "puVar2[1]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = (undefined8 *)((long)&plVar11->text + lVar10);" (assignment_expression "puVar1 = (undefined8 *)((long)&plVar11->text + lVar10)" identifier = (cast_expression "(undefined8 *)((long)&plVar11->text + lVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&plVar11->text + lVar10)" ( (binary_expression "(long)&plVar11->text + lVar10" (cast_expression "(long)&plVar11->text" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&plVar11->text" & (field_expression "plVar11->text" identifier -> field_identifier))) + identifier) )))) ;) (expression_statement "*puVar1 = *puVar2;" (assignment_expression "*puVar1 = *puVar2" (pointer_expression "*puVar1" * identifier) = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "puVar1[1] = uVar8;" (assignment_expression "puVar1[1] = uVar8" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10);" (assignment_expression "puVar1 = (undefined8 *)((long)&lines->keybeg + lVar10)" identifier = (cast_expression "(undefined8 *)((long)&lines->keybeg + lVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&lines->keybeg + lVar10)" ( (binary_expression "(long)&lines->keybeg + lVar10" (cast_expression "(long)&lines->keybeg" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&lines->keybeg" & (field_expression "lines->keybeg" identifier -> field_identifier))) + identifier) )))) ;) (expression_statement "uVar8 = puVar1[1];" (assignment_expression "uVar8 = puVar1[1]" identifier = (subscript_expression "puVar1[1]" identifier [ number_literal ])) ;) (expression_statement "puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10);" (assignment_expression "puVar2 = (undefined8 *)((long)plVar12 + lVar10 + -0x10)" identifier = (cast_expression "(undefined8 *)((long)plVar12 + lVar10 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar12 + lVar10 + -0x10)" ( (binary_expression "(long)plVar12 + lVar10 + -0x10" (binary_expression "(long)plVar12 + lVar10" (cast_expression "(long)plVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*puVar2 = *puVar1;" (assignment_expression "*puVar2 = *puVar1" (pointer_expression "*puVar2" * identifier) = (pointer_expression "*puVar1" * identifier)) ;) (expression_statement "puVar2[1] = uVar8;" (assignment_expression "puVar2[1] = uVar8" (subscript_expression "puVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar10 = lVar10 + -0x20;" (assignment_expression "lVar10 = lVar10 + -0x20" identifier = (binary_expression "lVar10 + -0x20" identifier + number_literal)) ;) (expression_statement "nlines_00 = nlines_00 - 1;" (assignment_expression "nlines_00 = nlines_00 - 1" identifier = (binary_expression "nlines_00 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(nlines_00 != 0)" ( (binary_expression "nlines_00 != 0" identifier != number_literal) )) ;) (return_statement "return;" return ;) })) })) (expression_statement "sVar6 = lines[-1].length;" (assignment_expression "sVar6 = lines[-1].length" identifier = (field_expression "lines[-1].length" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar11->text = lines[-1].text;" (assignment_expression "plVar11->text = lines[-1].text" (field_expression "plVar11->text" identifier -> field_identifier) = (field_expression "lines[-1].text" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].length = sVar6;" (assignment_expression "plVar12[-1].length = sVar6" (field_expression "plVar12[-1].length" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pcVar3 = lines[-1].keylim;" (assignment_expression "pcVar3 = lines[-1].keylim" identifier = (field_expression "lines[-1].keylim" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].keybeg = lines[-1].keybeg;" (assignment_expression "plVar12[-1].keybeg = lines[-1].keybeg" (field_expression "plVar12[-1].keybeg" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = (field_expression "lines[-1].keybeg" (subscript_expression "lines[-1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "plVar12[-1].keylim = pcVar3;" (assignment_expression "plVar12[-1].keylim = pcVar3" (field_expression "plVar12[-1].keylim" (subscript_expression "plVar12[-1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "nlines_00 = nlines_00 - 1;" (assignment_expression "nlines_00 = nlines_00 - 1" identifier = (binary_expression "nlines_00 - 1" identifier - number_literal)) ;) (expression_statement "lines = lines + -1;" (assignment_expression "lines = lines + -1" identifier = (binary_expression "lines + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(nlines_00 != 0)" ( (binary_expression "nlines_00 != 0" identifier != number_literal) )) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)\n\n{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)\n\n{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" identifier (parameter_list "(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "byte param_4" type_identifier identifier) ))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (if_statement "if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }" { (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8)" identifier = (call_expression "FUN_0010587c(param_1 + -4,param_1 + -8)" identifier (argument_list "(param_1 + -4,param_1 + -8)" ( (binary_expression "param_1 + -4" identifier + number_literal) , (binary_expression "param_1 + -8" identifier + number_literal) )))) ;) (if_statement "if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }" { (if_statement "if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" { (expression_statement "uVar2 = param_1[-4];" (assignment_expression "uVar2 = param_1[-4]" identifier = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = param_1[-3];" (assignment_expression "uVar3 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = uVar2;" (assignment_expression "param_3[-4] = uVar2" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_3[-3] = uVar3;" (assignment_expression "param_3[-3] = uVar3" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = param_1[-2];" (assignment_expression "uVar4 = param_1[-2]" identifier = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "uVar5 = param_1[-1];" (assignment_expression "uVar5 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = uVar4;" (assignment_expression "param_3[-2] = uVar4" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_3[-1] = uVar5;" (assignment_expression "param_3[-1] = uVar5" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-4] = param_1[-8];" (assignment_expression "param_1[-4] = param_1[-8]" (subscript_expression "param_1[-4]" identifier [ number_literal ]) = (subscript_expression "param_1[-8]" identifier [ number_literal ])) ;) (expression_statement "param_1[-3] = param_1[-7];" (assignment_expression "param_1[-3] = param_1[-7]" (subscript_expression "param_1[-3]" identifier [ number_literal ]) = (subscript_expression "param_1[-7]" identifier [ number_literal ])) ;) (expression_statement "param_1[-2] = param_1[-6];" (assignment_expression "param_1[-2] = param_1[-6]" (subscript_expression "param_1[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-6]" identifier [ number_literal ])) ;) (expression_statement "param_1[-1] = param_1[-5];" (assignment_expression "param_1[-1] = param_1[-5]" (subscript_expression "param_1[-1]" identifier [ number_literal ]) = (subscript_expression "param_1[-5]" identifier [ number_literal ])) ;) (expression_statement "param_1[-8] = uVar2;" (assignment_expression "param_1[-8] = uVar2" (subscript_expression "param_1[-8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-7] = uVar3;" (assignment_expression "param_1[-7] = uVar3" (subscript_expression "param_1[-7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-6] = uVar4;" (assignment_expression "param_1[-6] = uVar4" (subscript_expression "param_1[-6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[-5] = uVar5;" (assignment_expression "param_1[-5] = uVar5" (subscript_expression "param_1[-5]" identifier [ number_literal ]) = identifier) ;) })) }) (else_clause "else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" else (compound_statement "{\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" { (expression_statement "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;" (assignment_expression "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4" identifier = (binary_expression "param_1 + (long)(int)~(uint)(0 < iVar6) * 4" identifier + (binary_expression "(long)(int)~(uint)(0 < iVar6) * 4" (cast_expression "(long)(int)~(uint)(0 < iVar6)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)~(uint)(0 < iVar6)" ( (type_descriptor "int" primitive_type) ) (unary_expression "~(uint)(0 < iVar6)" ~ (call_expression "(uint)(0 < iVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )))))) * number_literal))) ;) (expression_statement "uVar2 = puVar7[1];" (assignment_expression "uVar2 = puVar7[1]" identifier = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = *puVar7;" (assignment_expression "param_3[-4] = *puVar7" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = puVar7[3];" (assignment_expression "uVar2 = puVar7[3]" identifier = (subscript_expression "puVar7[3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = puVar7[2];" (assignment_expression "param_3[-2] = puVar7[2]" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = (subscript_expression "puVar7[2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;" (assignment_expression "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4" identifier = (binary_expression "param_1 + (long)(int)((0 < iVar6) - 2) * 4" identifier + (binary_expression "(long)(int)((0 < iVar6) - 2) * 4" (cast_expression "(long)(int)((0 < iVar6) - 2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)((0 < iVar6) - 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0 < iVar6) - 2)" ( (binary_expression "(0 < iVar6) - 2" (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) - number_literal) )))) * number_literal))) ;) (expression_statement "uVar2 = param_1[1];" (assignment_expression "uVar2 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-8] = *param_1;" (assignment_expression "param_3[-8] = *param_1" (subscript_expression "param_3[-8]" identifier [ number_literal ]) = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "param_3[-7] = uVar2;" (assignment_expression "param_3[-7] = uVar2" (subscript_expression "param_3[-7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-6] = param_1[2];" (assignment_expression "param_3[-6] = param_1[2]" (subscript_expression "param_3[-6]" identifier [ number_literal ]) = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-5] = uVar2;" (assignment_expression "param_3[-5] = uVar2" (subscript_expression "param_3[-5]" identifier [ number_literal ]) = identifier) ;) }))) }) (else_clause "else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" else (compound_statement "{\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" { (expression_statement "uVar10 = param_2 >> 1;" (assignment_expression "uVar10 = param_2 >> 1" identifier = (binary_expression "param_2 >> 1" identifier >> number_literal)) ;) (expression_statement "lVar11 = param_2 - uVar10;" (assignment_expression "lVar11 = param_2 - uVar10" identifier = (binary_expression "param_2 - uVar10" identifier - identifier)) ;) (if_statement "if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }" { (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0)" identifier (argument_list "(param_1 + uVar10 * -4,lVar11,param_3,0)" ( (binary_expression "param_1 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , identifier , identifier , number_literal ))) ;) (expression_statement "puVar7 = param_1;" (assignment_expression "puVar7 = param_1" identifier = identifier) ;) (if_statement "if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" if (parenthesized_expression "(param_2 < 4)" ( (binary_expression "param_2 < 4" identifier < number_literal) )) (compound_statement "{\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }" { (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "param_3[-4] = param_1[-4];" (assignment_expression "param_3[-4] = param_1[-4]" (subscript_expression "param_3[-4]" identifier [ number_literal ]) = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "param_3[-2] = param_1[-2];" (assignment_expression "param_3[-2] = param_1[-2]" (subscript_expression "param_3[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" else (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" { (expression_statement "FUN_00105945(param_1,uVar10,param_3,1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,1)" identifier (argument_list "(param_1,uVar10,param_3,1)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" identifier = identifier) ;) }))) }) (else_clause "else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" else (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" { (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" identifier (argument_list "(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" ( (binary_expression "param_1 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , identifier , (binary_expression "param_3 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal)) , number_literal ))) ;) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" identifier = identifier) ;) (if_statement "if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" if (parenthesized_expression "(3 < param_2)" ( (binary_expression "3 < param_2" number_literal < identifier) )) (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" { (expression_statement "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1)" identifier (argument_list "(param_1,uVar10,param_3,param_4 ^ 1)" ( identifier , identifier , identifier , (binary_expression "param_4 ^ 1" identifier ^ number_literal) ))) ;) })) }))) (expression_statement "puVar9 = puVar7 + uVar10 * -4;" (assignment_expression "puVar9 = puVar7 + uVar10 * -4" identifier = (binary_expression "puVar7 + uVar10 * -4" identifier + (binary_expression "uVar10 * -4" identifier * number_literal))) ;) (do_statement "do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);" do (compound_statement "{\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    }" { (while_statement "while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" { (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = puVar8 + -4;" (assignment_expression "puVar7 = puVar8 + -4" identifier = (binary_expression "puVar8 + -4" identifier + number_literal)) ;) (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4)" identifier = (call_expression "FUN_0010587c(param_1 + -4,puVar9 + -4)" identifier (argument_list "(param_1 + -4,puVar9 + -4)" ( (binary_expression "param_1 + -4" identifier + number_literal) , (binary_expression "puVar9 + -4" identifier + number_literal) )))) ;) (if_statement "if (iVar6 < 1) break;" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = puVar9[-3];" (assignment_expression "uVar2 = puVar9[-3]" identifier = (subscript_expression "puVar9[-3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = puVar9[-4];" (assignment_expression "*puVar7 = puVar9[-4]" (pointer_expression "*puVar7" * identifier) = (subscript_expression "puVar9[-4]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = puVar9[-1];" (assignment_expression "uVar2 = puVar9[-1]" identifier = (subscript_expression "puVar9[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-2] = puVar9[-2];" (assignment_expression "puVar8[-2] = puVar9[-2]" (subscript_expression "puVar8[-2]" identifier [ number_literal ]) = (subscript_expression "puVar9[-2]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar11 = lVar11 + -1;" (assignment_expression "lVar11 = lVar11 + -1" identifier = (binary_expression "lVar11 + -1" identifier + number_literal)) ;) (expression_statement "puVar9 = puVar9 + -4;" (assignment_expression "puVar9 = puVar9 + -4" identifier = (binary_expression "puVar9 + -4" identifier + number_literal)) ;) (if_statement "if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" if (parenthesized_expression "(lVar11 == 0)" ( (binary_expression "lVar11 == 0" identifier == number_literal) )) (compound_statement "{\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" { (expression_statement "lVar11 = -0x20;" (assignment_expression "lVar11 = -0x20" identifier = number_literal) ;) (do_statement "do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);" do (compound_statement "{\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          }" { (expression_statement "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];" (assignment_expression "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1]" identifier = (subscript_expression "((undefined8 *)((long)param_1 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)param_1 + lVar11))" ( (cast_expression "(undefined8 *)((long)param_1 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11)" ( (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11)" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar11)" * (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar11)" ( (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)((long)param_1 + lVar11)" * (cast_expression "(undefined8 *)((long)param_1 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11)" ( (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))))) ;) (expression_statement "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2" (subscript_expression "((undefined8 *)((long)puVar7 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar11))" ( (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar11)" ( (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10)" identifier = (cast_expression "(undefined8 *)((long)param_1 + lVar11 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + lVar11 + 0x10)" ( (binary_expression "(long)param_1 + lVar11 + 0x10" (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "uVar2 = puVar9[1];" (assignment_expression "uVar2 = puVar9[1]" identifier = (subscript_expression "puVar9[1]" identifier [ number_literal ])) ;) (expression_statement "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);" (assignment_expression "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10)" identifier = (cast_expression "(undefined8 *)((long)puVar8 + lVar11 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar11 + -0x10)" ( (binary_expression "(long)puVar8 + lVar11 + -0x10" (binary_expression "(long)puVar8 + lVar11" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*puVar1 = *puVar9;" (assignment_expression "*puVar1 = *puVar9" (pointer_expression "*puVar1" * identifier) = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "puVar1[1] = uVar2;" (assignment_expression "puVar1[1] = uVar2" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar11 = lVar11 + -0x20;" (assignment_expression "lVar11 = lVar11 + -0x20" identifier = (binary_expression "lVar11 + -0x20" identifier + number_literal)) ;) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) (return_statement "return;" return ;) })) })) (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" identifier = (subscript_expression "param_1[-3]" identifier [ number_literal ])) ;) (expression_statement "*puVar7 = param_1[-4];" (assignment_expression "*puVar7 = param_1[-4]" (pointer_expression "*puVar7" * identifier) = (subscript_expression "param_1[-4]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" identifier = (subscript_expression "param_1[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-2] = param_1[-2];" (assignment_expression "puVar8[-2] = param_1[-2]" (subscript_expression "puVar8[-2]" identifier [ number_literal ]) = (subscript_expression "param_1[-2]" identifier [ number_literal ])) ;) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (expression_statement "param_1 = param_1 + -4;" (assignment_expression "param_1 = param_1 + -4" identifier = (binary_expression "param_1 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = 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 ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = 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 IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (unary_expression ~ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < IDENT) )))))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) - LIT) )))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (binary_expression IDENT ^ LIT) ))) ;) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) )) [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) )) [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }))) (return_statement return ;) })))
(function_definition "void FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)\n\n{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00105945(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" (identifier "FUN_00105945") (parameter_list "(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "byte param_4" (type_identifier "byte") (identifier "param_4")) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 uVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  int iVar6;\n  undefined8 *puVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  ulong uVar10;\n  long lVar11;\n  \n  if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }\n  return;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined8 *puVar7;" (type_identifier "undefined8") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined8 *puVar8;" (type_identifier "undefined8") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined8 *puVar9;" (type_identifier "undefined8") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "ulong uVar10;" (type_identifier "ulong") (identifier "uVar10") (; ";")) (declaration "long lVar11;" (sized_type_specifier "long" (long "long")) (identifier "lVar11") (; ";")) (if_statement "if (param_2 == 2) {\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }\n  else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);\n    if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }\n  }" ({ "{") (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8)" (identifier "iVar6") (= "=") (call_expression "FUN_0010587c(param_1 + -4,param_1 + -8)" (identifier "FUN_0010587c") (argument_list "(param_1 + -4,param_1 + -8)" (( "(") (binary_expression "param_1 + -4" (identifier "param_1") (+ "+") (number_literal "-4")) (, ",") (binary_expression "param_1 + -8" (identifier "param_1") (+ "+") (number_literal "-8")) () ")")))) (; ";")) (if_statement "if (param_4 == 0) {\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }\n    else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }\n    }" ({ "{") (if_statement "if (0 < iVar6) {\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n        uVar2 = param_1[-4];\n        uVar3 = param_1[-3];\n        param_3[-4] = uVar2;\n        param_3[-3] = uVar3;\n        uVar4 = param_1[-2];\n        uVar5 = param_1[-1];\n        param_3[-2] = uVar4;\n        param_3[-1] = uVar5;\n        param_1[-4] = param_1[-8];\n        param_1[-3] = param_1[-7];\n        param_1[-2] = param_1[-6];\n        param_1[-1] = param_1[-5];\n        param_1[-8] = uVar2;\n        param_1[-7] = uVar3;\n        param_1[-6] = uVar4;\n        param_1[-5] = uVar5;\n      }" ({ "{") (expression_statement "uVar2 = param_1[-4];" (assignment_expression "uVar2 = param_1[-4]" (identifier "uVar2") (= "=") (subscript_expression "param_1[-4]" (identifier "param_1") ([ "[") (number_literal "-4") (] "]"))) (; ";")) (expression_statement "uVar3 = param_1[-3];" (assignment_expression "uVar3 = param_1[-3]" (identifier "uVar3") (= "=") (subscript_expression "param_1[-3]" (identifier "param_1") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "param_3[-4] = uVar2;" (assignment_expression "param_3[-4] = uVar2" (subscript_expression "param_3[-4]" (identifier "param_3") ([ "[") (number_literal "-4") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_3[-3] = uVar3;" (assignment_expression "param_3[-3] = uVar3" (subscript_expression "param_3[-3]" (identifier "param_3") ([ "[") (number_literal "-3") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "uVar4 = param_1[-2];" (assignment_expression "uVar4 = param_1[-2]" (identifier "uVar4") (= "=") (subscript_expression "param_1[-2]" (identifier "param_1") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "uVar5 = param_1[-1];" (assignment_expression "uVar5 = param_1[-1]" (identifier "uVar5") (= "=") (subscript_expression "param_1[-1]" (identifier "param_1") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "param_3[-2] = uVar4;" (assignment_expression "param_3[-2] = uVar4" (subscript_expression "param_3[-2]" (identifier "param_3") ([ "[") (number_literal "-2") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "param_3[-1] = uVar5;" (assignment_expression "param_3[-1] = uVar5" (subscript_expression "param_3[-1]" (identifier "param_3") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "param_1[-4] = param_1[-8];" (assignment_expression "param_1[-4] = param_1[-8]" (subscript_expression "param_1[-4]" (identifier "param_1") ([ "[") (number_literal "-4") (] "]")) (= "=") (subscript_expression "param_1[-8]" (identifier "param_1") ([ "[") (number_literal "-8") (] "]"))) (; ";")) (expression_statement "param_1[-3] = param_1[-7];" (assignment_expression "param_1[-3] = param_1[-7]" (subscript_expression "param_1[-3]" (identifier "param_1") ([ "[") (number_literal "-3") (] "]")) (= "=") (subscript_expression "param_1[-7]" (identifier "param_1") ([ "[") (number_literal "-7") (] "]"))) (; ";")) (expression_statement "param_1[-2] = param_1[-6];" (assignment_expression "param_1[-2] = param_1[-6]" (subscript_expression "param_1[-2]" (identifier "param_1") ([ "[") (number_literal "-2") (] "]")) (= "=") (subscript_expression "param_1[-6]" (identifier "param_1") ([ "[") (number_literal "-6") (] "]"))) (; ";")) (expression_statement "param_1[-1] = param_1[-5];" (assignment_expression "param_1[-1] = param_1[-5]" (subscript_expression "param_1[-1]" (identifier "param_1") ([ "[") (number_literal "-1") (] "]")) (= "=") (subscript_expression "param_1[-5]" (identifier "param_1") ([ "[") (number_literal "-5") (] "]"))) (; ";")) (expression_statement "param_1[-8] = uVar2;" (assignment_expression "param_1[-8] = uVar2" (subscript_expression "param_1[-8]" (identifier "param_1") ([ "[") (number_literal "-8") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_1[-7] = uVar3;" (assignment_expression "param_1[-7] = uVar3" (subscript_expression "param_1[-7]" (identifier "param_1") ([ "[") (number_literal "-7") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "param_1[-6] = uVar4;" (assignment_expression "param_1[-6] = uVar4" (subscript_expression "param_1[-6]" (identifier "param_1") ([ "[") (number_literal "-6") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "param_1[-5] = uVar5;" (assignment_expression "param_1[-5] = uVar5" (subscript_expression "param_1[-5]" (identifier "param_1") ([ "[") (number_literal "-5") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" (else "else") (compound_statement "{\n      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;\n      uVar2 = puVar7[1];\n      param_3[-4] = *puVar7;\n      param_3[-3] = uVar2;\n      uVar2 = puVar7[3];\n      param_3[-2] = puVar7[2];\n      param_3[-1] = uVar2;\n      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;\n      uVar2 = param_1[1];\n      param_3[-8] = *param_1;\n      param_3[-7] = uVar2;\n      uVar2 = param_1[3];\n      param_3[-6] = param_1[2];\n      param_3[-5] = uVar2;\n    }" ({ "{") (expression_statement "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;" (assignment_expression "puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4" (identifier "puVar7") (= "=") (binary_expression "param_1 + (long)(int)~(uint)(0 < iVar6) * 4" (identifier "param_1") (+ "+") (binary_expression "(long)(int)~(uint)(0 < iVar6) * 4" (cast_expression "(long)(int)~(uint)(0 < iVar6)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)~(uint)(0 < iVar6)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (unary_expression "~(uint)(0 < iVar6)" (~ "~") (call_expression "(uint)(0 < iVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")))))) (* "*") (number_literal "4")))) (; ";")) (expression_statement "uVar2 = puVar7[1];" (assignment_expression "uVar2 = puVar7[1]" (identifier "uVar2") (= "=") (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "param_3[-4] = *puVar7;" (assignment_expression "param_3[-4] = *puVar7" (subscript_expression "param_3[-4]" (identifier "param_3") ([ "[") (number_literal "-4") (] "]")) (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" (identifier "param_3") ([ "[") (number_literal "-3") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = puVar7[3];" (assignment_expression "uVar2 = puVar7[3]" (identifier "uVar2") (= "=") (subscript_expression "puVar7[3]" (identifier "puVar7") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_3[-2] = puVar7[2];" (assignment_expression "param_3[-2] = puVar7[2]" (subscript_expression "param_3[-2]" (identifier "param_3") ([ "[") (number_literal "-2") (] "]")) (= "=") (subscript_expression "puVar7[2]" (identifier "puVar7") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" (identifier "param_3") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;" (assignment_expression "param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4" (identifier "param_1") (= "=") (binary_expression "param_1 + (long)(int)((0 < iVar6) - 2) * 4" (identifier "param_1") (+ "+") (binary_expression "(long)(int)((0 < iVar6) - 2) * 4" (cast_expression "(long)(int)((0 < iVar6) - 2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)((0 < iVar6) - 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((0 < iVar6) - 2)" (( "(") (binary_expression "(0 < iVar6) - 2" (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (- "-") (number_literal "2")) () ")")))) (* "*") (number_literal "4")))) (; ";")) (expression_statement "uVar2 = param_1[1];" (assignment_expression "uVar2 = param_1[1]" (identifier "uVar2") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "param_3[-8] = *param_1;" (assignment_expression "param_3[-8] = *param_1" (subscript_expression "param_3[-8]" (identifier "param_3") ([ "[") (number_literal "-8") (] "]")) (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "param_3[-7] = uVar2;" (assignment_expression "param_3[-7] = uVar2" (subscript_expression "param_3[-7]" (identifier "param_3") ([ "[") (number_literal "-7") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = param_1[3];" (assignment_expression "uVar2 = param_1[3]" (identifier "uVar2") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_3[-6] = param_1[2];" (assignment_expression "param_3[-6] = param_1[2]" (subscript_expression "param_3[-6]" (identifier "param_3") ([ "[") (number_literal "-6") (] "]")) (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "param_3[-5] = uVar2;" (assignment_expression "param_3[-5] = uVar2" (subscript_expression "param_3[-5]" (identifier "param_3") ([ "[") (number_literal "-5") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" (else "else") (compound_statement "{\n    uVar10 = param_2 >> 1;\n    lVar11 = param_2 - uVar10;\n    if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }\n    puVar9 = puVar7 + uVar10 * -4;\n    do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);\n  }" ({ "{") (expression_statement "uVar10 = param_2 >> 1;" (assignment_expression "uVar10 = param_2 >> 1" (identifier "uVar10") (= "=") (binary_expression "param_2 >> 1" (identifier "param_2") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "lVar11 = param_2 - uVar10;" (assignment_expression "lVar11 = param_2 - uVar10" (identifier "lVar11") (= "=") (binary_expression "param_2 - uVar10" (identifier "param_2") (- "-") (identifier "uVar10"))) (; ";")) (if_statement "if (param_4 == 0) {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }\n    else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);\n      puVar7 = param_1;\n      if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }\n    }" ({ "{") (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3,0)" (identifier "FUN_00105945") (argument_list "(param_1 + uVar10 * -4,lVar11,param_3,0)" (( "(") (binary_expression "param_1 + uVar10 * -4" (identifier "param_1") (+ "+") (binary_expression "uVar10 * -4" (identifier "uVar10") (* "*") (number_literal "-4"))) (, ",") (identifier "lVar11") (, ",") (identifier "param_3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "puVar7 = param_1;" (assignment_expression "puVar7 = param_1" (identifier "puVar7") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (param_2 < 4) {\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }\n      else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" (if "if") (parenthesized_expression "(param_2 < 4)" (( "(") (binary_expression "param_2 < 4" (identifier "param_2") (< "<") (number_literal "4")) () ")")) (compound_statement "{\n        uVar2 = param_1[-3];\n        param_3[-4] = param_1[-4];\n        param_3[-3] = uVar2;\n        uVar2 = param_1[-1];\n        param_3[-2] = param_1[-2];\n        param_3[-1] = uVar2;\n        param_1 = param_3;\n      }" ({ "{") (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" (identifier "uVar2") (= "=") (subscript_expression "param_1[-3]" (identifier "param_1") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "param_3[-4] = param_1[-4];" (assignment_expression "param_3[-4] = param_1[-4]" (subscript_expression "param_3[-4]" (identifier "param_3") ([ "[") (number_literal "-4") (] "]")) (= "=") (subscript_expression "param_1[-4]" (identifier "param_1") ([ "[") (number_literal "-4") (] "]"))) (; ";")) (expression_statement "param_3[-3] = uVar2;" (assignment_expression "param_3[-3] = uVar2" (subscript_expression "param_3[-3]" (identifier "param_3") ([ "[") (number_literal "-3") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" (identifier "uVar2") (= "=") (subscript_expression "param_1[-1]" (identifier "param_1") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "param_3[-2] = param_1[-2];" (assignment_expression "param_3[-2] = param_1[-2]" (subscript_expression "param_3[-2]" (identifier "param_3") ([ "[") (number_literal "-2") (] "]")) (= "=") (subscript_expression "param_1[-2]" (identifier "param_1") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "param_3[-1] = uVar2;" (assignment_expression "param_3[-1] = uVar2" (subscript_expression "param_3[-1]" (identifier "param_3") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" (identifier "param_1") (= "=") (identifier "param_3")) (; ";")) (} "}")) (else_clause "else {\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" (else "else") (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,1);\n        param_1 = param_3;\n      }" ({ "{") (expression_statement "FUN_00105945(param_1,uVar10,param_3,1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,1)" (identifier "FUN_00105945") (argument_list "(param_1,uVar10,param_3,1)" (( "(") (identifier "param_1") (, ",") (identifier "uVar10") (, ",") (identifier "param_3") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "param_1 = param_3;" (assignment_expression "param_1 = param_3" (identifier "param_1") (= "=") (identifier "param_3")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" (else "else") (compound_statement "{\n      FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);\n      puVar7 = param_3;\n      if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }\n    }" ({ "{") (expression_statement "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);" (call_expression "FUN_00105945(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" (identifier "FUN_00105945") (argument_list "(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1)" (( "(") (binary_expression "param_1 + uVar10 * -4" (identifier "param_1") (+ "+") (binary_expression "uVar10 * -4" (identifier "uVar10") (* "*") (number_literal "-4"))) (, ",") (identifier "lVar11") (, ",") (binary_expression "param_3 + uVar10 * -4" (identifier "param_3") (+ "+") (binary_expression "uVar10 * -4" (identifier "uVar10") (* "*") (number_literal "-4"))) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" (identifier "puVar7") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (3 < param_2) {\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" (if "if") (parenthesized_expression "(3 < param_2)" (( "(") (binary_expression "3 < param_2" (number_literal "3") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n        FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);\n      }" ({ "{") (expression_statement "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1);" (call_expression "FUN_00105945(param_1,uVar10,param_3,param_4 ^ 1)" (identifier "FUN_00105945") (argument_list "(param_1,uVar10,param_3,param_4 ^ 1)" (( "(") (identifier "param_1") (, ",") (identifier "uVar10") (, ",") (identifier "param_3") (, ",") (binary_expression "param_4 ^ 1" (identifier "param_4") (^ "^") (number_literal "1")) () ")"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "puVar9 = puVar7 + uVar10 * -4;" (assignment_expression "puVar9 = puVar7 + uVar10 * -4" (identifier "puVar9") (= "=") (binary_expression "puVar7 + uVar10 * -4" (identifier "puVar7") (+ "+") (binary_expression "uVar10 * -4" (identifier "uVar10") (* "*") (number_literal "-4")))) (; ";")) (do_statement "do {\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    } while (uVar10 != 0);" (do "do") (compound_statement "{\n      while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }\n      uVar2 = param_1[-3];\n      *puVar7 = param_1[-4];\n      puVar8[-3] = uVar2;\n      uVar2 = param_1[-1];\n      puVar8[-2] = param_1[-2];\n      puVar8[-1] = uVar2;\n      uVar10 = uVar10 - 1;\n      param_1 = param_1 + -4;\n    }" ({ "{") (while_statement "while( true ) {\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        puVar8 = puVar7;\n        puVar7 = puVar8 + -4;\n        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);\n        if (iVar6 < 1) break;\n        uVar2 = puVar9[-3];\n        *puVar7 = puVar9[-4];\n        puVar8[-3] = uVar2;\n        uVar2 = puVar9[-1];\n        puVar8[-2] = puVar9[-2];\n        puVar8[-1] = uVar2;\n        lVar11 = lVar11 + -1;\n        puVar9 = puVar9 + -4;\n        if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }\n      }" ({ "{") (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" (identifier "puVar8") (= "=") (identifier "puVar7")) (; ";")) (expression_statement "puVar7 = puVar8 + -4;" (assignment_expression "puVar7 = puVar8 + -4" (identifier "puVar7") (= "=") (binary_expression "puVar8 + -4" (identifier "puVar8") (+ "+") (number_literal "-4"))) (; ";")) (expression_statement "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);" (assignment_expression "iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4)" (identifier "iVar6") (= "=") (call_expression "FUN_0010587c(param_1 + -4,puVar9 + -4)" (identifier "FUN_0010587c") (argument_list "(param_1 + -4,puVar9 + -4)" (( "(") (binary_expression "param_1 + -4" (identifier "param_1") (+ "+") (number_literal "-4")) (, ",") (binary_expression "puVar9 + -4" (identifier "puVar9") (+ "+") (number_literal "-4")) () ")")))) (; ";")) (if_statement "if (iVar6 < 1) break;" (if "if") (parenthesized_expression "(iVar6 < 1)" (( "(") (binary_expression "iVar6 < 1" (identifier "iVar6") (< "<") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar2 = puVar9[-3];" (assignment_expression "uVar2 = puVar9[-3]" (identifier "uVar2") (= "=") (subscript_expression "puVar9[-3]" (identifier "puVar9") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "*puVar7 = puVar9[-4];" (assignment_expression "*puVar7 = puVar9[-4]" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (subscript_expression "puVar9[-4]" (identifier "puVar9") ([ "[") (number_literal "-4") (] "]"))) (; ";")) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" (identifier "puVar8") ([ "[") (number_literal "-3") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = puVar9[-1];" (assignment_expression "uVar2 = puVar9[-1]" (identifier "uVar2") (= "=") (subscript_expression "puVar9[-1]" (identifier "puVar9") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar8[-2] = puVar9[-2];" (assignment_expression "puVar8[-2] = puVar9[-2]" (subscript_expression "puVar8[-2]" (identifier "puVar8") ([ "[") (number_literal "-2") (] "]")) (= "=") (subscript_expression "puVar9[-2]" (identifier "puVar9") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" (identifier "puVar8") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "lVar11 = lVar11 + -1;" (assignment_expression "lVar11 = lVar11 + -1" (identifier "lVar11") (= "=") (binary_expression "lVar11 + -1" (identifier "lVar11") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar9 = puVar9 + -4;" (assignment_expression "puVar9 = puVar9 + -4" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -4" (identifier "puVar9") (+ "+") (number_literal "-4"))) (; ";")) (if_statement "if (lVar11 == 0) {\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" (if "if") (parenthesized_expression "(lVar11 == 0)" (( "(") (binary_expression "lVar11 == 0" (identifier "lVar11") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          lVar11 = -0x20;\n          do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);\n          return;\n        }" ({ "{") (expression_statement "lVar11 = -0x20;" (assignment_expression "lVar11 = -0x20" (identifier "lVar11") (= "=") (number_literal "-0x20")) (; ";")) (do_statement "do {\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          } while (uVar10 != 0);" (do "do") (compound_statement "{\n            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];\n            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);\n            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;\n            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);\n            uVar2 = puVar9[1];\n            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);\n            *puVar1 = *puVar9;\n            puVar1[1] = uVar2;\n            lVar11 = lVar11 + -0x20;\n            uVar10 = uVar10 - 1;\n          }" ({ "{") (expression_statement "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];" (assignment_expression "uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1]" (identifier "uVar2") (= "=") (subscript_expression "((undefined8 *)((long)param_1 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)param_1 + lVar11))" (( "(") (cast_expression "(undefined8 *)((long)param_1 + lVar11)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + lVar11)" (( "(") (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "lVar11")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11)" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar11)" (* "*") (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + lVar11)" (( "(") (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (identifier "lVar11")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)((long)param_1 + lVar11)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + lVar11)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + lVar11)" (( "(") (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "lVar11")) () ")"))))) (; ";")) (expression_statement "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2" (subscript_expression "((undefined8 *)((long)puVar7 + lVar11))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar11))" (( "(") (cast_expression "(undefined8 *)((long)puVar7 + lVar11)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + lVar11)" (( "(") (binary_expression "(long)puVar7 + lVar11" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (identifier "lVar11")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10)" (identifier "puVar9") (= "=") (cast_expression "(undefined8 *)((long)param_1 + lVar11 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + lVar11 + 0x10)" (( "(") (binary_expression "(long)param_1 + lVar11 + 0x10" (binary_expression "(long)param_1 + lVar11" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "lVar11")) (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "uVar2 = puVar9[1];" (assignment_expression "uVar2 = puVar9[1]" (identifier "uVar2") (= "=") (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);" (assignment_expression "puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10)" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)((long)puVar8 + lVar11 + -0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar11 + -0x10)" (( "(") (binary_expression "(long)puVar8 + lVar11 + -0x10" (binary_expression "(long)puVar8 + lVar11" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar11")) (+ "+") (number_literal "-0x10")) () ")")))) (; ";")) (expression_statement "*puVar1 = *puVar9;" (assignment_expression "*puVar1 = *puVar9" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (pointer_expression "*puVar9" (* "*") (identifier "puVar9"))) (; ";")) (expression_statement "puVar1[1] = uVar2;" (assignment_expression "puVar1[1] = uVar2" (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "lVar11 = lVar11 + -0x20;" (assignment_expression "lVar11 = lVar11 + -0x20" (identifier "lVar11") (= "=") (binary_expression "lVar11 + -0x20" (identifier "lVar11") (+ "+") (number_literal "-0x20"))) (; ";")) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" (identifier "uVar10") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar2 = param_1[-3];" (assignment_expression "uVar2 = param_1[-3]" (identifier "uVar2") (= "=") (subscript_expression "param_1[-3]" (identifier "param_1") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (expression_statement "*puVar7 = param_1[-4];" (assignment_expression "*puVar7 = param_1[-4]" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (subscript_expression "param_1[-4]" (identifier "param_1") ([ "[") (number_literal "-4") (] "]"))) (; ";")) (expression_statement "puVar8[-3] = uVar2;" (assignment_expression "puVar8[-3] = uVar2" (subscript_expression "puVar8[-3]" (identifier "puVar8") ([ "[") (number_literal "-3") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = param_1[-1];" (assignment_expression "uVar2 = param_1[-1]" (identifier "uVar2") (= "=") (subscript_expression "param_1[-1]" (identifier "param_1") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar8[-2] = param_1[-2];" (assignment_expression "puVar8[-2] = param_1[-2]" (subscript_expression "puVar8[-2]" (identifier "puVar8") ([ "[") (number_literal "-2") (] "]")) (= "=") (subscript_expression "param_1[-2]" (identifier "param_1") ([ "[") (number_literal "-2") (] "]"))) (; ";")) (expression_statement "puVar8[-1] = uVar2;" (assignment_expression "puVar8[-1] = uVar2" (subscript_expression "puVar8[-1]" (identifier "puVar8") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar10 = uVar10 - 1;" (assignment_expression "uVar10 = uVar10 - 1" (identifier "uVar10") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (expression_statement "param_1 = param_1 + -4;" (assignment_expression "param_1 = param_1 + -4" (identifier "param_1") (= "=") (binary_expression "param_1 + -4" (identifier "param_1") (+ "+") (number_literal "-4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *var_3,size_t var_1,type_1 *var_6,type_2 to_temp)

{
  type_3 *puVar1;
  type_3 *puVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  size_t sVar6;
  char *pcVar7;
  type_3 uVar8;
  int var_4;
  long var_11;
  type_1 *var_7;
  type_1 *var_8;
  type_1 *var_9;
  type_4 var_5;
  size_t var_10;
  
  if (var_1 == 2) {
    var_4 = var_2(var_3 + -1,var_3 + -2);
    if (to_temp) {
      var_7 = var_3 + (int)~(uint)(0 < var_4);
      var_10 = var_7->length;
      var_6[-1].text = var_7->text;
      var_6[-1].length = var_10;
      pcVar3 = var_7->keylim;
      var_6[-1].keybeg = var_7->keybeg;
      var_6[-1].keylim = pcVar3;
      var_7 = var_3 + (int)((0 < var_4) - 2);
      var_10 = var_7->length;
      var_6[-2].text = var_7->text;
      var_6[-2].length = var_10;
      pcVar3 = var_7->keylim;
      var_6[-2].keybeg = var_7->keybeg;
      var_6[-2].keylim = pcVar3;
    }
    else if (0 < var_4) {
      pcVar3 = var_3[-1].text;
      var_10 = var_3[-1].length;
      var_6[-1].text = pcVar3;
      var_6[-1].length = var_10;
      pcVar4 = var_3[-1].keybeg;
      pcVar5 = var_3[-1].keylim;
      var_6[-1].keybeg = pcVar4;
      var_6[-1].keylim = pcVar5;
      sVar6 = var_3[-2].length;
      var_3[-1].text = var_3[-2].text;
      var_3[-1].length = sVar6;
      pcVar7 = var_3[-2].keylim;
      var_3[-1].keybeg = var_3[-2].keybeg;
      var_3[-1].keylim = pcVar7;
      var_3[-2].text = pcVar3;
      var_3[-2].length = var_10;
      var_3[-2].keybeg = pcVar4;
      var_3[-2].keylim = pcVar5;
    }
  }
  else {
    var_5 = var_1 >> 1;
    var_10 = var_1 - var_5;
    if (to_temp) {
      function_1(var_3 + -var_5,var_10,var_6 + -var_5,true);
      var_7 = var_6;
      if (3 < var_1) {
        function_1(var_3,var_5,var_6,!to_temp);
      }
    }
    else {
      function_1(var_3 + -var_5,var_10,var_6,false);
      var_7 = var_3;
      if (var_1 < 4) {
        sVar6 = var_3[-1].length;
        var_6[-1].text = var_3[-1].text;
        var_6[-1].length = sVar6;
        pcVar3 = var_3[-1].keylim;
        var_6[-1].keybeg = var_3[-1].keybeg;
        var_6[-1].keylim = pcVar3;
        var_3 = var_6;
      }
      else {
        function_1(var_3,var_5,var_6,!to_temp);
        var_3 = var_6;
      }
    }
    var_9 = var_7 + -var_5;
    do {
      while( true ) {
        var_8 = var_7;
        var_7 = var_8 + -1;
        var_4 = var_2(var_3 + -1,var_9 + -1);
        if (var_4 < 1) break;
        sVar6 = var_9[-1].length;
        var_7->text = var_9[-1].text;
        var_8[-1].length = sVar6;
        pcVar3 = var_9[-1].keylim;
        var_8[-1].keybeg = var_9[-1].keybeg;
        var_8[-1].keylim = pcVar3;
        var_10 = var_10 - 1;
        var_9 = var_9 + -1;
        if (var_10 == 0) {
          var_11 = -0x20;
          do {
            puVar2 = (type_3 *)((long)&var_3->text + var_11);
            uVar8 = puVar2[1];
            puVar1 = (type_3 *)((long)&var_7->text + var_11);
            *puVar1 = *puVar2;
            puVar1[1] = uVar8;
            puVar1 = (type_3 *)((long)&var_3->keybeg + var_11);
            uVar8 = puVar1[1];
            puVar2 = (type_3 *)((long)var_8 + var_11 + -0x10);
            *puVar2 = *puVar1;
            puVar2[1] = uVar8;
            var_11 = var_11 + -0x20;
            var_5 = var_5 - 1;
          } while (var_5 != 0);
          return;
        }
      }
      sVar6 = var_3[-1].length;
      var_7->text = var_3[-1].text;
      var_8[-1].length = sVar6;
      pcVar3 = var_3[-1].keylim;
      var_8[-1].keybeg = var_3[-1].keybeg;
      var_8[-1].keylim = pcVar3;
      var_5 = var_5 - 1;
      var_3 = var_3 + -1;
    } while (var_5 != 0);
  }
  return;
}


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

void MASKED(undefined8 *param_1,ulong param_2,undefined8 *param_3,byte param_4)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  int iVar6;
  undefined8 *puVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  ulong uVar10;
  long lVar11;
  
  if (param_2 == 2) {
    iVar6 = FUN_0010587c(param_1 + -4,param_1 + -8);
    if (param_4 == 0) {
      if (0 < iVar6) {
        uVar2 = param_1[-4];
        uVar3 = param_1[-3];
        param_3[-4] = uVar2;
        param_3[-3] = uVar3;
        uVar4 = param_1[-2];
        uVar5 = param_1[-1];
        param_3[-2] = uVar4;
        param_3[-1] = uVar5;
        param_1[-4] = param_1[-8];
        param_1[-3] = param_1[-7];
        param_1[-2] = param_1[-6];
        param_1[-1] = param_1[-5];
        param_1[-8] = uVar2;
        param_1[-7] = uVar3;
        param_1[-6] = uVar4;
        param_1[-5] = uVar5;
      }
    }
    else {
      puVar7 = param_1 + (long)(int)~(uint)(0 < iVar6) * 4;
      uVar2 = puVar7[1];
      param_3[-4] = *puVar7;
      param_3[-3] = uVar2;
      uVar2 = puVar7[3];
      param_3[-2] = puVar7[2];
      param_3[-1] = uVar2;
      param_1 = param_1 + (long)(int)((0 < iVar6) - 2) * 4;
      uVar2 = param_1[1];
      param_3[-8] = *param_1;
      param_3[-7] = uVar2;
      uVar2 = param_1[3];
      param_3[-6] = param_1[2];
      param_3[-5] = uVar2;
    }
  }
  else {
    uVar10 = param_2 >> 1;
    lVar11 = param_2 - uVar10;
    if (param_4 == 0) {
      MASKED(param_1 + uVar10 * -4,lVar11,param_3,0);
      puVar7 = param_1;
      if (param_2 < 4) {
        uVar2 = param_1[-3];
        param_3[-4] = param_1[-4];
        param_3[-3] = uVar2;
        uVar2 = param_1[-1];
        param_3[-2] = param_1[-2];
        param_3[-1] = uVar2;
        param_1 = param_3;
      }
      else {
        MASKED(param_1,uVar10,param_3,1);
        param_1 = param_3;
      }
    }
    else {
      MASKED(param_1 + uVar10 * -4,lVar11,param_3 + uVar10 * -4,1);
      puVar7 = param_3;
      if (3 < param_2) {
        MASKED(param_1,uVar10,param_3,param_4 ^ 1);
      }
    }
    puVar9 = puVar7 + uVar10 * -4;
    do {
      while( true ) {
        puVar8 = puVar7;
        puVar7 = puVar8 + -4;
        iVar6 = FUN_0010587c(param_1 + -4,puVar9 + -4);
        if (iVar6 < 1) break;
        uVar2 = puVar9[-3];
        *puVar7 = puVar9[-4];
        puVar8[-3] = uVar2;
        uVar2 = puVar9[-1];
        puVar8[-2] = puVar9[-2];
        puVar8[-1] = uVar2;
        lVar11 = lVar11 + -1;
        puVar9 = puVar9 + -4;
        if (lVar11 == 0) {
          lVar11 = -0x20;
          do {
            uVar2 = ((undefined8 *)((long)param_1 + lVar11))[1];
            *(undefined8 *)((long)puVar7 + lVar11) = *(undefined8 *)((long)param_1 + lVar11);
            ((undefined8 *)((long)puVar7 + lVar11))[1] = uVar2;
            puVar9 = (undefined8 *)((long)param_1 + lVar11 + 0x10);
            uVar2 = puVar9[1];
            puVar1 = (undefined8 *)((long)puVar8 + lVar11 + -0x10);
            *puVar1 = *puVar9;
            puVar1[1] = uVar2;
            lVar11 = lVar11 + -0x20;
            uVar10 = uVar10 - 1;
          } while (uVar10 != 0);
          return;
        }
      }
      uVar2 = param_1[-3];
      *puVar7 = param_1[-4];
      puVar8[-3] = uVar2;
      uVar2 = param_1[-1];
      puVar8[-2] = param_1[-2];
      puVar8[-1] = uVar2;
      uVar10 = uVar10 - 1;
      param_1 = param_1 + -4;
    } while (uVar10 != 0);
  }
  return;
}

