
void internal_mul(BignumInt *a,BignumInt *b,BignumInt *c,int len,BignumInt *scratch)

{
  uint *puVar1;
  bool bVar2;
  longlong lVar3;
  uint uVar4;
  uint *puVar5;
  int iVar6;
  BignumInt *pBVar7;
  uint *puVar8;
  BignumInt *pBVar9;
  BignumInt *pBVar10;
  uint *puVar11;
  uint uVar12;
  undefined *puVar13;
  int iVar14;
  BignumInt *pBVar15;
  uint uVar16;
  uint *puVar17;
  BignumInt BVar18;
  uint uVar19;
  int iVar20;
  int iVar21;
  code *pcVar22;
  
  if (len < 0x33) {
    if (0 < len << 1) {
      pBVar9 = c;
      do {
        *pBVar9 = 0;
        pBVar9 = pBVar9 + 1;
      } while (c + len * 2 != pBVar9);
    }
    pBVar9 = a + len;
    puVar11 = c + len * 2;
    if (a < pBVar9) {
      pBVar10 = b + len;
      do {
        puVar11 = puVar11 + -1;
        uVar12 = 0;
        puVar17 = puVar11;
        pBVar15 = pBVar10;
        if (b < pBVar10) {
          do {
            pBVar15 = pBVar15 + -1;
            uVar12 = *puVar17 + uVar12;
            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +
                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];
            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);
            *puVar17 = (uint)lVar3;
            puVar17 = puVar17 + -1;
          } while (b < pBVar15);
          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);
        }
        pBVar9 = pBVar9 + -1;
        *puVar17 = uVar12;
      } while (a < pBVar9);
    }
  }
  else {
    iVar6 = len >> 1;
    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);
    iVar20 = len - iVar6;
    internal_mul(a,b,c,iVar6,scratch);
    iVar14 = iVar20 + 1;
    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);
    iVar21 = iVar14 * 2;
    puVar11 = scratch + iVar14;
    scratch[iVar20 + 2] = 0;
    *puVar11 = 0;
    scratch[1] = 0;
    *scratch = 0;
    pBVar9 = scratch + (iVar21 - iVar6);
    pBVar10 = a;
    pBVar15 = b;
    do {
      BVar18 = *pBVar10;
      pBVar10 = pBVar10 + 1;
      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;
      *pBVar9 = *pBVar15;
      pBVar9 = pBVar9 + 1;
      pBVar15 = pBVar15 + 1;
    } while (a + iVar6 != pBVar10);
    if (iVar20 < 1) {
      *scratch = 0;
      uVar12 = 0;
    }
    else {
      pBVar9 = a + iVar14 + iVar6 + -2;
      uVar12 = 0;
      puVar17 = scratch + iVar20;
      do {
        puVar8 = puVar17;
        uVar19 = *pBVar9;
        pBVar9 = pBVar9 + -1;
        uVar4 = uVar19 + *puVar8;
        uVar16 = uVar12 + uVar4;
        *puVar8 = uVar16;
        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);
        puVar17 = puVar8 + -1;
      } while (scratch != puVar8 + -1);
      *scratch = uVar12;
      pBVar9 = b + iVar14 + iVar6 + -2;
      uVar12 = 0;
      puVar17 = scratch + iVar14 + iVar20;
      do {
        puVar5 = puVar17 + -1;
        uVar19 = *pBVar9;
        pBVar9 = pBVar9 + -1;
        uVar4 = uVar19 + *puVar17;
        uVar16 = uVar12 + uVar4;
        *puVar17 = uVar16;
        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);
        puVar17 = puVar5;
      } while (puVar8 + iVar20 != puVar5);
    }
    *puVar11 = uVar12;
    pBVar15 = scratch + iVar14 * 4;
    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);
    scratch[3] = 0;
    scratch[2] = 0;
    scratch[1] = 0;
    *scratch = 0;
    pBVar9 = c;
    pBVar10 = scratch + (iVar14 - iVar6) * 2;
    do {
      BVar18 = *pBVar9;
      pBVar9 = pBVar9 + 1;
      *pBVar10 = BVar18;
      pBVar10 = pBVar10 + 1;
    } while (c + iVar6 * 2 != pBVar9);
    if (iVar21 + -3 < 0) {
      uVar12 = 0;
    }
    else {
      uVar12 = 0;
      pBVar10 = c + iVar6 * 2 + iVar21 + -3;
      pBVar9 = scratch + iVar14 * 2 + -2;
      do {
        pBVar7 = pBVar9 + -1;
        uVar19 = *pBVar10;
        pBVar10 = pBVar10 + -1;
        uVar4 = uVar19 + pBVar9[1];
        uVar16 = uVar12 + uVar4;
        pBVar9[1] = uVar16;
        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);
        pBVar9 = pBVar7;
      } while (scratch != pBVar7);
    }
    iVar21 = iVar21 + -1;
    scratch[1] = uVar12;
    if (-1 < iVar21) {
      iVar6 = 1;
      puVar11 = scratch + iVar14 * 4;
      do {
        uVar16 = puVar11[-1];
        puVar17 = puVar11 + -1;
        uVar19 = puVar11[iVar14 * -2 + -1];
        uVar12 = uVar16 + iVar6;
        uVar4 = ~uVar19 + uVar12;
        *puVar17 = uVar4;
        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);
        puVar11 = puVar17;
      } while (scratch + iVar14 * 2 != puVar17);
      iVar6 = (len * 2 - iVar20) + iVar14 * -2;
      puVar17 = scratch + iVar21 + iVar14 * 2;
      uVar12 = 0;
      puVar11 = c + iVar21 + iVar6;
      do {
        puVar8 = puVar11 + -1;
        uVar19 = *puVar17;
        puVar17 = puVar17 + -1;
        uVar4 = uVar19 + *puVar11;
        uVar16 = uVar12 + uVar4;
        *puVar11 = uVar16;
        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);
        puVar11 = puVar8;
      } while (c + iVar6 + -1 != puVar8);
      iVar6 = (len * 2 - iVar20) + iVar14 * -2;
      iVar21 = iVar6 + -1;
      if (uVar12 != 0) {
        if (-1 < iVar21) {
          pBVar9 = c + iVar6;
          do {
            uVar12 = pBVar9[-1];
            iVar21 = iVar21 + -1;
            uVar4 = uVar12 + 1;
            pBVar9[-1] = uVar4;
            if (uVar12 <= uVar4) {
              return;
            }
            pBVar9 = pBVar9 + -1;
          } while (iVar21 != -1);
        }
        puVar11 = (uint *)&DAT_00000135;
        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;
        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);
        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);
        (*(code *)PTR___assert_fail_000adb00)();
        if ((int)puVar13 < 0x33) {
          if ((int)puVar13 < 1) {
            iVar6 = (int)puVar13 << 2;
          }
          else {
            iVar6 = (int)puVar13 * 4;
            puVar17 = puVar11;
            do {
              *puVar17 = 0;
              puVar17 = puVar17 + 1;
            } while (puVar11 + (int)puVar13 != puVar17);
          }
          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);
          puVar17 = (uint *)((int)puVar11 + iVar6);
          if (pBVar9 < pBVar15) {
            do {
              uVar12 = 0;
              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);
              puVar5 = puVar17;
              while (puVar11 < puVar5) {
                puVar1 = puVar5 + -1;
                uVar4 = *puVar8;
                puVar5 = puVar5 + -1;
                puVar8 = puVar8 + -1;
                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +
                        (ulonglong)uVar12;
                *puVar5 = (uint)lVar3;
                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);
              }
              pBVar15 = pBVar15 + -1;
              puVar17 = puVar17 + -1;
            } while (pBVar9 < pBVar15);
          }
          return;
        }
        iVar21 = (int)puVar13 >> 1;
        pBVar7 = pBVar15 + (int)puVar13 * 2;
        iVar6 = (int)puVar13 - iVar21;
        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);
        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);
        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);
        puVar17 = puVar11 + iVar21;
        if (0 < iVar6) {
          iVar14 = iVar21 * 2 + iVar6;
          puVar5 = pBVar15 + iVar14;
          puVar8 = puVar17;
          do {
            uVar12 = *puVar5;
            puVar5 = puVar5 + 1;
            *puVar8 = uVar12;
            puVar8 = puVar8 + 1;
          } while (pBVar15 + iVar6 + iVar14 != puVar5);
        }
        iVar14 = 0;
        puVar5 = pBVar15 + iVar21 + -1;
        puVar8 = puVar5;
        do {
          uVar16 = *puVar8;
          uVar19 = puVar8[iVar21];
          uVar12 = uVar16 + iVar14;
          uVar4 = uVar19 + uVar12;
          *puVar8 = uVar4;
          bVar2 = pBVar15 != puVar8;
          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);
          puVar8 = puVar8 + -1;
        } while (bVar2);
        iVar14 = 0;
        do {
          puVar8 = puVar5 + iVar21 + iVar6;
          uVar16 = *puVar5;
          puVar17 = puVar17 + -1;
          puVar5 = puVar5 + -1;
          uVar19 = *puVar8;
          uVar12 = uVar16 + iVar14;
          uVar4 = uVar19 + uVar12;
          *puVar17 = uVar4;
          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);
        } while (puVar11 != puVar17);
        return;
      }
    }
  }
  return;
}



void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)

{
  bool bVar1;
  longlong lVar2;
  uint *puVar3;
  uint uVar4;
  uint *puVar5;
  int iVar6;
  uint *puVar7;
  undefined *puVar8;
  undefined *puVar9;
  uint *puVar10;
  uint uVar11;
  undefined *puVar12;
  int iVar13;
  uint uVar14;
  uint *puVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  code *pcVar19;
  
  if (param_4 < 0x33) {
    if (0 < param_4 << 1) {
      puVar10 = param_3;
      do {
        *puVar10 = 0;
        puVar10 = puVar10 + 1;
      } while (param_3 + param_4 * 2 != puVar10);
    }
    puVar10 = param_1 + param_4;
    param_3 = param_3 + param_4 * 2;
    if (param_1 < puVar10) {
      puVar15 = param_2 + param_4;
      do {
        param_3 = param_3 + -1;
        uVar11 = 0;
        puVar3 = param_3;
        puVar7 = puVar15;
        if (param_2 < puVar15) {
          do {
            puVar7 = puVar7 + -1;
            uVar11 = *puVar3 + uVar11;
            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +
                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];
            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
            *puVar3 = (uint)lVar2;
            puVar3 = puVar3 + -1;
          } while (param_2 < puVar7);
          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);
        }
        puVar10 = puVar10 + -1;
        *puVar3 = uVar11;
      } while (param_1 < puVar10);
    }
  }
  else {
    iVar6 = param_4 >> 1;
    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);
    iVar17 = param_4 - iVar6;
    FUN_0004ef90();
    iVar13 = iVar17 + 1;
    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);
    iVar18 = iVar13 * 2;
    puVar7 = param_5 + iVar13;
    param_5[iVar17 + 2] = 0;
    *puVar7 = 0;
    param_5[1] = 0;
    *param_5 = 0;
    puVar10 = param_5 + (iVar18 - iVar6);
    puVar15 = param_1;
    puVar3 = param_2;
    do {
      uVar11 = *puVar15;
      puVar15 = puVar15 + 1;
      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;
      *puVar10 = *puVar3;
      puVar10 = puVar10 + 1;
      puVar3 = puVar3 + 1;
    } while (param_1 + iVar6 != puVar15);
    if (iVar17 < 1) {
      *param_5 = 0;
      uVar11 = 0;
    }
    else {
      param_1 = param_1 + iVar13 + iVar6 + -2;
      uVar11 = 0;
      puVar10 = param_5 + iVar17;
      do {
        puVar15 = puVar10;
        uVar16 = *param_1;
        param_1 = param_1 + -1;
        uVar4 = uVar16 + *puVar15;
        uVar14 = uVar11 + uVar4;
        *puVar15 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar15 + -1;
      } while (param_5 != puVar15 + -1);
      *param_5 = uVar11;
      param_2 = param_2 + iVar13 + iVar6 + -2;
      uVar11 = 0;
      puVar10 = param_5 + iVar13 + iVar17;
      do {
        puVar3 = puVar10 + -1;
        uVar16 = *param_2;
        param_2 = param_2 + -1;
        uVar4 = uVar16 + *puVar10;
        uVar14 = uVar11 + uVar4;
        *puVar10 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar3;
      } while (puVar15 + iVar17 != puVar3);
    }
    *puVar7 = uVar11;
    puVar3 = param_5 + iVar13 * 4;
    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);
    param_5[3] = 0;
    param_5[2] = 0;
    param_5[1] = 0;
    *param_5 = 0;
    puVar10 = param_3;
    puVar15 = param_5 + (iVar13 - iVar6) * 2;
    do {
      uVar11 = *puVar10;
      puVar10 = puVar10 + 1;
      *puVar15 = uVar11;
      puVar15 = puVar15 + 1;
    } while (param_3 + iVar6 * 2 != puVar10);
    if (iVar18 + -3 < 0) {
      uVar11 = 0;
    }
    else {
      uVar11 = 0;
      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;
      puVar10 = param_5 + iVar13 * 2 + -2;
      do {
        puVar7 = puVar10 + -1;
        uVar16 = *puVar15;
        puVar15 = puVar15 + -1;
        uVar4 = uVar16 + puVar10[1];
        uVar14 = uVar11 + uVar4;
        puVar10[1] = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar7;
      } while (param_5 != puVar7);
    }
    iVar18 = iVar18 + -1;
    param_5[1] = uVar11;
    if (-1 < iVar18) {
      iVar6 = 1;
      puVar10 = param_5 + iVar13 * 4;
      do {
        uVar14 = puVar10[-1];
        puVar15 = puVar10 + -1;
        uVar16 = puVar10[iVar13 * -2 + -1];
        uVar11 = uVar14 + iVar6;
        uVar4 = ~uVar16 + uVar11;
        *puVar15 = uVar4;
        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);
        puVar10 = puVar15;
      } while (param_5 + iVar13 * 2 != puVar15);
      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;
      param_5 = param_5 + iVar18 + iVar13 * 2;
      uVar11 = 0;
      puVar10 = param_3 + iVar18 + iVar6;
      do {
        puVar15 = puVar10 + -1;
        uVar16 = *param_5;
        param_5 = param_5 + -1;
        uVar4 = uVar16 + *puVar10;
        uVar14 = uVar11 + uVar4;
        *puVar10 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar15;
      } while (param_3 + iVar6 + -1 != puVar15);
      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;
      iVar18 = iVar6 + -1;
      if (uVar11 != 0) {
        if (-1 < iVar18) {
          param_3 = param_3 + iVar6;
          do {
            uVar11 = param_3[-1];
            iVar18 = iVar18 + -1;
            uVar4 = uVar11 + 1;
            param_3[-1] = uVar4;
            if (uVar11 <= uVar4) {
              return;
            }
            param_3 = param_3 + -1;
          } while (iVar18 != -1);
        }
        puVar10 = (uint *)&DAT_00000135;
        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;
        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;
        puVar8 = PTR_DAT_000ad2c8 + 0x4254;
        (*(code *)PTR___assert_fail_000adb00)();
        if ((int)puVar12 < 0x33) {
          if ((int)puVar12 < 1) {
            iVar6 = (int)puVar12 << 2;
          }
          else {
            iVar6 = (int)puVar12 * 4;
            puVar15 = puVar10;
            do {
              *puVar15 = 0;
              puVar15 = puVar15 + 1;
            } while (puVar10 + (int)puVar12 != puVar15);
          }
          puVar12 = puVar8 + iVar6;
          puVar15 = (uint *)((int)puVar10 + iVar6);
          if (puVar8 < puVar12) {
            do {
              uVar11 = 0;
              puVar3 = (uint *)(puVar9 + iVar6 + -4);
              puVar7 = puVar15;
              while (puVar10 < puVar7) {
                puVar5 = puVar7 + -1;
                uVar4 = *puVar3;
                puVar7 = puVar7 + -1;
                puVar3 = puVar3 + -1;
                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +
                        (ulonglong)uVar11;
                *puVar7 = (uint)lVar2;
                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
              }
              puVar12 = puVar12 + -4;
              puVar15 = puVar15 + -1;
            } while (puVar8 < puVar12);
          }
          return;
        }
        iVar18 = (int)puVar12 >> 1;
        puVar15 = puVar3 + (int)puVar12 * 2;
        iVar6 = (int)puVar12 - iVar18;
        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);
        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);
        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);
        puVar15 = puVar10 + iVar18;
        if (0 < iVar6) {
          iVar13 = iVar18 * 2 + iVar6;
          puVar5 = puVar3 + iVar13;
          puVar7 = puVar15;
          do {
            uVar11 = *puVar5;
            puVar5 = puVar5 + 1;
            *puVar7 = uVar11;
            puVar7 = puVar7 + 1;
          } while (puVar3 + iVar6 + iVar13 != puVar5);
        }
        iVar13 = 0;
        puVar5 = puVar3 + iVar18 + -1;
        puVar7 = puVar5;
        do {
          uVar14 = *puVar7;
          uVar16 = puVar7[iVar18];
          uVar11 = uVar14 + iVar13;
          uVar4 = uVar16 + uVar11;
          *puVar7 = uVar4;
          bVar1 = puVar3 != puVar7;
          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);
          puVar7 = puVar7 + -1;
        } while (bVar1);
        iVar13 = 0;
        do {
          puVar3 = puVar5 + iVar18 + iVar6;
          uVar14 = *puVar5;
          puVar15 = puVar15 + -1;
          puVar5 = puVar5 + -1;
          uVar16 = *puVar3;
          uVar11 = uVar14 + iVar13;
          uVar4 = uVar16 + uVar11;
          *puVar15 = uVar4;
          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);
        } while (puVar10 != puVar15);
        return;
      }
    }
  }
  return;
}


lui gp,0x6
addiu gp,gp,0x6300
addu gp,gp,t9
addiu sp,sp,-0x60
slti v0,a3,0x33
sw gp,0x18(sp)
sw s8,0x58(sp)
or s8,a0,zero
sw s7,0x54(sp)
sw s2,0x40(sp)
or s2,a2,zero
sw s0,0x38(sp)
or s0,a1,zero
sw ra,0x5c(sp)
sw s6,0x50(sp)
sw s5,0x4c(sp)
sw s4,0x48(sp)
sw s3,0x44(sp)
sw s1,0x3c(sp)
beq v0,zero,0x0004f0dc
_lw s7,0x70(sp)
sll v0,a3,0x1
blez v0,0x0004f008
_sll t4,a3,0x3
addu a0,a2,t4
or v0,a2,zero
sw zero,0x0(v0)
addiu v0,v0,0x4
bne a0,v0,0x0004eff8
_nop
sll a3,a3,0x2
addu t2,s8,a3
sltu v0,s8,t2
beq v0,zero,0x0004f0a4
_addu t4,s2,t4
addu t6,s0,a3
nor t7,zero,s0
addu t7,t7,t6
sltu t8,s0,t6
srl t7,t7,0x2
nor t7,zero,t7
sll t7,t7,0x2
addiu t4,t4,-0x4
beq t8,zero,0x0004f0d4
_or a3,zero,zero
or a2,t6,zero
or a1,t4,zero
lw a0,0x0(a1)
addiu a2,a2,-0x4
lw t1,0x0(a2)
addiu a1,a1,-0x4
sltu t0,s0,a2
addu v1,a0,a3
lw a3,-0x4(t2)
mtlo v1
sltu a0,v1,a0
mthi a0
maddu t1,a3
mflo v1
mfhi v0
sw v1,0x4(a1)
bne t0,zero,0x0004f04c
_or a3,v0,zero
addu v0,t4,t7
addiu t2,t2,-0x4
sw a3,0x0(v0)
sltu v0,s8,t2
bne v0,zero,0x0004f038
_nop
lw ra,0x5c(sp)
lw s8,0x58(sp)
lw s7,0x54(sp)
lw s6,0x50(sp)
lw s5,0x4c(sp)
lw s4,0x48(sp)
lw s3,0x44(sp)
lw s2,0x40(sp)
lw s1,0x3c(sp)
lw s0,0x38(sp)
jr ra
_addiu sp,sp,0x60
b 0x0004f090
_or v0,t4,zero
lw s6,-0x7bc0(gp)
sra v1,a3,0x1
or s1,a3,zero
sw s7,0x10(sp)
sll v0,v1,0x3
sw v1,0x34(sp)
addiu t9,s6,-0x1070
subu s3,a3,v1
sw v0,0x24(sp)
sll s5,v1,0x2
sw t9,0x28(sp)
or a3,v1,zero
bal 0x0004ef90
_addu s6,a2,v0
addu t4,s8,s5
lw t9,0x28(sp)
addiu t2,s3,0x1
sw s7,0x10(sp)
addu a1,s0,s5
sw t4,0x2c(sp)
or a0,t4,zero
sw t2,0x30(sp)
or a3,s3,zero
jalr t9
_or a2,s6,zero
addiu a0,s3,0x2
lw t2,0x30(sp)
or t5,s0,zero
lw v1,0x34(sp)
sll t0,a0,0x2
lw t4,0x2c(sp)
sll s4,t2,0x1
lw t9,0x28(sp)
sll a2,t2,0x2
subu a3,s4,v1
addu a0,s7,t0
sll v0,a3,0x2
addu a1,s7,a2
subu v1,t2,v1
sw zero,0x0(a0)
subu a3,zero,a3
addu v0,s7,v0
sw zero,0x0(a1)
sll t7,a3,0x2
sw zero,0x4(s7)
sll t8,v1,0x2
sw zero,0x0(s7)
or a0,s8,zero
addu a3,t7,v0
lw t6,0x0(a0)
addiu t5,t5,0x4
addu a3,a3,t8
addiu v0,v0,0x4
addiu a0,a0,0x4
sw t6,0x0(a3)
lw a3,-0x4(t5)
bne t4,a0,0x0004f19c
_sw a3,-0x4(v0)
blez s3,0x0004f42c
_addiu a2,a2,-0x8
sll a0,s3,0x2
addu t4,s5,a2
addu a0,s7,a0
addu t3,s8,t4
b 0x0004f1e8
_or a3,zero,zero
or a0,t7,zero
lw t6,0x0(t3)
addiu t7,a0,-0x4
lw v0,0x0(a0)
addiu t3,t3,-0x4
addu v0,t6,v0
addu t5,a3,v0
sltu v0,v0,t6
sltu a3,t5,a3
sw t5,0x0(a0)
bne s7,t7,0x0004f1e4
_addu a3,a3,v0
addu a2,t0,a2
sw a3,0x0(s7)
addiu a0,a0,-0x8
addu a2,s7,a2
addu t3,s0,t4
addu a0,a0,t0
or a3,zero,zero
addiu a2,a2,-0x4
lw t4,0x0(t3)
lw v0,0x4(a2)
addiu t3,t3,-0x4
addu v0,t4,v0
addu t0,a3,v0
sltu v0,v0,t4
sltu a3,t0,a3
sw t0,0x4(a2)
bne a0,a2,0x0004f230
_addu a3,a3,v0
sll s8,t2,0x3
sw a3,0x0(a1)
sll s0,t2,0x4
sw v1,0x2c(sp)
addu t0,s7,s8
addu v0,s7,s0
or a2,t0,zero
sw t0,0x28(sp)
sw v0,0x10(sp)
or a3,t2,zero
jalr t9
_or a0,s7,zero
or v0,s2,zero
lw v1,0x2c(sp)
lw t0,0x28(sp)
lw gp,0x18(sp)
sll v1,v1,0x3
sw zero,0xc(s7)
sw zero,0x8(s7)
addu v1,s7,v1
sw zero,0x4(s7)
sw zero,0x0(s7)
lw a0,0x0(v0)
addiu v1,v1,0x4
addiu v0,v0,0x4
bne s6,v0,0x0004f2b4
_sw a0,-0x4(v1)
addiu v0,s4,-0x3
bltz v0,0x0004f438
_sll a0,v0,0x2
lw v0,0x24(sp)
addiu v1,s8,-0x8
or a1,zero,zero
addu a0,a0,v0
addu v1,s7,v1
addu a0,s2,a0
addiu v1,v1,-0x4
lw a3,0x0(a0)
lw v0,0x8(v1)
addiu a0,a0,-0x4
addu v0,a3,v0
addu a2,a1,v0
sltu v0,v0,a3
sltu a1,a2,a1
sw a2,0x8(v1)
bne s7,v1,0x0004f2ec
_addu a1,a1,v0
addiu a0,s4,-0x1
bltz a0,0x0004f0a4
_sw a1,0x4(s7)
addu v1,s7,s0
li v0,0x1
subu a2,v1,s8
lw a1,-0x4(v1)
addiu v1,v1,-0x4
lw a2,-0x4(a2)
addu v0,a1,v0
sltu a1,v0,a1
nor a2,zero,a2
addu v0,a2,v0
sw v0,0x0(v1)
sltu v0,v0,a2
bne t0,v1,0x0004f32c
_addu v0,v0,a1
sll s1,s1,0x1
sll v0,a0,0x2
subu v1,s1,s3
addu s8,s8,v0
subu v1,v1,s4
addiu a3,s2,-0x4
sll v1,v1,0x2
addu s7,s7,s8
addu v0,v1,v0
addu a3,a3,v1
or a1,zero,zero
addu v1,s2,v0
addiu v1,v1,-0x4
lw a2,0x0(s7)
lw v0,0x4(v1)
addiu s7,s7,-0x4
addu v0,a2,v0
addu a0,a1,v0
sltu v0,v0,a2
sltu a1,a0,a1
sw a0,0x4(v1)
bne a3,v1,0x0004f38c
_addu a1,a1,v0
subu s1,s1,s3
subu v0,s1,s4
beq a1,zero,0x0004f0a4
_addiu a0,v0,-0x1
bltz a0,0x0004f440
_sll v0,v0,0x2
li a2,-0x1
b 0x0004f3e4
_addu v1,s2,v0
beq a0,a2,0x0004f440
_addiu v1,v1,-0x4
lw v0,-0x4(v1)
addiu a0,a0,-0x1
addiu a1,v0,0x1
sltu v0,a1,v0
bne v0,zero,0x0004f3dc
_sw a1,-0x4(v1)
lw ra,0x5c(sp)
lw s8,0x58(sp)
lw s7,0x54(sp)
lw s6,0x50(sp)
lw s5,0x4c(sp)
lw s4,0x48(sp)
lw s3,0x44(sp)
lw s2,0x40(sp)
lw s1,0x3c(sp)
lw s0,0x38(sp)
jr ra
_addiu sp,sp,0x60
sw zero,0x0(s7)
b 0x0004f25c
_or a3,zero,zero
b 0x0004f318
_or a1,zero,zero
lw a3,-0x7fc8(gp)
li a2,0x135
lw a1,-0x7fc8(gp)
lw a0,-0x7fc8(gp)
lw t9,-0x7790(gp)
addiu a3,a3,0x43c4
addiu a1,a1,0x41d0
jalr t9
_addiu a0,a0,0x4254
(translation_unit "void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" identifier (parameter_list "(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "undefined *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "code *pcVar19;" type_identifier (pointer_declarator "*pcVar19" * identifier) ;) (if_statement "if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "(param_4 < 0x33)" ( (binary_expression "param_4 < 0x33" identifier < number_literal) )) (compound_statement "{\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }" { (if_statement "if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" if (parenthesized_expression "(0 < param_4 << 1)" ( (binary_expression "0 < param_4 << 1" number_literal < (binary_expression "param_4 << 1" identifier << number_literal)) )) (compound_statement "{\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" { (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" identifier = identifier) ;) (do_statement "do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);" do (compound_statement "{\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      }" { (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 + param_4 * 2 != puVar10)" ( (binary_expression "param_3 + param_4 * 2 != puVar10" (binary_expression "param_3 + param_4 * 2" identifier + (binary_expression "param_4 * 2" identifier * number_literal)) != identifier) )) ;) })) (expression_statement "puVar10 = param_1 + param_4;" (assignment_expression "puVar10 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) (expression_statement "param_3 = param_3 + param_4 * 2;" (assignment_expression "param_3 = param_3 + param_4 * 2" identifier = (binary_expression "param_3 + param_4 * 2" identifier + (binary_expression "param_4 * 2" identifier * number_literal))) ;) (if_statement "if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" if (parenthesized_expression "(param_1 < puVar10)" ( (binary_expression "param_1 < puVar10" identifier < identifier) )) (compound_statement "{\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" { (expression_statement "puVar15 = param_2 + param_4;" (assignment_expression "puVar15 = param_2 + param_4" identifier = (binary_expression "param_2 + param_4" identifier + identifier)) ;) (do_statement "do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);" do (compound_statement "{\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      }" { (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar3 = param_3;" (assignment_expression "puVar3 = param_3" identifier = identifier) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (if_statement "if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" if (parenthesized_expression "(param_2 < puVar15)" ( (binary_expression "param_2 < puVar15" identifier < identifier) )) (compound_statement "{\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" { (do_statement "do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);" do (compound_statement "{\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          }" { (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = *puVar3 + uVar11;" (assignment_expression "uVar11 = *puVar3 + uVar11" identifier = (binary_expression "*puVar3 + uVar11" (pointer_expression "*puVar3" * identifier) + identifier)) ;) (expression_statement "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];" (assignment_expression "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" identifier = (binary_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (cast_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(uVar11 < *puVar3,uVar11)" identifier (argument_list "(uVar11 < *puVar3,uVar11)" ( (binary_expression "uVar11 < *puVar3" identifier < (pointer_expression "*puVar3" * identifier)) , identifier )))) + (binary_expression "(ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (binary_expression "(ulonglong)*puVar7" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)puVar10[-1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "puVar10[-1]" identifier [ number_literal ]))))) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*puVar3 = (uint)lVar2;" (assignment_expression "*puVar3 = (uint)lVar2" (pointer_expression "*puVar3" * identifier) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 < puVar7)" ( (binary_expression "param_2 < puVar7" identifier < identifier) )) ;) (expression_statement "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);" (assignment_expression "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" identifier = (binary_expression "param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" identifier + (unary_expression "~(~(uint)param_2 + (int)puVar15 >> 2)" ~ (parenthesized_expression "(~(uint)param_2 + (int)puVar15 >> 2)" ( (binary_expression "~(uint)param_2 + (int)puVar15 >> 2" (binary_expression "~(uint)param_2 + (int)puVar15" (unary_expression "~(uint)param_2" ~ (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) + (cast_expression "(int)puVar15" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ))))) ;) })) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "*puVar3 = uVar11;" (assignment_expression "*puVar3 = uVar11" (pointer_expression "*puVar3" * identifier) = identifier) ;) }) while (parenthesized_expression "(param_1 < puVar10)" ( (binary_expression "param_1 < puVar10" identifier < identifier) )) ;) })) }) (else_clause "else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" else (compound_statement "{\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" { (expression_statement "iVar6 = param_4 >> 1;" (assignment_expression "iVar6 = param_4 >> 1" identifier = (binary_expression "param_4 >> 1" identifier >> number_literal)) ;) (expression_statement "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);" (assignment_expression "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070)" identifier = (cast_expression "(code *)(PTR_LAB_000ad6d0 + -0x1070)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000ad6d0 + -0x1070)" ( (binary_expression "PTR_LAB_000ad6d0 + -0x1070" identifier + number_literal) )))) ;) (expression_statement "iVar17 = param_4 - iVar6;" (assignment_expression "iVar17 = param_4 - iVar6" identifier = (binary_expression "param_4 - iVar6" identifier - identifier)) ;) (expression_statement "FUN_0004ef90();" (call_expression "FUN_0004ef90()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar13 = iVar17 + 1;" (assignment_expression "iVar13 = iVar17 + 1" identifier = (binary_expression "iVar17 + 1" identifier + number_literal)) ;) (expression_statement "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);" (call_expression "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" (parenthesized_expression "(*pcVar19)" ( (pointer_expression "*pcVar19" * identifier) )) (argument_list "(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" ( (binary_expression "param_1 + iVar6" identifier + identifier) , (binary_expression "param_2 + iVar6" identifier + identifier) , (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "iVar18 = iVar13 * 2;" (assignment_expression "iVar18 = iVar13 * 2" identifier = (binary_expression "iVar13 * 2" identifier * number_literal)) ;) (expression_statement "puVar7 = param_5 + iVar13;" (assignment_expression "puVar7 = param_5 + iVar13" identifier = (binary_expression "param_5 + iVar13" identifier + identifier)) ;) (expression_statement "param_5[iVar17 + 2] = 0;" (assignment_expression "param_5[iVar17 + 2] = 0" (subscript_expression "param_5[iVar17 + 2]" identifier [ (binary_expression "iVar17 + 2" identifier + number_literal) ]) = number_literal) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "puVar10 = param_5 + (iVar18 - iVar6);" (assignment_expression "puVar10 = param_5 + (iVar18 - iVar6)" identifier = (binary_expression "param_5 + (iVar18 - iVar6)" identifier + (parenthesized_expression "(iVar18 - iVar6)" ( (binary_expression "iVar18 - iVar6" identifier - identifier) )))) ;) (expression_statement "puVar15 = param_1;" (assignment_expression "puVar15 = param_1" identifier = identifier) ;) (expression_statement "puVar3 = param_2;" (assignment_expression "puVar3 = param_2" identifier = identifier) ;) (do_statement "do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);" do (compound_statement "{\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    }" { (expression_statement "uVar11 = *puVar15;" (assignment_expression "uVar11 = *puVar15" identifier = (pointer_expression "*puVar15" * identifier)) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;" (assignment_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11" (subscript_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)]" identifier [ (binary_expression "(iVar13 - iVar6) - (iVar18 - iVar6)" (parenthesized_expression "(iVar13 - iVar6)" ( (binary_expression "iVar13 - iVar6" identifier - identifier) )) - (parenthesized_expression "(iVar18 - iVar6)" ( (binary_expression "iVar18 - iVar6" identifier - identifier) ))) ]) = identifier) ;) (expression_statement "*puVar10 = *puVar3;" (assignment_expression "*puVar10 = *puVar3" (pointer_expression "*puVar10" * identifier) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_1 + iVar6 != puVar15)" ( (binary_expression "param_1 + iVar6 != puVar15" (binary_expression "param_1 + iVar6" identifier + identifier) != identifier) )) ;) (if_statement "if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" if (parenthesized_expression "(iVar17 < 1)" ( (binary_expression "iVar17 < 1" identifier < number_literal) )) (compound_statement "{\n      *param_5 = 0;\n      uVar11 = 0;\n    }" { (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" else (compound_statement "{\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" { (expression_statement "param_1 = param_1 + iVar13 + iVar6 + -2;" (assignment_expression "param_1 = param_1 + iVar13 + iVar6 + -2" identifier = (binary_expression "param_1 + iVar13 + iVar6 + -2" (binary_expression "param_1 + iVar13 + iVar6" (binary_expression "param_1 + iVar13" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar17" identifier = (binary_expression "param_5 + iVar17" identifier + identifier)) ;) (do_statement "do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);" do (compound_statement "{\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      }" { (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" identifier = identifier) ;) (expression_statement "uVar16 = *param_1;" (assignment_expression "uVar16 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "param_1 = param_1 + -1;" (assignment_expression "param_1 = param_1 + -1" identifier = (binary_expression "param_1 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar15;" (assignment_expression "uVar4 = uVar16 + *puVar15" identifier = (binary_expression "uVar16 + *puVar15" identifier + (pointer_expression "*puVar15" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar15 = uVar14;" (assignment_expression "*puVar15 = uVar14" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15 + -1;" (assignment_expression "puVar10 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != puVar15 + -1)" ( (binary_expression "param_5 != puVar15 + -1" identifier != (binary_expression "puVar15 + -1" identifier + number_literal)) )) ;) (expression_statement "*param_5 = uVar11;" (assignment_expression "*param_5 = uVar11" (pointer_expression "*param_5" * identifier) = identifier) ;) (expression_statement "param_2 = param_2 + iVar13 + iVar6 + -2;" (assignment_expression "param_2 = param_2 + iVar13 + iVar6 + -2" identifier = (binary_expression "param_2 + iVar13 + iVar6 + -2" (binary_expression "param_2 + iVar13 + iVar6" (binary_expression "param_2 + iVar13" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar13 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar13 + iVar17" identifier = (binary_expression "param_5 + iVar13 + iVar17" (binary_expression "param_5 + iVar13" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);" do (compound_statement "{\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      }" { (expression_statement "puVar3 = puVar10 + -1;" (assignment_expression "puVar3 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *param_2;" (assignment_expression "uVar16 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" identifier = (binary_expression "uVar16 + *puVar10" identifier + (pointer_expression "*puVar10" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar3;" (assignment_expression "puVar10 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(puVar15 + iVar17 != puVar3)" ( (binary_expression "puVar15 + iVar17 != puVar3" (binary_expression "puVar15 + iVar17" identifier + identifier) != identifier) )) ;) }))) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar3 = param_5 + iVar13 * 4;" (assignment_expression "puVar3 = param_5 + iVar13 * 4" identifier = (binary_expression "param_5 + iVar13 * 4" identifier + (binary_expression "iVar13 * 4" identifier * number_literal))) ;) (expression_statement "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);" (call_expression "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" (parenthesized_expression "(*pcVar19)" ( (pointer_expression "*pcVar19" * identifier) )) (argument_list "(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" ( identifier , identifier , (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) , identifier ))) ;) (expression_statement "param_5[3] = 0;" (assignment_expression "param_5[3] = 0" (subscript_expression "param_5[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_5[2] = 0;" (assignment_expression "param_5[2] = 0" (subscript_expression "param_5[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" identifier = identifier) ;) (expression_statement "puVar15 = param_5 + (iVar13 - iVar6) * 2;" (assignment_expression "puVar15 = param_5 + (iVar13 - iVar6) * 2" identifier = (binary_expression "param_5 + (iVar13 - iVar6) * 2" identifier + (binary_expression "(iVar13 - iVar6) * 2" (parenthesized_expression "(iVar13 - iVar6)" ( (binary_expression "iVar13 - iVar6" identifier - identifier) )) * number_literal))) ;) (do_statement "do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);" do (compound_statement "{\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    }" { (expression_statement "uVar11 = *puVar10;" (assignment_expression "uVar11 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) (expression_statement "*puVar15 = uVar11;" (assignment_expression "*puVar15 = uVar11" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 + iVar6 * 2 != puVar10)" ( (binary_expression "param_3 + iVar6 * 2 != puVar10" (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) != identifier) )) ;) (if_statement "if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" if (parenthesized_expression "(iVar18 + -3 < 0)" ( (binary_expression "iVar18 + -3 < 0" (binary_expression "iVar18 + -3" identifier + number_literal) < number_literal) )) (compound_statement "{\n      uVar11 = 0;\n    }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" else (compound_statement "{\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;" (assignment_expression "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3" identifier = (binary_expression "param_3 + iVar6 * 2 + iVar18 + -3" (binary_expression "param_3 + iVar6 * 2 + iVar18" (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) + identifier) + number_literal)) ;) (expression_statement "puVar10 = param_5 + iVar13 * 2 + -2;" (assignment_expression "puVar10 = param_5 + iVar13 * 2 + -2" identifier = (binary_expression "param_5 + iVar13 * 2 + -2" (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) + number_literal)) ;) (do_statement "do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);" do (compound_statement "{\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      }" { (expression_statement "puVar7 = puVar10 + -1;" (assignment_expression "puVar7 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *puVar15;" (assignment_expression "uVar16 = *puVar15" identifier = (pointer_expression "*puVar15" * identifier)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + puVar10[1];" (assignment_expression "uVar4 = uVar16 + puVar10[1]" identifier = (binary_expression "uVar16 + puVar10[1]" identifier + (subscript_expression "puVar10[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "puVar10[1] = uVar14;" (assignment_expression "puVar10[1] = uVar14" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(param_5 != puVar7)" ( (binary_expression "param_5 != puVar7" identifier != identifier) )) ;) }))) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "param_5[1] = uVar11;" (assignment_expression "param_5[1] = uVar11" (subscript_expression "param_5[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" if (parenthesized_expression "(-1 < iVar18)" ( (binary_expression "-1 < iVar18" number_literal < identifier) )) (compound_statement "{\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" { (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar13 * 4;" (assignment_expression "puVar10 = param_5 + iVar13 * 4" identifier = (binary_expression "param_5 + iVar13 * 4" identifier + (binary_expression "iVar13 * 4" identifier * number_literal))) ;) (do_statement "do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);" do (compound_statement "{\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      }" { (expression_statement "uVar14 = puVar10[-1];" (assignment_expression "uVar14 = puVar10[-1]" identifier = (subscript_expression "puVar10[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = puVar10[iVar13 * -2 + -1];" (assignment_expression "uVar16 = puVar10[iVar13 * -2 + -1]" identifier = (subscript_expression "puVar10[iVar13 * -2 + -1]" identifier [ (binary_expression "iVar13 * -2 + -1" (binary_expression "iVar13 * -2" identifier * number_literal) + number_literal) ])) ;) (expression_statement "uVar11 = uVar14 + iVar6;" (assignment_expression "uVar11 = uVar14 + iVar6" identifier = (binary_expression "uVar14 + iVar6" identifier + identifier)) ;) (expression_statement "uVar4 = ~uVar16 + uVar11;" (assignment_expression "uVar4 = ~uVar16 + uVar11" identifier = (binary_expression "~uVar16 + uVar11" (unary_expression "~uVar16" ~ identifier) + identifier)) ;) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < ~uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < ~uVar16)" ( (binary_expression "uVar4 < ~uVar16" identifier < (unary_expression "~uVar16" ~ identifier)) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" identifier = identifier) ;) }) while (parenthesized_expression "(param_5 + iVar13 * 2 != puVar15)" ( (binary_expression "param_5 + iVar13 * 2 != puVar15" (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" identifier = (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" ( (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar13 * -2" identifier * number_literal))) ;) (expression_statement "param_5 = param_5 + iVar18 + iVar13 * 2;" (assignment_expression "param_5 = param_5 + iVar18 + iVar13 * 2" identifier = (binary_expression "param_5 + iVar18 + iVar13 * 2" (binary_expression "param_5 + iVar18" identifier + identifier) + (binary_expression "iVar13 * 2" identifier * number_literal))) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_3 + iVar18 + iVar6;" (assignment_expression "puVar10 = param_3 + iVar18 + iVar6" identifier = (binary_expression "param_3 + iVar18 + iVar6" (binary_expression "param_3 + iVar18" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);" do (compound_statement "{\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      }" { (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *param_5;" (assignment_expression "uVar16 = *param_5" identifier = (pointer_expression "*param_5" * identifier)) ;) (expression_statement "param_5 = param_5 + -1;" (assignment_expression "param_5 = param_5 + -1" identifier = (binary_expression "param_5 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" identifier = (binary_expression "uVar16 + *puVar10" identifier + (pointer_expression "*puVar10" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" identifier = identifier) ;) }) while (parenthesized_expression "(param_3 + iVar6 + -1 != puVar15)" ( (binary_expression "param_3 + iVar6 + -1 != puVar15" (binary_expression "param_3 + iVar6 + -1" (binary_expression "param_3 + iVar6" identifier + identifier) + number_literal) != identifier) )) ;) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" identifier = (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" ( (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar13 * -2" identifier * number_literal))) ;) (expression_statement "iVar18 = iVar6 + -1;" (assignment_expression "iVar18 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" { (if_statement "if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" if (parenthesized_expression "(-1 < iVar18)" ( (binary_expression "-1 < iVar18" number_literal < identifier) )) (compound_statement "{\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" { (expression_statement "param_3 = param_3 + iVar6;" (assignment_expression "param_3 = param_3 + iVar6" identifier = (binary_expression "param_3 + iVar6" identifier + identifier)) ;) (do_statement "do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);" do (compound_statement "{\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          }" { (expression_statement "uVar11 = param_3[-1];" (assignment_expression "uVar11 = param_3[-1]" identifier = (subscript_expression "param_3[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar11 + 1;" (assignment_expression "uVar4 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (expression_statement "param_3[-1] = uVar4;" (assignment_expression "param_3[-1] = uVar4" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar11 <= uVar4) {\n              return;\n            }" if (parenthesized_expression "(uVar11 <= uVar4)" ( (binary_expression "uVar11 <= uVar4" identifier <= identifier) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != -1)" ( (binary_expression "iVar18 != -1" identifier != number_literal) )) ;) })) (expression_statement "puVar10 = (uint *)&DAT_00000135;" (assignment_expression "puVar10 = (uint *)&DAT_00000135" identifier = (cast_expression "(uint *)&DAT_00000135" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00000135" & identifier))) ;) (expression_statement "puVar12 = PTR_DAT_000ad2c8 + 0x43c4;" (assignment_expression "puVar12 = PTR_DAT_000ad2c8 + 0x43c4" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x43c4" identifier + number_literal)) ;) (expression_statement "puVar9 = PTR_DAT_000ad2c8 + 0x41d0;" (assignment_expression "puVar9 = PTR_DAT_000ad2c8 + 0x41d0" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x41d0" identifier + number_literal)) ;) (expression_statement "puVar8 = PTR_DAT_000ad2c8 + 0x4254;" (assignment_expression "puVar8 = PTR_DAT_000ad2c8 + 0x4254" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x4254" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR___assert_fail_000adb00)();" (call_expression "(*(code *)PTR___assert_fail_000adb00)()" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000adb00" * (cast_expression "(code *)PTR___assert_fail_000adb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" if (parenthesized_expression "((int)puVar12 < 0x33)" ( (binary_expression "(int)puVar12 < 0x33" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" { (if_statement "if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" if (parenthesized_expression "((int)puVar12 < 1)" ( (binary_expression "(int)puVar12 < 1" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            iVar6 = (int)puVar12 << 2;\n          }" { (expression_statement "iVar6 = (int)puVar12 << 2;" (assignment_expression "iVar6 = (int)puVar12 << 2" identifier = (binary_expression "(int)puVar12 << 2" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal)) ;) }) (else_clause "else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" else (compound_statement "{\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" { (expression_statement "iVar6 = (int)puVar12 * 4;" (assignment_expression "iVar6 = (int)puVar12 * 4" identifier = (binary_expression "(int)puVar12 * 4" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" identifier = identifier) ;) (do_statement "do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);" do (compound_statement "{\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            }" { (expression_statement "*puVar15 = 0;" (assignment_expression "*puVar15 = 0" (pointer_expression "*puVar15" * identifier) = number_literal) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar10 + (int)puVar12 != puVar15)" ( (binary_expression "puVar10 + (int)puVar12 != puVar15" (binary_expression "puVar10 + (int)puVar12" identifier + (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) }))) (expression_statement "puVar12 = puVar8 + iVar6;" (assignment_expression "puVar12 = puVar8 + iVar6" identifier = (binary_expression "puVar8 + iVar6" identifier + identifier)) ;) (expression_statement "puVar15 = (uint *)((int)puVar10 + iVar6);" (assignment_expression "puVar15 = (uint *)((int)puVar10 + iVar6)" identifier = (cast_expression "(uint *)((int)puVar10 + iVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 + iVar6)" ( (binary_expression "(int)puVar10 + iVar6" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" if (parenthesized_expression "(puVar8 < puVar12)" ( (binary_expression "puVar8 < puVar12" identifier < identifier) )) (compound_statement "{\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" { (do_statement "do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);" do (compound_statement "{\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar3 = (uint *)(puVar9 + iVar6 + -4);" (assignment_expression "puVar3 = (uint *)(puVar9 + iVar6 + -4)" identifier = (cast_expression "(uint *)(puVar9 + iVar6 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + iVar6 + -4)" ( (binary_expression "puVar9 + iVar6 + -4" (binary_expression "puVar9 + iVar6" identifier + identifier) + number_literal) )))) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (while_statement "while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" while (parenthesized_expression "(puVar10 < puVar7)" ( (binary_expression "puVar10 < puVar7" identifier < identifier) )) (compound_statement "{\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" { (expression_statement "puVar5 = puVar7 + -1;" (assignment_expression "puVar5 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) (expression_statement "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) + (binary_expression "(ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)uVar4 * (ulonglong)" (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * (cast_expression "(uint *)(puVar12 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + -4)" ( (binary_expression "puVar12 + -4" identifier + number_literal) ))))) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "*puVar7 = (uint)lVar2;" (assignment_expression "*puVar7 = (uint)lVar2" (pointer_expression "*puVar7" * identifier) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) })) (expression_statement "puVar12 = puVar12 + -4;" (assignment_expression "puVar12 = puVar12 + -4" identifier = (binary_expression "puVar12 + -4" identifier + number_literal)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 < puVar12)" ( (binary_expression "puVar8 < puVar12" identifier < identifier) )) ;) })) (return_statement "return;" return ;) })) (expression_statement "iVar18 = (int)puVar12 >> 1;" (assignment_expression "iVar18 = (int)puVar12 >> 1" identifier = (binary_expression "(int)puVar12 >> 1" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "puVar15 = puVar3 + (int)puVar12 * 2;" (assignment_expression "puVar15 = puVar3 + (int)puVar12 * 2" identifier = (binary_expression "puVar3 + (int)puVar12 * 2" identifier + (binary_expression "(int)puVar12 * 2" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "iVar6 = (int)puVar12 - iVar18;" (assignment_expression "iVar6 = (int)puVar12 - iVar18" identifier = (binary_expression "(int)puVar12 - iVar18" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) - identifier)) ;) (expression_statement "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);" (call_expression "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" identifier (argument_list "(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" ( (binary_expression "puVar8 + iVar18 * 4" identifier + (binary_expression "iVar18 * 4" identifier * number_literal)) , (binary_expression "puVar9 + iVar18 * 4" identifier + (binary_expression "iVar18 * 4" identifier * number_literal)) , (binary_expression "puVar3 + iVar18 * 2" identifier + (binary_expression "iVar18 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" identifier (argument_list "(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" ( identifier , (binary_expression "puVar9 + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) , (binary_expression "puVar3 + iVar18" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" identifier (argument_list "(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" ( (binary_expression "puVar8 + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "puVar15 = puVar10 + iVar18;" (assignment_expression "puVar15 = puVar10 + iVar18" identifier = (binary_expression "puVar10 + iVar18" identifier + identifier)) ;) (if_statement "if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" { (expression_statement "iVar13 = iVar18 * 2 + iVar6;" (assignment_expression "iVar13 = iVar18 * 2 + iVar6" identifier = (binary_expression "iVar18 * 2 + iVar6" (binary_expression "iVar18 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "puVar5 = puVar3 + iVar13;" (assignment_expression "puVar5 = puVar3 + iVar13" identifier = (binary_expression "puVar3 + iVar13" identifier + identifier)) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (do_statement "do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);" do (compound_statement "{\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          }" { (expression_statement "uVar11 = *puVar5;" (assignment_expression "uVar11 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar3 + iVar6 + iVar13 != puVar5)" ( (binary_expression "puVar3 + iVar6 + iVar13 != puVar5" (binary_expression "puVar3 + iVar6 + iVar13" (binary_expression "puVar3 + iVar6" identifier + identifier) + identifier) != identifier) )) ;) })) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "puVar5 = puVar3 + iVar18 + -1;" (assignment_expression "puVar5 = puVar3 + iVar18 + -1" identifier = (binary_expression "puVar3 + iVar18 + -1" (binary_expression "puVar3 + iVar18" identifier + identifier) + number_literal)) ;) (expression_statement "puVar7 = puVar5;" (assignment_expression "puVar7 = puVar5" identifier = identifier) ;) (do_statement "do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);" do (compound_statement "{\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        }" { (expression_statement "uVar14 = *puVar7;" (assignment_expression "uVar14 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "uVar16 = puVar7[iVar18];" (assignment_expression "uVar16 = puVar7[iVar18]" identifier = (subscript_expression "puVar7[iVar18]" identifier [ identifier ])) ;) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" identifier = (binary_expression "uVar14 + iVar13" identifier + identifier)) ;) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" identifier = (binary_expression "uVar16 + uVar11" identifier + identifier)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "bVar1 = puVar3 != puVar7;" (assignment_expression "bVar1 = puVar3 != puVar7" identifier = (binary_expression "puVar3 != puVar7" identifier != identifier)) ;) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (do_statement "do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);" do (compound_statement "{\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        }" { (expression_statement "puVar3 = puVar5 + iVar18 + iVar6;" (assignment_expression "puVar3 = puVar5 + iVar18 + iVar6" identifier = (binary_expression "puVar5 + iVar18 + iVar6" (binary_expression "puVar5 + iVar18" identifier + identifier) + identifier)) ;) (expression_statement "uVar14 = *puVar5;" (assignment_expression "uVar14 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *puVar3;" (assignment_expression "uVar16 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" identifier = (binary_expression "uVar14 + iVar13" identifier + identifier)) ;) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" identifier = (binary_expression "uVar16 + uVar11" identifier + identifier)) ;) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(puVar10 != puVar15)" ( (binary_expression "puVar10 != puVar15" identifier != identifier) )) ;) (return_statement "return;" return ;) })) })) }))) (return_statement "return;" return ;) })))
(translation_unit "void internal_mul(BignumInt *a,BignumInt *b,BignumInt *c,int len,BignumInt *scratch)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  longlong lVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  BignumInt *pBVar7;\n  uint *puVar8;\n  BignumInt *pBVar9;\n  BignumInt *pBVar10;\n  uint *puVar11;\n  uint uVar12;\n  undefined *puVar13;\n  int iVar14;\n  BignumInt *pBVar15;\n  uint uVar16;\n  uint *puVar17;\n  BignumInt BVar18;\n  uint uVar19;\n  int iVar20;\n  int iVar21;\n  code *pcVar22;\n  \n  if (len < 0x33) {\n    if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }\n    pBVar9 = a + len;\n    puVar11 = c + len * 2;\n    if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }\n  }\n  else {\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void internal_mul(BignumInt *a,BignumInt *b,BignumInt *c,int len,BignumInt *scratch)\n\n{\n  uint *puVar1;\n  bool bVar2;\n  longlong lVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  BignumInt *pBVar7;\n  uint *puVar8;\n  BignumInt *pBVar9;\n  BignumInt *pBVar10;\n  uint *puVar11;\n  uint uVar12;\n  undefined *puVar13;\n  int iVar14;\n  BignumInt *pBVar15;\n  uint uVar16;\n  uint *puVar17;\n  BignumInt BVar18;\n  uint uVar19;\n  int iVar20;\n  int iVar21;\n  code *pcVar22;\n  \n  if (len < 0x33) {\n    if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }\n    pBVar9 = a + len;\n    puVar11 = c + len * 2;\n    if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }\n  }\n  else {\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "internal_mul(BignumInt *a,BignumInt *b,BignumInt *c,int len,BignumInt *scratch)" identifier (parameter_list "(BignumInt *a,BignumInt *b,BignumInt *c,int len,BignumInt *scratch)" ( (parameter_declaration "BignumInt *a" type_identifier (pointer_declarator "*a" * identifier)) , (parameter_declaration "BignumInt *b" type_identifier (pointer_declarator "*b" * identifier)) , (parameter_declaration "BignumInt *c" type_identifier (pointer_declarator "*c" * identifier)) , (parameter_declaration "int len" primitive_type identifier) , (parameter_declaration "BignumInt *scratch" type_identifier (pointer_declarator "*scratch" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  bool bVar2;\n  longlong lVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  BignumInt *pBVar7;\n  uint *puVar8;\n  BignumInt *pBVar9;\n  BignumInt *pBVar10;\n  uint *puVar11;\n  uint uVar12;\n  undefined *puVar13;\n  int iVar14;\n  BignumInt *pBVar15;\n  uint uVar16;\n  uint *puVar17;\n  BignumInt BVar18;\n  uint uVar19;\n  int iVar20;\n  int iVar21;\n  code *pcVar22;\n  \n  if (len < 0x33) {\n    if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }\n    pBVar9 = a + len;\n    puVar11 = c + len * 2;\n    if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }\n  }\n  else {\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "longlong lVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "BignumInt *pBVar7;" type_identifier (pointer_declarator "*pBVar7" * identifier) ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "BignumInt *pBVar9;" type_identifier (pointer_declarator "*pBVar9" * identifier) ;) (declaration "BignumInt *pBVar10;" type_identifier (pointer_declarator "*pBVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "BignumInt *pBVar15;" type_identifier (pointer_declarator "*pBVar15" * identifier) ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "uint *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "BignumInt BVar18;" type_identifier identifier ;) (declaration "uint uVar19;" type_identifier identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "code *pcVar22;" type_identifier (pointer_declarator "*pcVar22" * identifier) ;) (if_statement "if (len < 0x33) {\n    if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }\n    pBVar9 = a + len;\n    puVar11 = c + len * 2;\n    if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }\n  }\n  else {\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "(len < 0x33)" ( (binary_expression "len < 0x33" identifier < number_literal) )) (compound_statement "{\n    if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }\n    pBVar9 = a + len;\n    puVar11 = c + len * 2;\n    if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }\n  }" { (if_statement "if (0 < len << 1) {\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }" if (parenthesized_expression "(0 < len << 1)" ( (binary_expression "0 < len << 1" number_literal < (binary_expression "len << 1" identifier << number_literal)) )) (compound_statement "{\n      pBVar9 = c;\n      do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);\n    }" { (expression_statement "pBVar9 = c;" (assignment_expression "pBVar9 = c" identifier = identifier) ;) (do_statement "do {\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      } while (c + len * 2 != pBVar9);" do (compound_statement "{\n        *pBVar9 = 0;\n        pBVar9 = pBVar9 + 1;\n      }" { (expression_statement "*pBVar9 = 0;" (assignment_expression "*pBVar9 = 0" (pointer_expression "*pBVar9" * identifier) = number_literal) ;) (expression_statement "pBVar9 = pBVar9 + 1;" (assignment_expression "pBVar9 = pBVar9 + 1" identifier = (binary_expression "pBVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(c + len * 2 != pBVar9)" ( (binary_expression "c + len * 2 != pBVar9" (binary_expression "c + len * 2" identifier + (binary_expression "len * 2" identifier * number_literal)) != identifier) )) ;) })) (expression_statement "pBVar9 = a + len;" (assignment_expression "pBVar9 = a + len" identifier = (binary_expression "a + len" identifier + identifier)) ;) (expression_statement "puVar11 = c + len * 2;" (assignment_expression "puVar11 = c + len * 2" identifier = (binary_expression "c + len * 2" identifier + (binary_expression "len * 2" identifier * number_literal))) ;) (if_statement "if (a < pBVar9) {\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }" if (parenthesized_expression "(a < pBVar9)" ( (binary_expression "a < pBVar9" identifier < identifier) )) (compound_statement "{\n      pBVar10 = b + len;\n      do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);\n    }" { (expression_statement "pBVar10 = b + len;" (assignment_expression "pBVar10 = b + len" identifier = (binary_expression "b + len" identifier + identifier)) ;) (do_statement "do {\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      } while (a < pBVar9);" do (compound_statement "{\n        puVar11 = puVar11 + -1;\n        uVar12 = 0;\n        puVar17 = puVar11;\n        pBVar15 = pBVar10;\n        if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }\n        pBVar9 = pBVar9 + -1;\n        *puVar17 = uVar12;\n      }" { (expression_statement "puVar11 = puVar11 + -1;" (assignment_expression "puVar11 = puVar11 + -1" identifier = (binary_expression "puVar11 + -1" identifier + number_literal)) ;) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "puVar17 = puVar11;" (assignment_expression "puVar17 = puVar11" identifier = identifier) ;) (expression_statement "pBVar15 = pBVar10;" (assignment_expression "pBVar15 = pBVar10" identifier = identifier) ;) (if_statement "if (b < pBVar10) {\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }" if (parenthesized_expression "(b < pBVar10)" ( (binary_expression "b < pBVar10" identifier < identifier) )) (compound_statement "{\n          do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);\n          puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);\n        }" { (do_statement "do {\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          } while (b < pBVar15);" do (compound_statement "{\n            pBVar15 = pBVar15 + -1;\n            uVar12 = *puVar17 + uVar12;\n            lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];\n            uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n            *puVar17 = (uint)lVar3;\n            puVar17 = puVar17 + -1;\n          }" { (expression_statement "pBVar15 = pBVar15 + -1;" (assignment_expression "pBVar15 = pBVar15 + -1" identifier = (binary_expression "pBVar15 + -1" identifier + number_literal)) ;) (expression_statement "uVar12 = *puVar17 + uVar12;" (assignment_expression "uVar12 = *puVar17 + uVar12" identifier = (binary_expression "*puVar17 + uVar12" (pointer_expression "*puVar17" * identifier) + identifier)) ;) (expression_statement "lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1];" (assignment_expression "lVar3 = (ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1]" identifier = (binary_expression "(ulonglong)CONCAT14(uVar12 < *puVar17,uVar12) +\n                    (ulonglong)*pBVar15 * (ulonglong)pBVar9[-1]" (cast_expression "(ulonglong)CONCAT14(uVar12 < *puVar17,uVar12)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(uVar12 < *puVar17,uVar12)" identifier (argument_list "(uVar12 < *puVar17,uVar12)" ( (binary_expression "uVar12 < *puVar17" identifier < (pointer_expression "*puVar17" * identifier)) , identifier )))) + (binary_expression "(ulonglong)*pBVar15 * (ulonglong)pBVar9[-1]" (binary_expression "(ulonglong)*pBVar15" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)pBVar9[-1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pBVar9[-1]" identifier [ number_literal ]))))) ;) (expression_statement "uVar12 = (uint)((ulonglong)lVar3 >> 0x20);" (assignment_expression "uVar12 = (uint)((ulonglong)lVar3 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar3 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar3 >> 0x20)" ( (binary_expression "(ulonglong)lVar3 >> 0x20" (cast_expression "(ulonglong)lVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*puVar17 = (uint)lVar3;" (assignment_expression "*puVar17 = (uint)lVar3" (pointer_expression "*puVar17" * identifier) = (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(b < pBVar15)" ( (binary_expression "b < pBVar15" identifier < identifier) )) ;) (expression_statement "puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2);" (assignment_expression "puVar17 = puVar11 + ~(~(uint)b + (int)pBVar10 >> 2)" identifier = (binary_expression "puVar11 + ~(~(uint)b + (int)pBVar10 >> 2)" identifier + (unary_expression "~(~(uint)b + (int)pBVar10 >> 2)" ~ (parenthesized_expression "(~(uint)b + (int)pBVar10 >> 2)" ( (binary_expression "~(uint)b + (int)pBVar10 >> 2" (binary_expression "~(uint)b + (int)pBVar10" (unary_expression "~(uint)b" ~ (cast_expression "(uint)b" ( (type_descriptor "uint" type_identifier) ) identifier)) + (cast_expression "(int)pBVar10" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ))))) ;) })) (expression_statement "pBVar9 = pBVar9 + -1;" (assignment_expression "pBVar9 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) (expression_statement "*puVar17 = uVar12;" (assignment_expression "*puVar17 = uVar12" (pointer_expression "*puVar17" * identifier) = identifier) ;) }) while (parenthesized_expression "(a < pBVar9)" ( (binary_expression "a < pBVar9" identifier < identifier) )) ;) })) }) (else_clause "else {\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }" else (compound_statement "{\n    iVar6 = len >> 1;\n    pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar20 = len - iVar6;\n    internal_mul(a,b,c,iVar6,scratch);\n    iVar14 = iVar20 + 1;\n    (*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);\n    iVar21 = iVar14 * 2;\n    puVar11 = scratch + iVar14;\n    scratch[iVar20 + 2] = 0;\n    *puVar11 = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = scratch + (iVar21 - iVar6);\n    pBVar10 = a;\n    pBVar15 = b;\n    do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);\n    if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }\n    *puVar11 = uVar12;\n    pBVar15 = scratch + iVar14 * 4;\n    (*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);\n    scratch[3] = 0;\n    scratch[2] = 0;\n    scratch[1] = 0;\n    *scratch = 0;\n    pBVar9 = c;\n    pBVar10 = scratch + (iVar14 - iVar6) * 2;\n    do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);\n    if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }\n    iVar21 = iVar21 + -1;\n    scratch[1] = uVar12;\n    if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }\n  }" { (expression_statement "iVar6 = len >> 1;" (assignment_expression "iVar6 = len >> 1" identifier = (binary_expression "len >> 1" identifier >> number_literal)) ;) (expression_statement "pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070);" (assignment_expression "pcVar22 = (code *)(PTR_LAB_000ad6d0 + -0x1070)" identifier = (cast_expression "(code *)(PTR_LAB_000ad6d0 + -0x1070)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000ad6d0 + -0x1070)" ( (binary_expression "PTR_LAB_000ad6d0 + -0x1070" identifier + number_literal) )))) ;) (expression_statement "iVar20 = len - iVar6;" (assignment_expression "iVar20 = len - iVar6" identifier = (binary_expression "len - iVar6" identifier - identifier)) ;) (expression_statement "internal_mul(a,b,c,iVar6,scratch);" (call_expression "internal_mul(a,b,c,iVar6,scratch)" identifier (argument_list "(a,b,c,iVar6,scratch)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "iVar14 = iVar20 + 1;" (assignment_expression "iVar14 = iVar20 + 1" identifier = (binary_expression "iVar20 + 1" identifier + number_literal)) ;) (expression_statement "(*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch);" (call_expression "(*pcVar22)(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch)" (parenthesized_expression "(*pcVar22)" ( (pointer_expression "*pcVar22" * identifier) )) (argument_list "(a + iVar6,b + iVar6,c + iVar6 * 2,iVar20,scratch)" ( (binary_expression "a + iVar6" identifier + identifier) , (binary_expression "b + iVar6" identifier + identifier) , (binary_expression "c + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "iVar21 = iVar14 * 2;" (assignment_expression "iVar21 = iVar14 * 2" identifier = (binary_expression "iVar14 * 2" identifier * number_literal)) ;) (expression_statement "puVar11 = scratch + iVar14;" (assignment_expression "puVar11 = scratch + iVar14" identifier = (binary_expression "scratch + iVar14" identifier + identifier)) ;) (expression_statement "scratch[iVar20 + 2] = 0;" (assignment_expression "scratch[iVar20 + 2] = 0" (subscript_expression "scratch[iVar20 + 2]" identifier [ (binary_expression "iVar20 + 2" identifier + number_literal) ]) = number_literal) ;) (expression_statement "*puVar11 = 0;" (assignment_expression "*puVar11 = 0" (pointer_expression "*puVar11" * identifier) = number_literal) ;) (expression_statement "scratch[1] = 0;" (assignment_expression "scratch[1] = 0" (subscript_expression "scratch[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*scratch = 0;" (assignment_expression "*scratch = 0" (pointer_expression "*scratch" * identifier) = number_literal) ;) (expression_statement "pBVar9 = scratch + (iVar21 - iVar6);" (assignment_expression "pBVar9 = scratch + (iVar21 - iVar6)" identifier = (binary_expression "scratch + (iVar21 - iVar6)" identifier + (parenthesized_expression "(iVar21 - iVar6)" ( (binary_expression "iVar21 - iVar6" identifier - identifier) )))) ;) (expression_statement "pBVar10 = a;" (assignment_expression "pBVar10 = a" identifier = identifier) ;) (expression_statement "pBVar15 = b;" (assignment_expression "pBVar15 = b" identifier = identifier) ;) (do_statement "do {\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    } while (a + iVar6 != pBVar10);" do (compound_statement "{\n      BVar18 = *pBVar10;\n      pBVar10 = pBVar10 + 1;\n      pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;\n      *pBVar9 = *pBVar15;\n      pBVar9 = pBVar9 + 1;\n      pBVar15 = pBVar15 + 1;\n    }" { (expression_statement "BVar18 = *pBVar10;" (assignment_expression "BVar18 = *pBVar10" identifier = (pointer_expression "*pBVar10" * identifier)) ;) (expression_statement "pBVar10 = pBVar10 + 1;" (assignment_expression "pBVar10 = pBVar10 + 1" identifier = (binary_expression "pBVar10 + 1" identifier + number_literal)) ;) (expression_statement "pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18;" (assignment_expression "pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)] = BVar18" (subscript_expression "pBVar9[(iVar14 - iVar6) - (iVar21 - iVar6)]" identifier [ (binary_expression "(iVar14 - iVar6) - (iVar21 - iVar6)" (parenthesized_expression "(iVar14 - iVar6)" ( (binary_expression "iVar14 - iVar6" identifier - identifier) )) - (parenthesized_expression "(iVar21 - iVar6)" ( (binary_expression "iVar21 - iVar6" identifier - identifier) ))) ]) = identifier) ;) (expression_statement "*pBVar9 = *pBVar15;" (assignment_expression "*pBVar9 = *pBVar15" (pointer_expression "*pBVar9" * identifier) = (pointer_expression "*pBVar15" * identifier)) ;) (expression_statement "pBVar9 = pBVar9 + 1;" (assignment_expression "pBVar9 = pBVar9 + 1" identifier = (binary_expression "pBVar9 + 1" identifier + number_literal)) ;) (expression_statement "pBVar15 = pBVar15 + 1;" (assignment_expression "pBVar15 = pBVar15 + 1" identifier = (binary_expression "pBVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(a + iVar6 != pBVar10)" ( (binary_expression "a + iVar6 != pBVar10" (binary_expression "a + iVar6" identifier + identifier) != identifier) )) ;) (if_statement "if (iVar20 < 1) {\n      *scratch = 0;\n      uVar12 = 0;\n    }\n    else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }" if (parenthesized_expression "(iVar20 < 1)" ( (binary_expression "iVar20 < 1" identifier < number_literal) )) (compound_statement "{\n      *scratch = 0;\n      uVar12 = 0;\n    }" { (expression_statement "*scratch = 0;" (assignment_expression "*scratch = 0" (pointer_expression "*scratch" * identifier) = number_literal) ;) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }" else (compound_statement "{\n      pBVar9 = a + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar20;\n      do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);\n      *scratch = uVar12;\n      pBVar9 = b + iVar14 + iVar6 + -2;\n      uVar12 = 0;\n      puVar17 = scratch + iVar14 + iVar20;\n      do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);\n    }" { (expression_statement "pBVar9 = a + iVar14 + iVar6 + -2;" (assignment_expression "pBVar9 = a + iVar14 + iVar6 + -2" identifier = (binary_expression "a + iVar14 + iVar6 + -2" (binary_expression "a + iVar14 + iVar6" (binary_expression "a + iVar14" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "puVar17 = scratch + iVar20;" (assignment_expression "puVar17 = scratch + iVar20" identifier = (binary_expression "scratch + iVar20" identifier + identifier)) ;) (do_statement "do {\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      } while (scratch != puVar8 + -1);" do (compound_statement "{\n        puVar8 = puVar17;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar8;\n        uVar16 = uVar12 + uVar4;\n        *puVar8 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar8 + -1;\n      }" { (expression_statement "puVar8 = puVar17;" (assignment_expression "puVar8 = puVar17" identifier = identifier) ;) (expression_statement "uVar19 = *pBVar9;" (assignment_expression "uVar19 = *pBVar9" identifier = (pointer_expression "*pBVar9" * identifier)) ;) (expression_statement "pBVar9 = pBVar9 + -1;" (assignment_expression "pBVar9 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar19 + *puVar8;" (assignment_expression "uVar4 = uVar19 + *puVar8" identifier = (binary_expression "uVar19 + *puVar8" identifier + (pointer_expression "*puVar8" * identifier))) ;) (expression_statement "uVar16 = uVar12 + uVar4;" (assignment_expression "uVar16 = uVar12 + uVar4" identifier = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar8 = uVar16;" (assignment_expression "*puVar8 = uVar16" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);" (assignment_expression "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" identifier = (binary_expression "(uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" (call_expression "(uint)(uVar16 < uVar12)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar16 < uVar12)" ( (binary_expression "uVar16 < uVar12" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))))) ;) (expression_statement "puVar17 = puVar8 + -1;" (assignment_expression "puVar17 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(scratch != puVar8 + -1)" ( (binary_expression "scratch != puVar8 + -1" identifier != (binary_expression "puVar8 + -1" identifier + number_literal)) )) ;) (expression_statement "*scratch = uVar12;" (assignment_expression "*scratch = uVar12" (pointer_expression "*scratch" * identifier) = identifier) ;) (expression_statement "pBVar9 = b + iVar14 + iVar6 + -2;" (assignment_expression "pBVar9 = b + iVar14 + iVar6 + -2" identifier = (binary_expression "b + iVar14 + iVar6 + -2" (binary_expression "b + iVar14 + iVar6" (binary_expression "b + iVar14" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "puVar17 = scratch + iVar14 + iVar20;" (assignment_expression "puVar17 = scratch + iVar14 + iVar20" identifier = (binary_expression "scratch + iVar14 + iVar20" (binary_expression "scratch + iVar14" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      } while (puVar8 + iVar20 != puVar5);" do (compound_statement "{\n        puVar5 = puVar17 + -1;\n        uVar19 = *pBVar9;\n        pBVar9 = pBVar9 + -1;\n        uVar4 = uVar19 + *puVar17;\n        uVar16 = uVar12 + uVar4;\n        *puVar17 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar17 = puVar5;\n      }" { (expression_statement "puVar5 = puVar17 + -1;" (assignment_expression "puVar5 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "uVar19 = *pBVar9;" (assignment_expression "uVar19 = *pBVar9" identifier = (pointer_expression "*pBVar9" * identifier)) ;) (expression_statement "pBVar9 = pBVar9 + -1;" (assignment_expression "pBVar9 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar19 + *puVar17;" (assignment_expression "uVar4 = uVar19 + *puVar17" identifier = (binary_expression "uVar19 + *puVar17" identifier + (pointer_expression "*puVar17" * identifier))) ;) (expression_statement "uVar16 = uVar12 + uVar4;" (assignment_expression "uVar16 = uVar12 + uVar4" identifier = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar17 = uVar16;" (assignment_expression "*puVar17 = uVar16" (pointer_expression "*puVar17" * identifier) = identifier) ;) (expression_statement "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);" (assignment_expression "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" identifier = (binary_expression "(uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" (call_expression "(uint)(uVar16 < uVar12)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar16 < uVar12)" ( (binary_expression "uVar16 < uVar12" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))))) ;) (expression_statement "puVar17 = puVar5;" (assignment_expression "puVar17 = puVar5" identifier = identifier) ;) }) while (parenthesized_expression "(puVar8 + iVar20 != puVar5)" ( (binary_expression "puVar8 + iVar20 != puVar5" (binary_expression "puVar8 + iVar20" identifier + identifier) != identifier) )) ;) }))) (expression_statement "*puVar11 = uVar12;" (assignment_expression "*puVar11 = uVar12" (pointer_expression "*puVar11" * identifier) = identifier) ;) (expression_statement "pBVar15 = scratch + iVar14 * 4;" (assignment_expression "pBVar15 = scratch + iVar14 * 4" identifier = (binary_expression "scratch + iVar14 * 4" identifier + (binary_expression "iVar14 * 4" identifier * number_literal))) ;) (expression_statement "(*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14);" (call_expression "(*pcVar22)(scratch,puVar11,scratch + iVar14 * 2,iVar14)" (parenthesized_expression "(*pcVar22)" ( (pointer_expression "*pcVar22" * identifier) )) (argument_list "(scratch,puVar11,scratch + iVar14 * 2,iVar14)" ( identifier , identifier , (binary_expression "scratch + iVar14 * 2" identifier + (binary_expression "iVar14 * 2" identifier * number_literal)) , identifier ))) ;) (expression_statement "scratch[3] = 0;" (assignment_expression "scratch[3] = 0" (subscript_expression "scratch[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "scratch[2] = 0;" (assignment_expression "scratch[2] = 0" (subscript_expression "scratch[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "scratch[1] = 0;" (assignment_expression "scratch[1] = 0" (subscript_expression "scratch[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*scratch = 0;" (assignment_expression "*scratch = 0" (pointer_expression "*scratch" * identifier) = number_literal) ;) (expression_statement "pBVar9 = c;" (assignment_expression "pBVar9 = c" identifier = identifier) ;) (expression_statement "pBVar10 = scratch + (iVar14 - iVar6) * 2;" (assignment_expression "pBVar10 = scratch + (iVar14 - iVar6) * 2" identifier = (binary_expression "scratch + (iVar14 - iVar6) * 2" identifier + (binary_expression "(iVar14 - iVar6) * 2" (parenthesized_expression "(iVar14 - iVar6)" ( (binary_expression "iVar14 - iVar6" identifier - identifier) )) * number_literal))) ;) (do_statement "do {\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    } while (c + iVar6 * 2 != pBVar9);" do (compound_statement "{\n      BVar18 = *pBVar9;\n      pBVar9 = pBVar9 + 1;\n      *pBVar10 = BVar18;\n      pBVar10 = pBVar10 + 1;\n    }" { (expression_statement "BVar18 = *pBVar9;" (assignment_expression "BVar18 = *pBVar9" identifier = (pointer_expression "*pBVar9" * identifier)) ;) (expression_statement "pBVar9 = pBVar9 + 1;" (assignment_expression "pBVar9 = pBVar9 + 1" identifier = (binary_expression "pBVar9 + 1" identifier + number_literal)) ;) (expression_statement "*pBVar10 = BVar18;" (assignment_expression "*pBVar10 = BVar18" (pointer_expression "*pBVar10" * identifier) = identifier) ;) (expression_statement "pBVar10 = pBVar10 + 1;" (assignment_expression "pBVar10 = pBVar10 + 1" identifier = (binary_expression "pBVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(c + iVar6 * 2 != pBVar9)" ( (binary_expression "c + iVar6 * 2 != pBVar9" (binary_expression "c + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) != identifier) )) ;) (if_statement "if (iVar21 + -3 < 0) {\n      uVar12 = 0;\n    }\n    else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }" if (parenthesized_expression "(iVar21 + -3 < 0)" ( (binary_expression "iVar21 + -3 < 0" (binary_expression "iVar21 + -3" identifier + number_literal) < number_literal) )) (compound_statement "{\n      uVar12 = 0;\n    }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }" else (compound_statement "{\n      uVar12 = 0;\n      pBVar10 = c + iVar6 * 2 + iVar21 + -3;\n      pBVar9 = scratch + iVar14 * 2 + -2;\n      do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);\n    }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "pBVar10 = c + iVar6 * 2 + iVar21 + -3;" (assignment_expression "pBVar10 = c + iVar6 * 2 + iVar21 + -3" identifier = (binary_expression "c + iVar6 * 2 + iVar21 + -3" (binary_expression "c + iVar6 * 2 + iVar21" (binary_expression "c + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) + identifier) + number_literal)) ;) (expression_statement "pBVar9 = scratch + iVar14 * 2 + -2;" (assignment_expression "pBVar9 = scratch + iVar14 * 2 + -2" identifier = (binary_expression "scratch + iVar14 * 2 + -2" (binary_expression "scratch + iVar14 * 2" identifier + (binary_expression "iVar14 * 2" identifier * number_literal)) + number_literal)) ;) (do_statement "do {\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      } while (scratch != pBVar7);" do (compound_statement "{\n        pBVar7 = pBVar9 + -1;\n        uVar19 = *pBVar10;\n        pBVar10 = pBVar10 + -1;\n        uVar4 = uVar19 + pBVar9[1];\n        uVar16 = uVar12 + uVar4;\n        pBVar9[1] = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        pBVar9 = pBVar7;\n      }" { (expression_statement "pBVar7 = pBVar9 + -1;" (assignment_expression "pBVar7 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar19 = *pBVar10;" (assignment_expression "uVar19 = *pBVar10" identifier = (pointer_expression "*pBVar10" * identifier)) ;) (expression_statement "pBVar10 = pBVar10 + -1;" (assignment_expression "pBVar10 = pBVar10 + -1" identifier = (binary_expression "pBVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar19 + pBVar9[1];" (assignment_expression "uVar4 = uVar19 + pBVar9[1]" identifier = (binary_expression "uVar19 + pBVar9[1]" identifier + (subscript_expression "pBVar9[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar16 = uVar12 + uVar4;" (assignment_expression "uVar16 = uVar12 + uVar4" identifier = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) (expression_statement "pBVar9[1] = uVar16;" (assignment_expression "pBVar9[1] = uVar16" (subscript_expression "pBVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);" (assignment_expression "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" identifier = (binary_expression "(uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" (call_expression "(uint)(uVar16 < uVar12)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar16 < uVar12)" ( (binary_expression "uVar16 < uVar12" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))))) ;) (expression_statement "pBVar9 = pBVar7;" (assignment_expression "pBVar9 = pBVar7" identifier = identifier) ;) }) while (parenthesized_expression "(scratch != pBVar7)" ( (binary_expression "scratch != pBVar7" identifier != identifier) )) ;) }))) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "scratch[1] = uVar12;" (assignment_expression "scratch[1] = uVar12" (subscript_expression "scratch[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (-1 < iVar21) {\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }" if (parenthesized_expression "(-1 < iVar21)" ( (binary_expression "-1 < iVar21" number_literal < identifier) )) (compound_statement "{\n      iVar6 = 1;\n      puVar11 = scratch + iVar14 * 4;\n      do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      puVar17 = scratch + iVar21 + iVar14 * 2;\n      uVar12 = 0;\n      puVar11 = c + iVar21 + iVar6;\n      do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);\n      iVar6 = (len * 2 - iVar20) + iVar14 * -2;\n      iVar21 = iVar6 + -1;\n      if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }\n    }" { (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (expression_statement "puVar11 = scratch + iVar14 * 4;" (assignment_expression "puVar11 = scratch + iVar14 * 4" identifier = (binary_expression "scratch + iVar14 * 4" identifier + (binary_expression "iVar14 * 4" identifier * number_literal))) ;) (do_statement "do {\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      } while (scratch + iVar14 * 2 != puVar17);" do (compound_statement "{\n        uVar16 = puVar11[-1];\n        puVar17 = puVar11 + -1;\n        uVar19 = puVar11[iVar14 * -2 + -1];\n        uVar12 = uVar16 + iVar6;\n        uVar4 = ~uVar19 + uVar12;\n        *puVar17 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);\n        puVar11 = puVar17;\n      }" { (expression_statement "uVar16 = puVar11[-1];" (assignment_expression "uVar16 = puVar11[-1]" identifier = (subscript_expression "puVar11[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar17 = puVar11 + -1;" (assignment_expression "puVar17 = puVar11 + -1" identifier = (binary_expression "puVar11 + -1" identifier + number_literal)) ;) (expression_statement "uVar19 = puVar11[iVar14 * -2 + -1];" (assignment_expression "uVar19 = puVar11[iVar14 * -2 + -1]" identifier = (subscript_expression "puVar11[iVar14 * -2 + -1]" identifier [ (binary_expression "iVar14 * -2 + -1" (binary_expression "iVar14 * -2" identifier * number_literal) + number_literal) ])) ;) (expression_statement "uVar12 = uVar16 + iVar6;" (assignment_expression "uVar12 = uVar16 + iVar6" identifier = (binary_expression "uVar16 + iVar6" identifier + identifier)) ;) (expression_statement "uVar4 = ~uVar19 + uVar12;" (assignment_expression "uVar4 = ~uVar19 + uVar12" identifier = (binary_expression "~uVar19 + uVar12" (unary_expression "~uVar19" ~ identifier) + identifier)) ;) (expression_statement "*puVar17 = uVar4;" (assignment_expression "*puVar17 = uVar4" (pointer_expression "*puVar17" * identifier) = identifier) ;) (expression_statement "iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16);" (assignment_expression "iVar6 = (uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16)" identifier = (binary_expression "(uint)(uVar4 < ~uVar19) + (uint)(uVar12 < uVar16)" (call_expression "(uint)(uVar4 < ~uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < ~uVar19)" ( (binary_expression "uVar4 < ~uVar19" identifier < (unary_expression "~uVar19" ~ identifier)) ))) + (call_expression "(uint)(uVar12 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < uVar16)" ( (binary_expression "uVar12 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar11 = puVar17;" (assignment_expression "puVar11 = puVar17" identifier = identifier) ;) }) while (parenthesized_expression "(scratch + iVar14 * 2 != puVar17)" ( (binary_expression "scratch + iVar14 * 2 != puVar17" (binary_expression "scratch + iVar14 * 2" identifier + (binary_expression "iVar14 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "iVar6 = (len * 2 - iVar20) + iVar14 * -2;" (assignment_expression "iVar6 = (len * 2 - iVar20) + iVar14 * -2" identifier = (binary_expression "(len * 2 - iVar20) + iVar14 * -2" (parenthesized_expression "(len * 2 - iVar20)" ( (binary_expression "len * 2 - iVar20" (binary_expression "len * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar14 * -2" identifier * number_literal))) ;) (expression_statement "puVar17 = scratch + iVar21 + iVar14 * 2;" (assignment_expression "puVar17 = scratch + iVar21 + iVar14 * 2" identifier = (binary_expression "scratch + iVar21 + iVar14 * 2" (binary_expression "scratch + iVar21" identifier + identifier) + (binary_expression "iVar14 * 2" identifier * number_literal))) ;) (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "puVar11 = c + iVar21 + iVar6;" (assignment_expression "puVar11 = c + iVar21 + iVar6" identifier = (binary_expression "c + iVar21 + iVar6" (binary_expression "c + iVar21" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      } while (c + iVar6 + -1 != puVar8);" do (compound_statement "{\n        puVar8 = puVar11 + -1;\n        uVar19 = *puVar17;\n        puVar17 = puVar17 + -1;\n        uVar4 = uVar19 + *puVar11;\n        uVar16 = uVar12 + uVar4;\n        *puVar11 = uVar16;\n        uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);\n        puVar11 = puVar8;\n      }" { (expression_statement "puVar8 = puVar11 + -1;" (assignment_expression "puVar8 = puVar11 + -1" identifier = (binary_expression "puVar11 + -1" identifier + number_literal)) ;) (expression_statement "uVar19 = *puVar17;" (assignment_expression "uVar19 = *puVar17" identifier = (pointer_expression "*puVar17" * identifier)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar19 + *puVar11;" (assignment_expression "uVar4 = uVar19 + *puVar11" identifier = (binary_expression "uVar19 + *puVar11" identifier + (pointer_expression "*puVar11" * identifier))) ;) (expression_statement "uVar16 = uVar12 + uVar4;" (assignment_expression "uVar16 = uVar12 + uVar4" identifier = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar11 = uVar16;" (assignment_expression "*puVar11 = uVar16" (pointer_expression "*puVar11" * identifier) = identifier) ;) (expression_statement "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19);" (assignment_expression "uVar12 = (uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" identifier = (binary_expression "(uint)(uVar16 < uVar12) + (uint)(uVar4 < uVar19)" (call_expression "(uint)(uVar16 < uVar12)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar16 < uVar12)" ( (binary_expression "uVar16 < uVar12" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))))) ;) (expression_statement "puVar11 = puVar8;" (assignment_expression "puVar11 = puVar8" identifier = identifier) ;) }) while (parenthesized_expression "(c + iVar6 + -1 != puVar8)" ( (binary_expression "c + iVar6 + -1 != puVar8" (binary_expression "c + iVar6 + -1" (binary_expression "c + iVar6" identifier + identifier) + number_literal) != identifier) )) ;) (expression_statement "iVar6 = (len * 2 - iVar20) + iVar14 * -2;" (assignment_expression "iVar6 = (len * 2 - iVar20) + iVar14 * -2" identifier = (binary_expression "(len * 2 - iVar20) + iVar14 * -2" (parenthesized_expression "(len * 2 - iVar20)" ( (binary_expression "len * 2 - iVar20" (binary_expression "len * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar14 * -2" identifier * number_literal))) ;) (expression_statement "iVar21 = iVar6 + -1;" (assignment_expression "iVar21 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (uVar12 != 0) {\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }" if (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) (compound_statement "{\n        if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }\n        puVar11 = (uint *)&DAT_00000135;\n        puVar13 = PTR_DAT_000ad2c8 + 0x43c4;\n        pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);\n        pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }\n        iVar21 = (int)puVar13 >> 1;\n        pBVar7 = pBVar15 + (int)puVar13 * 2;\n        iVar6 = (int)puVar13 - iVar21;\n        internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);\n        internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);\n        internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);\n        puVar17 = puVar11 + iVar21;\n        if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }\n        iVar14 = 0;\n        puVar5 = pBVar15 + iVar21 + -1;\n        puVar8 = puVar5;\n        do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);\n        iVar14 = 0;\n        do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);\n        return;\n      }" { (if_statement "if (-1 < iVar21) {\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }" if (parenthesized_expression "(-1 < iVar21)" ( (binary_expression "-1 < iVar21" number_literal < identifier) )) (compound_statement "{\n          pBVar9 = c + iVar6;\n          do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);\n        }" { (expression_statement "pBVar9 = c + iVar6;" (assignment_expression "pBVar9 = c + iVar6" identifier = (binary_expression "c + iVar6" identifier + identifier)) ;) (do_statement "do {\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          } while (iVar21 != -1);" do (compound_statement "{\n            uVar12 = pBVar9[-1];\n            iVar21 = iVar21 + -1;\n            uVar4 = uVar12 + 1;\n            pBVar9[-1] = uVar4;\n            if (uVar12 <= uVar4) {\n              return;\n            }\n            pBVar9 = pBVar9 + -1;\n          }" { (expression_statement "uVar12 = pBVar9[-1];" (assignment_expression "uVar12 = pBVar9[-1]" identifier = (subscript_expression "pBVar9[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar12 + 1;" (assignment_expression "uVar4 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "pBVar9[-1] = uVar4;" (assignment_expression "pBVar9[-1] = uVar4" (subscript_expression "pBVar9[-1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar12 <= uVar4) {\n              return;\n            }" if (parenthesized_expression "(uVar12 <= uVar4)" ( (binary_expression "uVar12 <= uVar4" identifier <= identifier) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "pBVar9 = pBVar9 + -1;" (assignment_expression "pBVar9 = pBVar9 + -1" identifier = (binary_expression "pBVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) })) (expression_statement "puVar11 = (uint *)&DAT_00000135;" (assignment_expression "puVar11 = (uint *)&DAT_00000135" identifier = (cast_expression "(uint *)&DAT_00000135" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00000135" & identifier))) ;) (expression_statement "puVar13 = PTR_DAT_000ad2c8 + 0x43c4;" (assignment_expression "puVar13 = PTR_DAT_000ad2c8 + 0x43c4" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x43c4" identifier + number_literal)) ;) (expression_statement "pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0);" (assignment_expression "pBVar10 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0)" identifier = (cast_expression "(BignumInt *)(PTR_DAT_000ad2c8 + 0x41d0)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000ad2c8 + 0x41d0)" ( (binary_expression "PTR_DAT_000ad2c8 + 0x41d0" identifier + number_literal) )))) ;) (expression_statement "pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254);" (assignment_expression "pBVar9 = (BignumInt *)(PTR_DAT_000ad2c8 + 0x4254)" identifier = (cast_expression "(BignumInt *)(PTR_DAT_000ad2c8 + 0x4254)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000ad2c8 + 0x4254)" ( (binary_expression "PTR_DAT_000ad2c8 + 0x4254" identifier + number_literal) )))) ;) (expression_statement "(*(code *)PTR___assert_fail_000adb00)();" (call_expression "(*(code *)PTR___assert_fail_000adb00)()" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000adb00" * (cast_expression "(code *)PTR___assert_fail_000adb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)puVar13 < 0x33) {\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }" if (parenthesized_expression "((int)puVar13 < 0x33)" ( (binary_expression "(int)puVar13 < 0x33" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }\n          pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);\n          puVar17 = (uint *)((int)puVar11 + iVar6);\n          if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }\n          return;\n        }" { (if_statement "if ((int)puVar13 < 1) {\n            iVar6 = (int)puVar13 << 2;\n          }\n          else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }" if (parenthesized_expression "((int)puVar13 < 1)" ( (binary_expression "(int)puVar13 < 1" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            iVar6 = (int)puVar13 << 2;\n          }" { (expression_statement "iVar6 = (int)puVar13 << 2;" (assignment_expression "iVar6 = (int)puVar13 << 2" identifier = (binary_expression "(int)puVar13 << 2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal)) ;) }) (else_clause "else {\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }" else (compound_statement "{\n            iVar6 = (int)puVar13 * 4;\n            puVar17 = puVar11;\n            do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);\n          }" { (expression_statement "iVar6 = (int)puVar13 * 4;" (assignment_expression "iVar6 = (int)puVar13 * 4" identifier = (binary_expression "(int)puVar13 * 4" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "puVar17 = puVar11;" (assignment_expression "puVar17 = puVar11" identifier = identifier) ;) (do_statement "do {\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            } while (puVar11 + (int)puVar13 != puVar17);" do (compound_statement "{\n              *puVar17 = 0;\n              puVar17 = puVar17 + 1;\n            }" { (expression_statement "*puVar17 = 0;" (assignment_expression "*puVar17 = 0" (pointer_expression "*puVar17" * identifier) = number_literal) ;) (expression_statement "puVar17 = puVar17 + 1;" (assignment_expression "puVar17 = puVar17 + 1" identifier = (binary_expression "puVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar11 + (int)puVar13 != puVar17)" ( (binary_expression "puVar11 + (int)puVar13 != puVar17" (binary_expression "puVar11 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) }))) (expression_statement "pBVar15 = (BignumInt *)((int)pBVar9 + iVar6);" (assignment_expression "pBVar15 = (BignumInt *)((int)pBVar9 + iVar6)" identifier = (cast_expression "(BignumInt *)((int)pBVar9 + iVar6)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar9 + iVar6)" ( (binary_expression "(int)pBVar9 + iVar6" (cast_expression "(int)pBVar9" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "puVar17 = (uint *)((int)puVar11 + iVar6);" (assignment_expression "puVar17 = (uint *)((int)puVar11 + iVar6)" identifier = (cast_expression "(uint *)((int)puVar11 + iVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar11 + iVar6)" ( (binary_expression "(int)puVar11 + iVar6" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (pBVar9 < pBVar15) {\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }" if (parenthesized_expression "(pBVar9 < pBVar15)" ( (binary_expression "pBVar9 < pBVar15" identifier < identifier) )) (compound_statement "{\n            do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);\n          }" { (do_statement "do {\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            } while (pBVar9 < pBVar15);" do (compound_statement "{\n              uVar12 = 0;\n              puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);\n              puVar5 = puVar17;\n              while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }\n              pBVar15 = pBVar15 + -1;\n              puVar17 = puVar17 + -1;\n            }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "puVar8 = (uint *)((int)pBVar10 + iVar6 + -4);" (assignment_expression "puVar8 = (uint *)((int)pBVar10 + iVar6 + -4)" identifier = (cast_expression "(uint *)((int)pBVar10 + iVar6 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar10 + iVar6 + -4)" ( (binary_expression "(int)pBVar10 + iVar6 + -4" (binary_expression "(int)pBVar10 + iVar6" (cast_expression "(int)pBVar10" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "puVar5 = puVar17;" (assignment_expression "puVar5 = puVar17" identifier = identifier) ;) (while_statement "while (puVar11 < puVar5) {\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }" while (parenthesized_expression "(puVar11 < puVar5)" ( (binary_expression "puVar11 < puVar5" identifier < identifier) )) (compound_statement "{\n                puVar1 = puVar5 + -1;\n                uVar4 = *puVar8;\n                puVar5 = puVar5 + -1;\n                puVar8 = puVar8 + -1;\n                lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;\n                *puVar5 = (uint)lVar3;\n                uVar12 = (uint)((ulonglong)lVar3 >> 0x20);\n              }" { (expression_statement "puVar1 = puVar5 + -1;" (assignment_expression "puVar1 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar8;" (assignment_expression "uVar4 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) (expression_statement "lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12;" (assignment_expression "lVar3 = (ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12" identifier = (binary_expression "(ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1] +\n                        (ulonglong)uVar12" (binary_expression "(ulonglong)*puVar1 + (ulonglong)uVar4 * (ulonglong)pBVar15[-1]" (binary_expression "(ulonglong)*puVar1" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) + (binary_expression "(ulonglong)uVar4 * (ulonglong)pBVar15[-1]" (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)pBVar15[-1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pBVar15[-1]" identifier [ number_literal ])))) + (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "*puVar5 = (uint)lVar3;" (assignment_expression "*puVar5 = (uint)lVar3" (pointer_expression "*puVar5" * identifier) = (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar12 = (uint)((ulonglong)lVar3 >> 0x20);" (assignment_expression "uVar12 = (uint)((ulonglong)lVar3 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar3 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar3 >> 0x20)" ( (binary_expression "(ulonglong)lVar3 >> 0x20" (cast_expression "(ulonglong)lVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) })) (expression_statement "pBVar15 = pBVar15 + -1;" (assignment_expression "pBVar15 = pBVar15 + -1" identifier = (binary_expression "pBVar15 + -1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar9 < pBVar15)" ( (binary_expression "pBVar9 < pBVar15" identifier < identifier) )) ;) })) (return_statement "return;" return ;) })) (expression_statement "iVar21 = (int)puVar13 >> 1;" (assignment_expression "iVar21 = (int)puVar13 >> 1" identifier = (binary_expression "(int)puVar13 >> 1" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "pBVar7 = pBVar15 + (int)puVar13 * 2;" (assignment_expression "pBVar7 = pBVar15 + (int)puVar13 * 2" identifier = (binary_expression "pBVar15 + (int)puVar13 * 2" identifier + (binary_expression "(int)puVar13 * 2" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "iVar6 = (int)puVar13 - iVar21;" (assignment_expression "iVar6 = (int)puVar13 - iVar21" identifier = (binary_expression "(int)puVar13 - iVar21" (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier) - identifier)) ;) (expression_statement "internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7);" (call_expression "internal_mul(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7)" identifier (argument_list "(pBVar9 + iVar21,pBVar10 + iVar21,pBVar15 + iVar21 * 2,iVar6,pBVar7)" ( (binary_expression "pBVar9 + iVar21" identifier + identifier) , (binary_expression "pBVar10 + iVar21" identifier + identifier) , (binary_expression "pBVar15 + iVar21 * 2" identifier + (binary_expression "iVar21 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7);" (call_expression "internal_mul_low(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7)" identifier (argument_list "(pBVar9,pBVar10 + iVar6,pBVar15 + iVar21,iVar21,pBVar7)" ( identifier , (binary_expression "pBVar10 + iVar6" identifier + identifier) , (binary_expression "pBVar15 + iVar21" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7);" (call_expression "internal_mul_low(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7)" identifier (argument_list "(pBVar9 + iVar6,pBVar10,pBVar15,iVar21,pBVar7)" ( (binary_expression "pBVar9 + iVar6" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "puVar17 = puVar11 + iVar21;" (assignment_expression "puVar17 = puVar11 + iVar21" identifier = (binary_expression "puVar11 + iVar21" identifier + identifier)) ;) (if_statement "if (0 < iVar6) {\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n          iVar14 = iVar21 * 2 + iVar6;\n          puVar5 = pBVar15 + iVar14;\n          puVar8 = puVar17;\n          do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);\n        }" { (expression_statement "iVar14 = iVar21 * 2 + iVar6;" (assignment_expression "iVar14 = iVar21 * 2 + iVar6" identifier = (binary_expression "iVar21 * 2 + iVar6" (binary_expression "iVar21 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "puVar5 = pBVar15 + iVar14;" (assignment_expression "puVar5 = pBVar15 + iVar14" identifier = (binary_expression "pBVar15 + iVar14" identifier + identifier)) ;) (expression_statement "puVar8 = puVar17;" (assignment_expression "puVar8 = puVar17" identifier = identifier) ;) (do_statement "do {\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          } while (pBVar15 + iVar6 + iVar14 != puVar5);" do (compound_statement "{\n            uVar12 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar8 = uVar12;\n            puVar8 = puVar8 + 1;\n          }" { (expression_statement "uVar12 = *puVar5;" (assignment_expression "uVar12 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = uVar12;" (assignment_expression "*puVar8 = uVar12" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar15 + iVar6 + iVar14 != puVar5)" ( (binary_expression "pBVar15 + iVar6 + iVar14 != puVar5" (binary_expression "pBVar15 + iVar6 + iVar14" (binary_expression "pBVar15 + iVar6" identifier + identifier) + identifier) != identifier) )) ;) })) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (expression_statement "puVar5 = pBVar15 + iVar21 + -1;" (assignment_expression "puVar5 = pBVar15 + iVar21 + -1" identifier = (binary_expression "pBVar15 + iVar21 + -1" (binary_expression "pBVar15 + iVar21" identifier + identifier) + number_literal)) ;) (expression_statement "puVar8 = puVar5;" (assignment_expression "puVar8 = puVar5" identifier = identifier) ;) (do_statement "do {\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        } while (bVar2);" do (compound_statement "{\n          uVar16 = *puVar8;\n          uVar19 = puVar8[iVar21];\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar8 = uVar4;\n          bVar2 = pBVar15 != puVar8;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n          puVar8 = puVar8 + -1;\n        }" { (expression_statement "uVar16 = *puVar8;" (assignment_expression "uVar16 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "uVar19 = puVar8[iVar21];" (assignment_expression "uVar19 = puVar8[iVar21]" identifier = (subscript_expression "puVar8[iVar21]" identifier [ identifier ])) ;) (expression_statement "uVar12 = uVar16 + iVar14;" (assignment_expression "uVar12 = uVar16 + iVar14" identifier = (binary_expression "uVar16 + iVar14" identifier + identifier)) ;) (expression_statement "uVar4 = uVar19 + uVar12;" (assignment_expression "uVar4 = uVar19 + uVar12" identifier = (binary_expression "uVar19 + uVar12" identifier + identifier)) ;) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "bVar2 = pBVar15 != puVar8;" (assignment_expression "bVar2 = pBVar15 != puVar8" identifier = (binary_expression "pBVar15 != puVar8" identifier != identifier)) ;) (expression_statement "iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);" (assignment_expression "iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16)" identifier = (binary_expression "(uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16)" (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))) + (call_expression "(uint)(uVar12 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < uVar16)" ( (binary_expression "uVar12 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar2)" ( identifier )) ;) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        } while (puVar11 != puVar17);" do (compound_statement "{\n          puVar8 = puVar5 + iVar21 + iVar6;\n          uVar16 = *puVar5;\n          puVar17 = puVar17 + -1;\n          puVar5 = puVar5 + -1;\n          uVar19 = *puVar8;\n          uVar12 = uVar16 + iVar14;\n          uVar4 = uVar19 + uVar12;\n          *puVar17 = uVar4;\n          iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);\n        }" { (expression_statement "puVar8 = puVar5 + iVar21 + iVar6;" (assignment_expression "puVar8 = puVar5 + iVar21 + iVar6" identifier = (binary_expression "puVar5 + iVar21 + iVar6" (binary_expression "puVar5 + iVar21" identifier + identifier) + identifier)) ;) (expression_statement "uVar16 = *puVar5;" (assignment_expression "uVar16 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar19 = *puVar8;" (assignment_expression "uVar19 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "uVar12 = uVar16 + iVar14;" (assignment_expression "uVar12 = uVar16 + iVar14" identifier = (binary_expression "uVar16 + iVar14" identifier + identifier)) ;) (expression_statement "uVar4 = uVar19 + uVar12;" (assignment_expression "uVar4 = uVar19 + uVar12" identifier = (binary_expression "uVar19 + uVar12" identifier + identifier)) ;) (expression_statement "*puVar17 = uVar4;" (assignment_expression "*puVar17 = uVar4" (pointer_expression "*puVar17" * identifier) = identifier) ;) (expression_statement "iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16);" (assignment_expression "iVar14 = (uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16)" identifier = (binary_expression "(uint)(uVar4 < uVar19) + (uint)(uVar12 < uVar16)" (call_expression "(uint)(uVar4 < uVar19)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar19)" ( (binary_expression "uVar4 < uVar19" identifier < identifier) ))) + (call_expression "(uint)(uVar12 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < uVar16)" ( (binary_expression "uVar12 < uVar16" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(puVar11 != puVar17)" ( (binary_expression "puVar11 != puVar17" identifier != identifier) )) ;) (return_statement "return;" return ;) })) })) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" identifier (parameter_list "(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "undefined *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "code *pcVar19;" type_identifier (pointer_declarator "*pcVar19" * identifier) ;) (if_statement "if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "(param_4 < 0x33)" ( (binary_expression "param_4 < 0x33" identifier < number_literal) )) (compound_statement "{\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }" { (if_statement "if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" if (parenthesized_expression "(0 < param_4 << 1)" ( (binary_expression "0 < param_4 << 1" number_literal < (binary_expression "param_4 << 1" identifier << number_literal)) )) (compound_statement "{\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" { (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" identifier = identifier) ;) (do_statement "do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);" do (compound_statement "{\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      }" { (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 + param_4 * 2 != puVar10)" ( (binary_expression "param_3 + param_4 * 2 != puVar10" (binary_expression "param_3 + param_4 * 2" identifier + (binary_expression "param_4 * 2" identifier * number_literal)) != identifier) )) ;) })) (expression_statement "puVar10 = param_1 + param_4;" (assignment_expression "puVar10 = param_1 + param_4" identifier = (binary_expression "param_1 + param_4" identifier + identifier)) ;) (expression_statement "param_3 = param_3 + param_4 * 2;" (assignment_expression "param_3 = param_3 + param_4 * 2" identifier = (binary_expression "param_3 + param_4 * 2" identifier + (binary_expression "param_4 * 2" identifier * number_literal))) ;) (if_statement "if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" if (parenthesized_expression "(param_1 < puVar10)" ( (binary_expression "param_1 < puVar10" identifier < identifier) )) (compound_statement "{\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" { (expression_statement "puVar15 = param_2 + param_4;" (assignment_expression "puVar15 = param_2 + param_4" identifier = (binary_expression "param_2 + param_4" identifier + identifier)) ;) (do_statement "do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);" do (compound_statement "{\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      }" { (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar3 = param_3;" (assignment_expression "puVar3 = param_3" identifier = identifier) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (if_statement "if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" if (parenthesized_expression "(param_2 < puVar15)" ( (binary_expression "param_2 < puVar15" identifier < identifier) )) (compound_statement "{\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" { (do_statement "do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);" do (compound_statement "{\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          }" { (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = *puVar3 + uVar11;" (assignment_expression "uVar11 = *puVar3 + uVar11" identifier = (binary_expression "*puVar3 + uVar11" (pointer_expression "*puVar3" * identifier) + identifier)) ;) (expression_statement "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];" (assignment_expression "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" identifier = (binary_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (cast_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11)" ( (type_descriptor "ulonglong" type_identifier) ) (call_expression "CONCAT14(uVar11 < *puVar3,uVar11)" identifier (argument_list "(uVar11 < *puVar3,uVar11)" ( (binary_expression "uVar11 < *puVar3" identifier < (pointer_expression "*puVar3" * identifier)) , identifier )))) + (binary_expression "(ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (binary_expression "(ulonglong)*puVar7" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (cast_expression "(ulonglong)puVar10[-1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "puVar10[-1]" identifier [ number_literal ]))))) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*puVar3 = (uint)lVar2;" (assignment_expression "*puVar3 = (uint)lVar2" (pointer_expression "*puVar3" * identifier) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 < puVar7)" ( (binary_expression "param_2 < puVar7" identifier < identifier) )) ;) (expression_statement "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);" (assignment_expression "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" identifier = (binary_expression "param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" identifier + (unary_expression "~(~(uint)param_2 + (int)puVar15 >> 2)" ~ (parenthesized_expression "(~(uint)param_2 + (int)puVar15 >> 2)" ( (binary_expression "~(uint)param_2 + (int)puVar15 >> 2" (binary_expression "~(uint)param_2 + (int)puVar15" (unary_expression "~(uint)param_2" ~ (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) + (cast_expression "(int)puVar15" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ))))) ;) })) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "*puVar3 = uVar11;" (assignment_expression "*puVar3 = uVar11" (pointer_expression "*puVar3" * identifier) = identifier) ;) }) while (parenthesized_expression "(param_1 < puVar10)" ( (binary_expression "param_1 < puVar10" identifier < identifier) )) ;) })) }) (else_clause "else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" else (compound_statement "{\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" { (expression_statement "iVar6 = param_4 >> 1;" (assignment_expression "iVar6 = param_4 >> 1" identifier = (binary_expression "param_4 >> 1" identifier >> number_literal)) ;) (expression_statement "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);" (assignment_expression "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070)" identifier = (cast_expression "(code *)(PTR_LAB_000ad6d0 + -0x1070)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000ad6d0 + -0x1070)" ( (binary_expression "PTR_LAB_000ad6d0 + -0x1070" identifier + number_literal) )))) ;) (expression_statement "iVar17 = param_4 - iVar6;" (assignment_expression "iVar17 = param_4 - iVar6" identifier = (binary_expression "param_4 - iVar6" identifier - identifier)) ;) (expression_statement "FUN_0004ef90();" (call_expression "FUN_0004ef90()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar13 = iVar17 + 1;" (assignment_expression "iVar13 = iVar17 + 1" identifier = (binary_expression "iVar17 + 1" identifier + number_literal)) ;) (expression_statement "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);" (call_expression "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" (parenthesized_expression "(*pcVar19)" ( (pointer_expression "*pcVar19" * identifier) )) (argument_list "(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" ( (binary_expression "param_1 + iVar6" identifier + identifier) , (binary_expression "param_2 + iVar6" identifier + identifier) , (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "iVar18 = iVar13 * 2;" (assignment_expression "iVar18 = iVar13 * 2" identifier = (binary_expression "iVar13 * 2" identifier * number_literal)) ;) (expression_statement "puVar7 = param_5 + iVar13;" (assignment_expression "puVar7 = param_5 + iVar13" identifier = (binary_expression "param_5 + iVar13" identifier + identifier)) ;) (expression_statement "param_5[iVar17 + 2] = 0;" (assignment_expression "param_5[iVar17 + 2] = 0" (subscript_expression "param_5[iVar17 + 2]" identifier [ (binary_expression "iVar17 + 2" identifier + number_literal) ]) = number_literal) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "puVar10 = param_5 + (iVar18 - iVar6);" (assignment_expression "puVar10 = param_5 + (iVar18 - iVar6)" identifier = (binary_expression "param_5 + (iVar18 - iVar6)" identifier + (parenthesized_expression "(iVar18 - iVar6)" ( (binary_expression "iVar18 - iVar6" identifier - identifier) )))) ;) (expression_statement "puVar15 = param_1;" (assignment_expression "puVar15 = param_1" identifier = identifier) ;) (expression_statement "puVar3 = param_2;" (assignment_expression "puVar3 = param_2" identifier = identifier) ;) (do_statement "do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);" do (compound_statement "{\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    }" { (expression_statement "uVar11 = *puVar15;" (assignment_expression "uVar11 = *puVar15" identifier = (pointer_expression "*puVar15" * identifier)) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;" (assignment_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11" (subscript_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)]" identifier [ (binary_expression "(iVar13 - iVar6) - (iVar18 - iVar6)" (parenthesized_expression "(iVar13 - iVar6)" ( (binary_expression "iVar13 - iVar6" identifier - identifier) )) - (parenthesized_expression "(iVar18 - iVar6)" ( (binary_expression "iVar18 - iVar6" identifier - identifier) ))) ]) = identifier) ;) (expression_statement "*puVar10 = *puVar3;" (assignment_expression "*puVar10 = *puVar3" (pointer_expression "*puVar10" * identifier) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_1 + iVar6 != puVar15)" ( (binary_expression "param_1 + iVar6 != puVar15" (binary_expression "param_1 + iVar6" identifier + identifier) != identifier) )) ;) (if_statement "if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" if (parenthesized_expression "(iVar17 < 1)" ( (binary_expression "iVar17 < 1" identifier < number_literal) )) (compound_statement "{\n      *param_5 = 0;\n      uVar11 = 0;\n    }" { (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" else (compound_statement "{\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" { (expression_statement "param_1 = param_1 + iVar13 + iVar6 + -2;" (assignment_expression "param_1 = param_1 + iVar13 + iVar6 + -2" identifier = (binary_expression "param_1 + iVar13 + iVar6 + -2" (binary_expression "param_1 + iVar13 + iVar6" (binary_expression "param_1 + iVar13" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar17" identifier = (binary_expression "param_5 + iVar17" identifier + identifier)) ;) (do_statement "do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);" do (compound_statement "{\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      }" { (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" identifier = identifier) ;) (expression_statement "uVar16 = *param_1;" (assignment_expression "uVar16 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "param_1 = param_1 + -1;" (assignment_expression "param_1 = param_1 + -1" identifier = (binary_expression "param_1 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar15;" (assignment_expression "uVar4 = uVar16 + *puVar15" identifier = (binary_expression "uVar16 + *puVar15" identifier + (pointer_expression "*puVar15" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar15 = uVar14;" (assignment_expression "*puVar15 = uVar14" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15 + -1;" (assignment_expression "puVar10 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != puVar15 + -1)" ( (binary_expression "param_5 != puVar15 + -1" identifier != (binary_expression "puVar15 + -1" identifier + number_literal)) )) ;) (expression_statement "*param_5 = uVar11;" (assignment_expression "*param_5 = uVar11" (pointer_expression "*param_5" * identifier) = identifier) ;) (expression_statement "param_2 = param_2 + iVar13 + iVar6 + -2;" (assignment_expression "param_2 = param_2 + iVar13 + iVar6 + -2" identifier = (binary_expression "param_2 + iVar13 + iVar6 + -2" (binary_expression "param_2 + iVar13 + iVar6" (binary_expression "param_2 + iVar13" identifier + identifier) + identifier) + number_literal)) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar13 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar13 + iVar17" identifier = (binary_expression "param_5 + iVar13 + iVar17" (binary_expression "param_5 + iVar13" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);" do (compound_statement "{\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      }" { (expression_statement "puVar3 = puVar10 + -1;" (assignment_expression "puVar3 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *param_2;" (assignment_expression "uVar16 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" identifier = (binary_expression "uVar16 + *puVar10" identifier + (pointer_expression "*puVar10" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar3;" (assignment_expression "puVar10 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(puVar15 + iVar17 != puVar3)" ( (binary_expression "puVar15 + iVar17 != puVar3" (binary_expression "puVar15 + iVar17" identifier + identifier) != identifier) )) ;) }))) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar3 = param_5 + iVar13 * 4;" (assignment_expression "puVar3 = param_5 + iVar13 * 4" identifier = (binary_expression "param_5 + iVar13 * 4" identifier + (binary_expression "iVar13 * 4" identifier * number_literal))) ;) (expression_statement "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);" (call_expression "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" (parenthesized_expression "(*pcVar19)" ( (pointer_expression "*pcVar19" * identifier) )) (argument_list "(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" ( identifier , identifier , (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) , identifier ))) ;) (expression_statement "param_5[3] = 0;" (assignment_expression "param_5[3] = 0" (subscript_expression "param_5[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_5[2] = 0;" (assignment_expression "param_5[2] = 0" (subscript_expression "param_5[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" * identifier) = number_literal) ;) (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" identifier = identifier) ;) (expression_statement "puVar15 = param_5 + (iVar13 - iVar6) * 2;" (assignment_expression "puVar15 = param_5 + (iVar13 - iVar6) * 2" identifier = (binary_expression "param_5 + (iVar13 - iVar6) * 2" identifier + (binary_expression "(iVar13 - iVar6) * 2" (parenthesized_expression "(iVar13 - iVar6)" ( (binary_expression "iVar13 - iVar6" identifier - identifier) )) * number_literal))) ;) (do_statement "do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);" do (compound_statement "{\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    }" { (expression_statement "uVar11 = *puVar10;" (assignment_expression "uVar11 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) (expression_statement "*puVar15 = uVar11;" (assignment_expression "*puVar15 = uVar11" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_3 + iVar6 * 2 != puVar10)" ( (binary_expression "param_3 + iVar6 * 2 != puVar10" (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) != identifier) )) ;) (if_statement "if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" if (parenthesized_expression "(iVar18 + -3 < 0)" ( (binary_expression "iVar18 + -3 < 0" (binary_expression "iVar18 + -3" identifier + number_literal) < number_literal) )) (compound_statement "{\n      uVar11 = 0;\n    }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" else (compound_statement "{\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;" (assignment_expression "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3" identifier = (binary_expression "param_3 + iVar6 * 2 + iVar18 + -3" (binary_expression "param_3 + iVar6 * 2 + iVar18" (binary_expression "param_3 + iVar6 * 2" identifier + (binary_expression "iVar6 * 2" identifier * number_literal)) + identifier) + number_literal)) ;) (expression_statement "puVar10 = param_5 + iVar13 * 2 + -2;" (assignment_expression "puVar10 = param_5 + iVar13 * 2 + -2" identifier = (binary_expression "param_5 + iVar13 * 2 + -2" (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) + number_literal)) ;) (do_statement "do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);" do (compound_statement "{\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      }" { (expression_statement "puVar7 = puVar10 + -1;" (assignment_expression "puVar7 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *puVar15;" (assignment_expression "uVar16 = *puVar15" identifier = (pointer_expression "*puVar15" * identifier)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + puVar10[1];" (assignment_expression "uVar4 = uVar16 + puVar10[1]" identifier = (binary_expression "uVar16 + puVar10[1]" identifier + (subscript_expression "puVar10[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "puVar10[1] = uVar14;" (assignment_expression "puVar10[1] = uVar14" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(param_5 != puVar7)" ( (binary_expression "param_5 != puVar7" identifier != identifier) )) ;) }))) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "param_5[1] = uVar11;" (assignment_expression "param_5[1] = uVar11" (subscript_expression "param_5[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" if (parenthesized_expression "(-1 < iVar18)" ( (binary_expression "-1 < iVar18" number_literal < identifier) )) (compound_statement "{\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" { (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (expression_statement "puVar10 = param_5 + iVar13 * 4;" (assignment_expression "puVar10 = param_5 + iVar13 * 4" identifier = (binary_expression "param_5 + iVar13 * 4" identifier + (binary_expression "iVar13 * 4" identifier * number_literal))) ;) (do_statement "do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);" do (compound_statement "{\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      }" { (expression_statement "uVar14 = puVar10[-1];" (assignment_expression "uVar14 = puVar10[-1]" identifier = (subscript_expression "puVar10[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = puVar10[iVar13 * -2 + -1];" (assignment_expression "uVar16 = puVar10[iVar13 * -2 + -1]" identifier = (subscript_expression "puVar10[iVar13 * -2 + -1]" identifier [ (binary_expression "iVar13 * -2 + -1" (binary_expression "iVar13 * -2" identifier * number_literal) + number_literal) ])) ;) (expression_statement "uVar11 = uVar14 + iVar6;" (assignment_expression "uVar11 = uVar14 + iVar6" identifier = (binary_expression "uVar14 + iVar6" identifier + identifier)) ;) (expression_statement "uVar4 = ~uVar16 + uVar11;" (assignment_expression "uVar4 = ~uVar16 + uVar11" identifier = (binary_expression "~uVar16 + uVar11" (unary_expression "~uVar16" ~ identifier) + identifier)) ;) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < ~uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < ~uVar16)" ( (binary_expression "uVar4 < ~uVar16" identifier < (unary_expression "~uVar16" ~ identifier)) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" identifier = identifier) ;) }) while (parenthesized_expression "(param_5 + iVar13 * 2 != puVar15)" ( (binary_expression "param_5 + iVar13 * 2 != puVar15" (binary_expression "param_5 + iVar13 * 2" identifier + (binary_expression "iVar13 * 2" identifier * number_literal)) != identifier) )) ;) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" identifier = (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" ( (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar13 * -2" identifier * number_literal))) ;) (expression_statement "param_5 = param_5 + iVar18 + iVar13 * 2;" (assignment_expression "param_5 = param_5 + iVar18 + iVar13 * 2" identifier = (binary_expression "param_5 + iVar18 + iVar13 * 2" (binary_expression "param_5 + iVar18" identifier + identifier) + (binary_expression "iVar13 * 2" identifier * number_literal))) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = param_3 + iVar18 + iVar6;" (assignment_expression "puVar10 = param_3 + iVar18 + iVar6" identifier = (binary_expression "param_3 + iVar18 + iVar6" (binary_expression "param_3 + iVar18" identifier + identifier) + identifier)) ;) (do_statement "do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);" do (compound_statement "{\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      }" { (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *param_5;" (assignment_expression "uVar16 = *param_5" identifier = (pointer_expression "*param_5" * identifier)) ;) (expression_statement "param_5 = param_5 + -1;" (assignment_expression "param_5 = param_5 + -1" identifier = (binary_expression "param_5 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" identifier = (binary_expression "uVar16 + *puVar10" identifier + (pointer_expression "*puVar10" * identifier))) ;) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" identifier = (binary_expression "uVar11 + uVar4" identifier + identifier)) ;) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" identifier = (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < uVar11)" ( (binary_expression "uVar14 < uVar11" identifier < identifier) ))) + (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))))) ;) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" identifier = identifier) ;) }) while (parenthesized_expression "(param_3 + iVar6 + -1 != puVar15)" ( (binary_expression "param_3 + iVar6 + -1 != puVar15" (binary_expression "param_3 + iVar6 + -1" (binary_expression "param_3 + iVar6" identifier + identifier) + number_literal) != identifier) )) ;) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" identifier = (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" ( (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" identifier * number_literal) - identifier) )) + (binary_expression "iVar13 * -2" identifier * number_literal))) ;) (expression_statement "iVar18 = iVar6 + -1;" (assignment_expression "iVar18 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" { (if_statement "if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" if (parenthesized_expression "(-1 < iVar18)" ( (binary_expression "-1 < iVar18" number_literal < identifier) )) (compound_statement "{\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" { (expression_statement "param_3 = param_3 + iVar6;" (assignment_expression "param_3 = param_3 + iVar6" identifier = (binary_expression "param_3 + iVar6" identifier + identifier)) ;) (do_statement "do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);" do (compound_statement "{\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          }" { (expression_statement "uVar11 = param_3[-1];" (assignment_expression "uVar11 = param_3[-1]" identifier = (subscript_expression "param_3[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar11 + 1;" (assignment_expression "uVar4 = uVar11 + 1" identifier = (binary_expression "uVar11 + 1" identifier + number_literal)) ;) (expression_statement "param_3[-1] = uVar4;" (assignment_expression "param_3[-1] = uVar4" (subscript_expression "param_3[-1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar11 <= uVar4) {\n              return;\n            }" if (parenthesized_expression "(uVar11 <= uVar4)" ( (binary_expression "uVar11 <= uVar4" identifier <= identifier) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != -1)" ( (binary_expression "iVar18 != -1" identifier != number_literal) )) ;) })) (expression_statement "puVar10 = (uint *)&DAT_00000135;" (assignment_expression "puVar10 = (uint *)&DAT_00000135" identifier = (cast_expression "(uint *)&DAT_00000135" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00000135" & identifier))) ;) (expression_statement "puVar12 = PTR_DAT_000ad2c8 + 0x43c4;" (assignment_expression "puVar12 = PTR_DAT_000ad2c8 + 0x43c4" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x43c4" identifier + number_literal)) ;) (expression_statement "puVar9 = PTR_DAT_000ad2c8 + 0x41d0;" (assignment_expression "puVar9 = PTR_DAT_000ad2c8 + 0x41d0" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x41d0" identifier + number_literal)) ;) (expression_statement "puVar8 = PTR_DAT_000ad2c8 + 0x4254;" (assignment_expression "puVar8 = PTR_DAT_000ad2c8 + 0x4254" identifier = (binary_expression "PTR_DAT_000ad2c8 + 0x4254" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR___assert_fail_000adb00)();" (call_expression "(*(code *)PTR___assert_fail_000adb00)()" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000adb00" * (cast_expression "(code *)PTR___assert_fail_000adb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" if (parenthesized_expression "((int)puVar12 < 0x33)" ( (binary_expression "(int)puVar12 < 0x33" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" { (if_statement "if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" if (parenthesized_expression "((int)puVar12 < 1)" ( (binary_expression "(int)puVar12 < 1" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            iVar6 = (int)puVar12 << 2;\n          }" { (expression_statement "iVar6 = (int)puVar12 << 2;" (assignment_expression "iVar6 = (int)puVar12 << 2" identifier = (binary_expression "(int)puVar12 << 2" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal)) ;) }) (else_clause "else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" else (compound_statement "{\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" { (expression_statement "iVar6 = (int)puVar12 * 4;" (assignment_expression "iVar6 = (int)puVar12 * 4" identifier = (binary_expression "(int)puVar12 * 4" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" identifier = identifier) ;) (do_statement "do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);" do (compound_statement "{\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            }" { (expression_statement "*puVar15 = 0;" (assignment_expression "*puVar15 = 0" (pointer_expression "*puVar15" * identifier) = number_literal) ;) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar10 + (int)puVar12 != puVar15)" ( (binary_expression "puVar10 + (int)puVar12 != puVar15" (binary_expression "puVar10 + (int)puVar12" identifier + (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) }))) (expression_statement "puVar12 = puVar8 + iVar6;" (assignment_expression "puVar12 = puVar8 + iVar6" identifier = (binary_expression "puVar8 + iVar6" identifier + identifier)) ;) (expression_statement "puVar15 = (uint *)((int)puVar10 + iVar6);" (assignment_expression "puVar15 = (uint *)((int)puVar10 + iVar6)" identifier = (cast_expression "(uint *)((int)puVar10 + iVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 + iVar6)" ( (binary_expression "(int)puVar10 + iVar6" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (if_statement "if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" if (parenthesized_expression "(puVar8 < puVar12)" ( (binary_expression "puVar8 < puVar12" identifier < identifier) )) (compound_statement "{\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" { (do_statement "do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);" do (compound_statement "{\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar3 = (uint *)(puVar9 + iVar6 + -4);" (assignment_expression "puVar3 = (uint *)(puVar9 + iVar6 + -4)" identifier = (cast_expression "(uint *)(puVar9 + iVar6 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + iVar6 + -4)" ( (binary_expression "puVar9 + iVar6 + -4" (binary_expression "puVar9 + iVar6" identifier + identifier) + number_literal) )))) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (while_statement "while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" while (parenthesized_expression "(puVar10 < puVar7)" ( (binary_expression "puVar10 < puVar7" identifier < identifier) )) (compound_statement "{\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" { (expression_statement "puVar5 = puVar7 + -1;" (assignment_expression "puVar5 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) (expression_statement "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" identifier = (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) + (binary_expression "(ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)uVar4 * (ulonglong)" (cast_expression "(ulonglong)uVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * (cast_expression "(uint *)(puVar12 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + -4)" ( (binary_expression "puVar12 + -4" identifier + number_literal) ))))) + (cast_expression "(ulonglong)uVar11" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "*puVar7 = (uint)lVar2;" (assignment_expression "*puVar7 = (uint)lVar2" (pointer_expression "*puVar7" * identifier) = (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) })) (expression_statement "puVar12 = puVar12 + -4;" (assignment_expression "puVar12 = puVar12 + -4" identifier = (binary_expression "puVar12 + -4" identifier + number_literal)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 < puVar12)" ( (binary_expression "puVar8 < puVar12" identifier < identifier) )) ;) })) (return_statement "return;" return ;) })) (expression_statement "iVar18 = (int)puVar12 >> 1;" (assignment_expression "iVar18 = (int)puVar12 >> 1" identifier = (binary_expression "(int)puVar12 >> 1" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "puVar15 = puVar3 + (int)puVar12 * 2;" (assignment_expression "puVar15 = puVar3 + (int)puVar12 * 2" identifier = (binary_expression "puVar3 + (int)puVar12 * 2" identifier + (binary_expression "(int)puVar12 * 2" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "iVar6 = (int)puVar12 - iVar18;" (assignment_expression "iVar6 = (int)puVar12 - iVar18" identifier = (binary_expression "(int)puVar12 - iVar18" (cast_expression "(int)puVar12" ( (type_descriptor "int" primitive_type) ) identifier) - identifier)) ;) (expression_statement "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);" (call_expression "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" identifier (argument_list "(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" ( (binary_expression "puVar8 + iVar18 * 4" identifier + (binary_expression "iVar18 * 4" identifier * number_literal)) , (binary_expression "puVar9 + iVar18 * 4" identifier + (binary_expression "iVar18 * 4" identifier * number_literal)) , (binary_expression "puVar3 + iVar18 * 2" identifier + (binary_expression "iVar18 * 2" identifier * number_literal)) , identifier , identifier ))) ;) (expression_statement "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" identifier (argument_list "(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" ( identifier , (binary_expression "puVar9 + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) , (binary_expression "puVar3 + iVar18" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" identifier (argument_list "(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" ( (binary_expression "puVar8 + iVar6 * 4" identifier + (binary_expression "iVar6 * 4" identifier * number_literal)) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "puVar15 = puVar10 + iVar18;" (assignment_expression "puVar15 = puVar10 + iVar18" identifier = (binary_expression "puVar10 + iVar18" identifier + identifier)) ;) (if_statement "if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" { (expression_statement "iVar13 = iVar18 * 2 + iVar6;" (assignment_expression "iVar13 = iVar18 * 2 + iVar6" identifier = (binary_expression "iVar18 * 2 + iVar6" (binary_expression "iVar18 * 2" identifier * number_literal) + identifier)) ;) (expression_statement "puVar5 = puVar3 + iVar13;" (assignment_expression "puVar5 = puVar3 + iVar13" identifier = (binary_expression "puVar3 + iVar13" identifier + identifier)) ;) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" identifier = identifier) ;) (do_statement "do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);" do (compound_statement "{\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          }" { (expression_statement "uVar11 = *puVar5;" (assignment_expression "uVar11 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar3 + iVar6 + iVar13 != puVar5)" ( (binary_expression "puVar3 + iVar6 + iVar13 != puVar5" (binary_expression "puVar3 + iVar6 + iVar13" (binary_expression "puVar3 + iVar6" identifier + identifier) + identifier) != identifier) )) ;) })) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "puVar5 = puVar3 + iVar18 + -1;" (assignment_expression "puVar5 = puVar3 + iVar18 + -1" identifier = (binary_expression "puVar3 + iVar18 + -1" (binary_expression "puVar3 + iVar18" identifier + identifier) + number_literal)) ;) (expression_statement "puVar7 = puVar5;" (assignment_expression "puVar7 = puVar5" identifier = identifier) ;) (do_statement "do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);" do (compound_statement "{\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        }" { (expression_statement "uVar14 = *puVar7;" (assignment_expression "uVar14 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "uVar16 = puVar7[iVar18];" (assignment_expression "uVar16 = puVar7[iVar18]" identifier = (subscript_expression "puVar7[iVar18]" identifier [ identifier ])) ;) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" identifier = (binary_expression "uVar14 + iVar13" identifier + identifier)) ;) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" identifier = (binary_expression "uVar16 + uVar11" identifier + identifier)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "bVar1 = puVar3 != puVar7;" (assignment_expression "bVar1 = puVar3 != puVar7" identifier = (binary_expression "puVar3 != puVar7" identifier != identifier)) ;) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" identifier = (binary_expression "puVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (do_statement "do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);" do (compound_statement "{\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        }" { (expression_statement "puVar3 = puVar5 + iVar18 + iVar6;" (assignment_expression "puVar3 = puVar5 + iVar18 + iVar6" identifier = (binary_expression "puVar5 + iVar18 + iVar6" (binary_expression "puVar5 + iVar18" identifier + identifier) + identifier)) ;) (expression_statement "uVar14 = *puVar5;" (assignment_expression "uVar14 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *puVar3;" (assignment_expression "uVar16 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" identifier = (binary_expression "uVar14 + iVar13" identifier + identifier)) ;) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" identifier = (binary_expression "uVar16 + uVar11" identifier + identifier)) ;) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" * identifier) = identifier) ;) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" identifier = (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 < uVar16)" ( (binary_expression "uVar4 < uVar16" identifier < identifier) ))) + (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) ))))) ;) }) while (parenthesized_expression "(puVar10 != puVar15)" ( (binary_expression "puVar10 != puVar15" identifier != identifier) )) ;) (return_statement "return;" return ;) })) })) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT << LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (binary_expression IDENT < (pointer_expression * IDENT)) , IDENT )))) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (unary_expression ~ (parenthesized_expression ( (binary_expression (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT + IDENT) , (binary_expression IDENT + IDENT) , (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + IDENT) + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + IDENT) + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) != IDENT) )) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ IDENT) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (unary_expression ~ IDENT)) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) - IDENT) )) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + IDENT) + LIT) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) - 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 { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) << LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) != IDENT) )) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) + (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + (binary_expression IDENT * LIT)) , (binary_expression IDENT + (binary_expression IDENT * LIT)) , (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + (binary_expression IDENT * LIT)) , (binary_expression IDENT + IDENT) , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + (binary_expression IDENT * LIT)) , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + IDENT) + IDENT) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (return_statement return ;) })) })) }))) (return_statement return ;) })))
(function_definition "void FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)\n\n{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0004ef90(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" (identifier "FUN_0004ef90") (parameter_list "(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "uint *param_5" (type_identifier "uint") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  bool bVar1;\n  longlong lVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  int iVar6;\n  uint *puVar7;\n  undefined *puVar8;\n  undefined *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  undefined *puVar12;\n  int iVar13;\n  uint uVar14;\n  uint *puVar15;\n  uint uVar16;\n  int iVar17;\n  int iVar18;\n  code *pcVar19;\n  \n  if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }\n  return;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "longlong lVar2;" (type_identifier "longlong") (identifier "lVar2") (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined *puVar8;" (type_identifier "undefined") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined *puVar9;" (type_identifier "undefined") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "uint *puVar10;" (type_identifier "uint") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "undefined *puVar12;" (type_identifier "undefined") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "uint *puVar15;" (type_identifier "uint") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "uint uVar16;" (type_identifier "uint") (identifier "uVar16") (; ";")) (declaration "int iVar17;" (primitive_type "int") (identifier "iVar17") (; ";")) (declaration "int iVar18;" (primitive_type "int") (identifier "iVar18") (; ";")) (declaration "code *pcVar19;" (type_identifier "code") (pointer_declarator "*pcVar19" (* "*") (identifier "pcVar19")) (; ";")) (if_statement "if (param_4 < 0x33) {\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }\n  else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(param_4 < 0x33)" (( "(") (binary_expression "param_4 < 0x33" (identifier "param_4") (< "<") (number_literal "0x33")) () ")")) (compound_statement "{\n    if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }\n    puVar10 = param_1 + param_4;\n    param_3 = param_3 + param_4 * 2;\n    if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }\n  }" ({ "{") (if_statement "if (0 < param_4 << 1) {\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" (if "if") (parenthesized_expression "(0 < param_4 << 1)" (( "(") (binary_expression "0 < param_4 << 1" (number_literal "0") (< "<") (binary_expression "param_4 << 1" (identifier "param_4") (<< "<<") (number_literal "1"))) () ")")) (compound_statement "{\n      puVar10 = param_3;\n      do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);\n    }" ({ "{") (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" (identifier "puVar10") (= "=") (identifier "param_3")) (; ";")) (do_statement "do {\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      } while (param_3 + param_4 * 2 != puVar10);" (do "do") (compound_statement "{\n        *puVar10 = 0;\n        puVar10 = puVar10 + 1;\n      }" ({ "{") (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 + param_4 * 2 != puVar10)" (( "(") (binary_expression "param_3 + param_4 * 2 != puVar10" (binary_expression "param_3 + param_4 * 2" (identifier "param_3") (+ "+") (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2"))) (!= "!=") (identifier "puVar10")) () ")")) (; ";")) (} "}"))) (expression_statement "puVar10 = param_1 + param_4;" (assignment_expression "puVar10 = param_1 + param_4" (identifier "puVar10") (= "=") (binary_expression "param_1 + param_4" (identifier "param_1") (+ "+") (identifier "param_4"))) (; ";")) (expression_statement "param_3 = param_3 + param_4 * 2;" (assignment_expression "param_3 = param_3 + param_4 * 2" (identifier "param_3") (= "=") (binary_expression "param_3 + param_4 * 2" (identifier "param_3") (+ "+") (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2")))) (; ";")) (if_statement "if (param_1 < puVar10) {\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" (if "if") (parenthesized_expression "(param_1 < puVar10)" (( "(") (binary_expression "param_1 < puVar10" (identifier "param_1") (< "<") (identifier "puVar10")) () ")")) (compound_statement "{\n      puVar15 = param_2 + param_4;\n      do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);\n    }" ({ "{") (expression_statement "puVar15 = param_2 + param_4;" (assignment_expression "puVar15 = param_2 + param_4" (identifier "puVar15") (= "=") (binary_expression "param_2 + param_4" (identifier "param_2") (+ "+") (identifier "param_4"))) (; ";")) (do_statement "do {\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      } while (param_1 < puVar10);" (do "do") (compound_statement "{\n        param_3 = param_3 + -1;\n        uVar11 = 0;\n        puVar3 = param_3;\n        puVar7 = puVar15;\n        if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }\n        puVar10 = puVar10 + -1;\n        *puVar3 = uVar11;\n      }" ({ "{") (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" (identifier "param_3") (= "=") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar3 = param_3;" (assignment_expression "puVar3 = param_3" (identifier "puVar3") (= "=") (identifier "param_3")) (; ";")) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" (identifier "puVar7") (= "=") (identifier "puVar15")) (; ";")) (if_statement "if (param_2 < puVar15) {\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" (if "if") (parenthesized_expression "(param_2 < puVar15)" (( "(") (binary_expression "param_2 < puVar15" (identifier "param_2") (< "<") (identifier "puVar15")) () ")")) (compound_statement "{\n          do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);\n          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);\n        }" ({ "{") (do_statement "do {\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          } while (param_2 < puVar7);" (do "do") (compound_statement "{\n            puVar7 = puVar7 + -1;\n            uVar11 = *puVar3 + uVar11;\n            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];\n            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n            *puVar3 = (uint)lVar2;\n            puVar3 = puVar3 + -1;\n          }" ({ "{") (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + -1" (identifier "puVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar11 = *puVar3 + uVar11;" (assignment_expression "uVar11 = *puVar3 + uVar11" (identifier "uVar11") (= "=") (binary_expression "*puVar3 + uVar11" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];" (assignment_expression "lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +\n                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (cast_expression "(ulonglong)CONCAT14(uVar11 < *puVar3,uVar11)" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (call_expression "CONCAT14(uVar11 < *puVar3,uVar11)" (identifier "CONCAT14") (argument_list "(uVar11 < *puVar3,uVar11)" (( "(") (binary_expression "uVar11 < *puVar3" (identifier "uVar11") (< "<") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (, ",") (identifier "uVar11") () ")")))) (+ "+") (binary_expression "(ulonglong)*puVar7 * (ulonglong)puVar10[-1]" (binary_expression "(ulonglong)*puVar7" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar7")) (* "*") (cast_expression "(ulonglong)puVar10[-1]" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (subscript_expression "puVar10[-1]" (identifier "puVar10") ([ "[") (number_literal "-1") (] "]")))))) (; ";")) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar11") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "*puVar3 = (uint)lVar2;" (assignment_expression "*puVar3 = (uint)lVar2" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + -1" (identifier "puVar3") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 < puVar7)" (( "(") (binary_expression "param_2 < puVar7" (identifier "param_2") (< "<") (identifier "puVar7")) () ")")) (; ";")) (expression_statement "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);" (assignment_expression "puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" (identifier "puVar3") (= "=") (binary_expression "param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2)" (identifier "param_3") (+ "+") (unary_expression "~(~(uint)param_2 + (int)puVar15 >> 2)" (~ "~") (parenthesized_expression "(~(uint)param_2 + (int)puVar15 >> 2)" (( "(") (binary_expression "~(uint)param_2 + (int)puVar15 >> 2" (binary_expression "~(uint)param_2 + (int)puVar15" (unary_expression "~(uint)param_2" (~ "~") (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2"))) (+ "+") (cast_expression "(int)puVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar15"))) (>> ">>") (number_literal "2")) () ")"))))) (; ";")) (} "}"))) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*puVar3 = uVar11;" (assignment_expression "*puVar3 = uVar11" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar11")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 < puVar10)" (( "(") (binary_expression "param_1 < puVar10" (identifier "param_1") (< "<") (identifier "puVar10")) () ")")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" (else "else") (compound_statement "{\n    iVar6 = param_4 >> 1;\n    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);\n    iVar17 = param_4 - iVar6;\n    FUN_0004ef90();\n    iVar13 = iVar17 + 1;\n    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);\n    iVar18 = iVar13 * 2;\n    puVar7 = param_5 + iVar13;\n    param_5[iVar17 + 2] = 0;\n    *puVar7 = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_5 + (iVar18 - iVar6);\n    puVar15 = param_1;\n    puVar3 = param_2;\n    do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);\n    if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }\n    *puVar7 = uVar11;\n    puVar3 = param_5 + iVar13 * 4;\n    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);\n    param_5[3] = 0;\n    param_5[2] = 0;\n    param_5[1] = 0;\n    *param_5 = 0;\n    puVar10 = param_3;\n    puVar15 = param_5 + (iVar13 - iVar6) * 2;\n    do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);\n    if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }\n    iVar18 = iVar18 + -1;\n    param_5[1] = uVar11;\n    if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }\n  }" ({ "{") (expression_statement "iVar6 = param_4 >> 1;" (assignment_expression "iVar6 = param_4 >> 1" (identifier "iVar6") (= "=") (binary_expression "param_4 >> 1" (identifier "param_4") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);" (assignment_expression "pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070)" (identifier "pcVar19") (= "=") (cast_expression "(code *)(PTR_LAB_000ad6d0 + -0x1070)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000ad6d0 + -0x1070)" (( "(") (binary_expression "PTR_LAB_000ad6d0 + -0x1070" (identifier "PTR_LAB_000ad6d0") (+ "+") (number_literal "-0x1070")) () ")")))) (; ";")) (expression_statement "iVar17 = param_4 - iVar6;" (assignment_expression "iVar17 = param_4 - iVar6" (identifier "iVar17") (= "=") (binary_expression "param_4 - iVar6" (identifier "param_4") (- "-") (identifier "iVar6"))) (; ";")) (expression_statement "FUN_0004ef90();" (call_expression "FUN_0004ef90()" (identifier "FUN_0004ef90") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar13 = iVar17 + 1;" (assignment_expression "iVar13 = iVar17 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar17 + 1" (identifier "iVar17") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);" (call_expression "(*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" (parenthesized_expression "(*pcVar19)" (( "(") (pointer_expression "*pcVar19" (* "*") (identifier "pcVar19")) () ")")) (argument_list "(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5)" (( "(") (binary_expression "param_1 + iVar6" (identifier "param_1") (+ "+") (identifier "iVar6")) (, ",") (binary_expression "param_2 + iVar6" (identifier "param_2") (+ "+") (identifier "iVar6")) (, ",") (binary_expression "param_3 + iVar6 * 2" (identifier "param_3") (+ "+") (binary_expression "iVar6 * 2" (identifier "iVar6") (* "*") (number_literal "2"))) (, ",") (identifier "iVar17") (, ",") (identifier "param_5") () ")"))) (; ";")) (expression_statement "iVar18 = iVar13 * 2;" (assignment_expression "iVar18 = iVar13 * 2" (identifier "iVar18") (= "=") (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2"))) (; ";")) (expression_statement "puVar7 = param_5 + iVar13;" (assignment_expression "puVar7 = param_5 + iVar13" (identifier "puVar7") (= "=") (binary_expression "param_5 + iVar13" (identifier "param_5") (+ "+") (identifier "iVar13"))) (; ";")) (expression_statement "param_5[iVar17 + 2] = 0;" (assignment_expression "param_5[iVar17 + 2] = 0" (subscript_expression "param_5[iVar17 + 2]" (identifier "param_5") ([ "[") (binary_expression "iVar17 + 2" (identifier "iVar17") (+ "+") (number_literal "2")) (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" (identifier "param_5") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = param_5 + (iVar18 - iVar6);" (assignment_expression "puVar10 = param_5 + (iVar18 - iVar6)" (identifier "puVar10") (= "=") (binary_expression "param_5 + (iVar18 - iVar6)" (identifier "param_5") (+ "+") (parenthesized_expression "(iVar18 - iVar6)" (( "(") (binary_expression "iVar18 - iVar6" (identifier "iVar18") (- "-") (identifier "iVar6")) () ")")))) (; ";")) (expression_statement "puVar15 = param_1;" (assignment_expression "puVar15 = param_1" (identifier "puVar15") (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar3 = param_2;" (assignment_expression "puVar3 = param_2" (identifier "puVar3") (= "=") (identifier "param_2")) (; ";")) (do_statement "do {\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    } while (param_1 + iVar6 != puVar15);" (do "do") (compound_statement "{\n      uVar11 = *puVar15;\n      puVar15 = puVar15 + 1;\n      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;\n      *puVar10 = *puVar3;\n      puVar10 = puVar10 + 1;\n      puVar3 = puVar3 + 1;\n    }" ({ "{") (expression_statement "uVar11 = *puVar15;" (assignment_expression "uVar11 = *puVar15" (identifier "uVar11") (= "=") (pointer_expression "*puVar15" (* "*") (identifier "puVar15"))) (; ";")) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + 1" (identifier "puVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;" (assignment_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11" (subscript_expression "puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)]" (identifier "puVar10") ([ "[") (binary_expression "(iVar13 - iVar6) - (iVar18 - iVar6)" (parenthesized_expression "(iVar13 - iVar6)" (( "(") (binary_expression "iVar13 - iVar6" (identifier "iVar13") (- "-") (identifier "iVar6")) () ")")) (- "-") (parenthesized_expression "(iVar18 - iVar6)" (( "(") (binary_expression "iVar18 - iVar6" (identifier "iVar18") (- "-") (identifier "iVar6")) () ")"))) (] "]")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "*puVar10 = *puVar3;" (assignment_expression "*puVar10 = *puVar3" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 + iVar6 != puVar15)" (( "(") (binary_expression "param_1 + iVar6 != puVar15" (binary_expression "param_1 + iVar6" (identifier "param_1") (+ "+") (identifier "iVar6")) (!= "!=") (identifier "puVar15")) () ")")) (; ";")) (if_statement "if (iVar17 < 1) {\n      *param_5 = 0;\n      uVar11 = 0;\n    }\n    else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" (if "if") (parenthesized_expression "(iVar17 < 1)" (( "(") (binary_expression "iVar17 < 1" (identifier "iVar17") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      *param_5 = 0;\n      uVar11 = 0;\n    }" ({ "{") (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" (else "else") (compound_statement "{\n      param_1 = param_1 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar17;\n      do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);\n      *param_5 = uVar11;\n      param_2 = param_2 + iVar13 + iVar6 + -2;\n      uVar11 = 0;\n      puVar10 = param_5 + iVar13 + iVar17;\n      do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);\n    }" ({ "{") (expression_statement "param_1 = param_1 + iVar13 + iVar6 + -2;" (assignment_expression "param_1 = param_1 + iVar13 + iVar6 + -2" (identifier "param_1") (= "=") (binary_expression "param_1 + iVar13 + iVar6 + -2" (binary_expression "param_1 + iVar13 + iVar6" (binary_expression "param_1 + iVar13" (identifier "param_1") (+ "+") (identifier "iVar13")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = param_5 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar17" (identifier "puVar10") (= "=") (binary_expression "param_5 + iVar17" (identifier "param_5") (+ "+") (identifier "iVar17"))) (; ";")) (do_statement "do {\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      } while (param_5 != puVar15 + -1);" (do "do") (compound_statement "{\n        puVar15 = puVar10;\n        uVar16 = *param_1;\n        param_1 = param_1 + -1;\n        uVar4 = uVar16 + *puVar15;\n        uVar14 = uVar11 + uVar4;\n        *puVar15 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15 + -1;\n      }" ({ "{") (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" (identifier "puVar15") (= "=") (identifier "puVar10")) (; ";")) (expression_statement "uVar16 = *param_1;" (assignment_expression "uVar16 = *param_1" (identifier "uVar16") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "param_1 = param_1 + -1;" (assignment_expression "param_1 = param_1 + -1" (identifier "param_1") (= "=") (binary_expression "param_1 + -1" (identifier "param_1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = uVar16 + *puVar15;" (assignment_expression "uVar4 = uVar16 + *puVar15" (identifier "uVar4") (= "=") (binary_expression "uVar16 + *puVar15" (identifier "uVar16") (+ "+") (pointer_expression "*puVar15" (* "*") (identifier "puVar15")))) (; ";")) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" (identifier "uVar14") (= "=") (binary_expression "uVar11 + uVar4" (identifier "uVar11") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "*puVar15 = uVar14;" (assignment_expression "*puVar15 = uVar14" (pointer_expression "*puVar15" (* "*") (identifier "puVar15")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (identifier "uVar11") (= "=") (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < uVar11)" (( "(") (binary_expression "uVar14 < uVar11" (identifier "uVar14") (< "<") (identifier "uVar11")) () ")"))) (+ "+") (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar15 + -1;" (assignment_expression "puVar10 = puVar15 + -1" (identifier "puVar10") (= "=") (binary_expression "puVar15 + -1" (identifier "puVar15") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_5 != puVar15 + -1)" (( "(") (binary_expression "param_5 != puVar15 + -1" (identifier "param_5") (!= "!=") (binary_expression "puVar15 + -1" (identifier "puVar15") (+ "+") (number_literal "-1"))) () ")")) (; ";")) (expression_statement "*param_5 = uVar11;" (assignment_expression "*param_5 = uVar11" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "param_2 = param_2 + iVar13 + iVar6 + -2;" (assignment_expression "param_2 = param_2 + iVar13 + iVar6 + -2" (identifier "param_2") (= "=") (binary_expression "param_2 + iVar13 + iVar6 + -2" (binary_expression "param_2 + iVar13 + iVar6" (binary_expression "param_2 + iVar13" (identifier "param_2") (+ "+") (identifier "iVar13")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = param_5 + iVar13 + iVar17;" (assignment_expression "puVar10 = param_5 + iVar13 + iVar17" (identifier "puVar10") (= "=") (binary_expression "param_5 + iVar13 + iVar17" (binary_expression "param_5 + iVar13" (identifier "param_5") (+ "+") (identifier "iVar13")) (+ "+") (identifier "iVar17"))) (; ";")) (do_statement "do {\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      } while (puVar15 + iVar17 != puVar3);" (do "do") (compound_statement "{\n        puVar3 = puVar10 + -1;\n        uVar16 = *param_2;\n        param_2 = param_2 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar3;\n      }" ({ "{") (expression_statement "puVar3 = puVar10 + -1;" (assignment_expression "puVar3 = puVar10 + -1" (identifier "puVar3") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = *param_2;" (assignment_expression "uVar16 = *param_2" (identifier "uVar16") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" (identifier "param_2") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" (identifier "uVar4") (= "=") (binary_expression "uVar16 + *puVar10" (identifier "uVar16") (+ "+") (pointer_expression "*puVar10" (* "*") (identifier "puVar10")))) (; ";")) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" (identifier "uVar14") (= "=") (binary_expression "uVar11 + uVar4" (identifier "uVar11") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (identifier "uVar11") (= "=") (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < uVar11)" (( "(") (binary_expression "uVar14 < uVar11" (identifier "uVar14") (< "<") (identifier "uVar11")) () ")"))) (+ "+") (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar3;" (assignment_expression "puVar10 = puVar3" (identifier "puVar10") (= "=") (identifier "puVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar15 + iVar17 != puVar3)" (( "(") (binary_expression "puVar15 + iVar17 != puVar3" (binary_expression "puVar15 + iVar17" (identifier "puVar15") (+ "+") (identifier "iVar17")) (!= "!=") (identifier "puVar3")) () ")")) (; ";")) (} "}")))) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar3 = param_5 + iVar13 * 4;" (assignment_expression "puVar3 = param_5 + iVar13 * 4" (identifier "puVar3") (= "=") (binary_expression "param_5 + iVar13 * 4" (identifier "param_5") (+ "+") (binary_expression "iVar13 * 4" (identifier "iVar13") (* "*") (number_literal "4")))) (; ";")) (expression_statement "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);" (call_expression "(*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" (parenthesized_expression "(*pcVar19)" (( "(") (pointer_expression "*pcVar19" (* "*") (identifier "pcVar19")) () ")")) (argument_list "(param_5,puVar7,param_5 + iVar13 * 2,iVar13)" (( "(") (identifier "param_5") (, ",") (identifier "puVar7") (, ",") (binary_expression "param_5 + iVar13 * 2" (identifier "param_5") (+ "+") (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2"))) (, ",") (identifier "iVar13") () ")"))) (; ";")) (expression_statement "param_5[3] = 0;" (assignment_expression "param_5[3] = 0" (subscript_expression "param_5[3]" (identifier "param_5") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_5[2] = 0;" (assignment_expression "param_5[2] = 0" (subscript_expression "param_5[2]" (identifier "param_5") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_5[1] = 0;" (assignment_expression "param_5[1] = 0" (subscript_expression "param_5[1]" (identifier "param_5") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_5 = 0;" (assignment_expression "*param_5 = 0" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = param_3;" (assignment_expression "puVar10 = param_3" (identifier "puVar10") (= "=") (identifier "param_3")) (; ";")) (expression_statement "puVar15 = param_5 + (iVar13 - iVar6) * 2;" (assignment_expression "puVar15 = param_5 + (iVar13 - iVar6) * 2" (identifier "puVar15") (= "=") (binary_expression "param_5 + (iVar13 - iVar6) * 2" (identifier "param_5") (+ "+") (binary_expression "(iVar13 - iVar6) * 2" (parenthesized_expression "(iVar13 - iVar6)" (( "(") (binary_expression "iVar13 - iVar6" (identifier "iVar13") (- "-") (identifier "iVar6")) () ")")) (* "*") (number_literal "2")))) (; ";")) (do_statement "do {\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    } while (param_3 + iVar6 * 2 != puVar10);" (do "do") (compound_statement "{\n      uVar11 = *puVar10;\n      puVar10 = puVar10 + 1;\n      *puVar15 = uVar11;\n      puVar15 = puVar15 + 1;\n    }" ({ "{") (expression_statement "uVar11 = *puVar10;" (assignment_expression "uVar11 = *puVar10" (identifier "uVar11") (= "=") (pointer_expression "*puVar10" (* "*") (identifier "puVar10"))) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar15 = uVar11;" (assignment_expression "*puVar15 = uVar11" (pointer_expression "*puVar15" (* "*") (identifier "puVar15")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + 1" (identifier "puVar15") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 + iVar6 * 2 != puVar10)" (( "(") (binary_expression "param_3 + iVar6 * 2 != puVar10" (binary_expression "param_3 + iVar6 * 2" (identifier "param_3") (+ "+") (binary_expression "iVar6 * 2" (identifier "iVar6") (* "*") (number_literal "2"))) (!= "!=") (identifier "puVar10")) () ")")) (; ";")) (if_statement "if (iVar18 + -3 < 0) {\n      uVar11 = 0;\n    }\n    else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" (if "if") (parenthesized_expression "(iVar18 + -3 < 0)" (( "(") (binary_expression "iVar18 + -3 < 0" (binary_expression "iVar18 + -3" (identifier "iVar18") (+ "+") (number_literal "-3")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      uVar11 = 0;\n    }" ({ "{") (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" (else "else") (compound_statement "{\n      uVar11 = 0;\n      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;\n      puVar10 = param_5 + iVar13 * 2 + -2;\n      do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);\n    }" ({ "{") (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;" (assignment_expression "puVar15 = param_3 + iVar6 * 2 + iVar18 + -3" (identifier "puVar15") (= "=") (binary_expression "param_3 + iVar6 * 2 + iVar18 + -3" (binary_expression "param_3 + iVar6 * 2 + iVar18" (binary_expression "param_3 + iVar6 * 2" (identifier "param_3") (+ "+") (binary_expression "iVar6 * 2" (identifier "iVar6") (* "*") (number_literal "2"))) (+ "+") (identifier "iVar18")) (+ "+") (number_literal "-3"))) (; ";")) (expression_statement "puVar10 = param_5 + iVar13 * 2 + -2;" (assignment_expression "puVar10 = param_5 + iVar13 * 2 + -2" (identifier "puVar10") (= "=") (binary_expression "param_5 + iVar13 * 2 + -2" (binary_expression "param_5 + iVar13 * 2" (identifier "param_5") (+ "+") (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2"))) (+ "+") (number_literal "-2"))) (; ";")) (do_statement "do {\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      } while (param_5 != puVar7);" (do "do") (compound_statement "{\n        puVar7 = puVar10 + -1;\n        uVar16 = *puVar15;\n        puVar15 = puVar15 + -1;\n        uVar4 = uVar16 + puVar10[1];\n        uVar14 = uVar11 + uVar4;\n        puVar10[1] = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar7;\n      }" ({ "{") (expression_statement "puVar7 = puVar10 + -1;" (assignment_expression "puVar7 = puVar10 + -1" (identifier "puVar7") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = *puVar15;" (assignment_expression "uVar16 = *puVar15" (identifier "uVar16") (= "=") (pointer_expression "*puVar15" (* "*") (identifier "puVar15"))) (; ";")) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + -1" (identifier "puVar15") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = uVar16 + puVar10[1];" (assignment_expression "uVar4 = uVar16 + puVar10[1]" (identifier "uVar4") (= "=") (binary_expression "uVar16 + puVar10[1]" (identifier "uVar16") (+ "+") (subscript_expression "puVar10[1]" (identifier "puVar10") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" (identifier "uVar14") (= "=") (binary_expression "uVar11 + uVar4" (identifier "uVar11") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "puVar10[1] = uVar14;" (assignment_expression "puVar10[1] = uVar14" (subscript_expression "puVar10[1]" (identifier "puVar10") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (identifier "uVar11") (= "=") (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < uVar11)" (( "(") (binary_expression "uVar14 < uVar11" (identifier "uVar14") (< "<") (identifier "uVar11")) () ")"))) (+ "+") (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" (identifier "puVar10") (= "=") (identifier "puVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_5 != puVar7)" (( "(") (binary_expression "param_5 != puVar7" (identifier "param_5") (!= "!=") (identifier "puVar7")) () ")")) (; ";")) (} "}")))) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + -1" (identifier "iVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_5[1] = uVar11;" (assignment_expression "param_5[1] = uVar11" (subscript_expression "param_5[1]" (identifier "param_5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (-1 < iVar18) {\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" (if "if") (parenthesized_expression "(-1 < iVar18)" (( "(") (binary_expression "-1 < iVar18" (number_literal "-1") (< "<") (identifier "iVar18")) () ")")) (compound_statement "{\n      iVar6 = 1;\n      puVar10 = param_5 + iVar13 * 4;\n      do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      param_5 = param_5 + iVar18 + iVar13 * 2;\n      uVar11 = 0;\n      puVar10 = param_3 + iVar18 + iVar6;\n      do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);\n      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;\n      iVar18 = iVar6 + -1;\n      if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }\n    }" ({ "{") (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" (identifier "iVar6") (= "=") (number_literal "1")) (; ";")) (expression_statement "puVar10 = param_5 + iVar13 * 4;" (assignment_expression "puVar10 = param_5 + iVar13 * 4" (identifier "puVar10") (= "=") (binary_expression "param_5 + iVar13 * 4" (identifier "param_5") (+ "+") (binary_expression "iVar13 * 4" (identifier "iVar13") (* "*") (number_literal "4")))) (; ";")) (do_statement "do {\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      } while (param_5 + iVar13 * 2 != puVar15);" (do "do") (compound_statement "{\n        uVar14 = puVar10[-1];\n        puVar15 = puVar10 + -1;\n        uVar16 = puVar10[iVar13 * -2 + -1];\n        uVar11 = uVar14 + iVar6;\n        uVar4 = ~uVar16 + uVar11;\n        *puVar15 = uVar4;\n        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);\n        puVar10 = puVar15;\n      }" ({ "{") (expression_statement "uVar14 = puVar10[-1];" (assignment_expression "uVar14 = puVar10[-1]" (identifier "uVar14") (= "=") (subscript_expression "puVar10[-1]" (identifier "puVar10") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" (identifier "puVar15") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = puVar10[iVar13 * -2 + -1];" (assignment_expression "uVar16 = puVar10[iVar13 * -2 + -1]" (identifier "uVar16") (= "=") (subscript_expression "puVar10[iVar13 * -2 + -1]" (identifier "puVar10") ([ "[") (binary_expression "iVar13 * -2 + -1" (binary_expression "iVar13 * -2" (identifier "iVar13") (* "*") (number_literal "-2")) (+ "+") (number_literal "-1")) (] "]"))) (; ";")) (expression_statement "uVar11 = uVar14 + iVar6;" (assignment_expression "uVar11 = uVar14 + iVar6" (identifier "uVar11") (= "=") (binary_expression "uVar14 + iVar6" (identifier "uVar14") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "uVar4 = ~uVar16 + uVar11;" (assignment_expression "uVar4 = ~uVar16 + uVar11" (identifier "uVar4") (= "=") (binary_expression "~uVar16 + uVar11" (unary_expression "~uVar16" (~ "~") (identifier "uVar16")) (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" (* "*") (identifier "puVar15")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" (identifier "iVar6") (= "=") (binary_expression "(uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < ~uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < ~uVar16)" (( "(") (binary_expression "uVar4 < ~uVar16" (identifier "uVar4") (< "<") (unary_expression "~uVar16" (~ "~") (identifier "uVar16"))) () ")"))) (+ "+") (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar11 < uVar14)" (( "(") (binary_expression "uVar11 < uVar14" (identifier "uVar11") (< "<") (identifier "uVar14")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" (identifier "puVar10") (= "=") (identifier "puVar15")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_5 + iVar13 * 2 != puVar15)" (( "(") (binary_expression "param_5 + iVar13 * 2 != puVar15" (binary_expression "param_5 + iVar13 * 2" (identifier "param_5") (+ "+") (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2"))) (!= "!=") (identifier "puVar15")) () ")")) (; ";")) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" (identifier "iVar6") (= "=") (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" (( "(") (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2")) (- "-") (identifier "iVar17")) () ")")) (+ "+") (binary_expression "iVar13 * -2" (identifier "iVar13") (* "*") (number_literal "-2")))) (; ";")) (expression_statement "param_5 = param_5 + iVar18 + iVar13 * 2;" (assignment_expression "param_5 = param_5 + iVar18 + iVar13 * 2" (identifier "param_5") (= "=") (binary_expression "param_5 + iVar18 + iVar13 * 2" (binary_expression "param_5 + iVar18" (identifier "param_5") (+ "+") (identifier "iVar18")) (+ "+") (binary_expression "iVar13 * 2" (identifier "iVar13") (* "*") (number_literal "2")))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = param_3 + iVar18 + iVar6;" (assignment_expression "puVar10 = param_3 + iVar18 + iVar6" (identifier "puVar10") (= "=") (binary_expression "param_3 + iVar18 + iVar6" (binary_expression "param_3 + iVar18" (identifier "param_3") (+ "+") (identifier "iVar18")) (+ "+") (identifier "iVar6"))) (; ";")) (do_statement "do {\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      } while (param_3 + iVar6 + -1 != puVar15);" (do "do") (compound_statement "{\n        puVar15 = puVar10 + -1;\n        uVar16 = *param_5;\n        param_5 = param_5 + -1;\n        uVar4 = uVar16 + *puVar10;\n        uVar14 = uVar11 + uVar4;\n        *puVar10 = uVar14;\n        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);\n        puVar10 = puVar15;\n      }" ({ "{") (expression_statement "puVar15 = puVar10 + -1;" (assignment_expression "puVar15 = puVar10 + -1" (identifier "puVar15") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = *param_5;" (assignment_expression "uVar16 = *param_5" (identifier "uVar16") (= "=") (pointer_expression "*param_5" (* "*") (identifier "param_5"))) (; ";")) (expression_statement "param_5 = param_5 + -1;" (assignment_expression "param_5 = param_5 + -1" (identifier "param_5") (= "=") (binary_expression "param_5 + -1" (identifier "param_5") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = uVar16 + *puVar10;" (assignment_expression "uVar4 = uVar16 + *puVar10" (identifier "uVar4") (= "=") (binary_expression "uVar16 + *puVar10" (identifier "uVar16") (+ "+") (pointer_expression "*puVar10" (* "*") (identifier "puVar10")))) (; ";")) (expression_statement "uVar14 = uVar11 + uVar4;" (assignment_expression "uVar14 = uVar11 + uVar4" (identifier "uVar14") (= "=") (binary_expression "uVar11 + uVar4" (identifier "uVar11") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "*puVar10 = uVar14;" (assignment_expression "*puVar10 = uVar14" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);" (assignment_expression "uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (identifier "uVar11") (= "=") (binary_expression "(uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16)" (call_expression "(uint)(uVar14 < uVar11)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < uVar11)" (( "(") (binary_expression "uVar14 < uVar11" (identifier "uVar14") (< "<") (identifier "uVar11")) () ")"))) (+ "+") (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar15;" (assignment_expression "puVar10 = puVar15" (identifier "puVar10") (= "=") (identifier "puVar15")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 + iVar6 + -1 != puVar15)" (( "(") (binary_expression "param_3 + iVar6 + -1 != puVar15" (binary_expression "param_3 + iVar6 + -1" (binary_expression "param_3 + iVar6" (identifier "param_3") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-1")) (!= "!=") (identifier "puVar15")) () ")")) (; ";")) (expression_statement "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;" (assignment_expression "iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2" (identifier "iVar6") (= "=") (binary_expression "(param_4 * 2 - iVar17) + iVar13 * -2" (parenthesized_expression "(param_4 * 2 - iVar17)" (( "(") (binary_expression "param_4 * 2 - iVar17" (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2")) (- "-") (identifier "iVar17")) () ")")) (+ "+") (binary_expression "iVar13 * -2" (identifier "iVar13") (* "*") (number_literal "-2")))) (; ";")) (expression_statement "iVar18 = iVar6 + -1;" (assignment_expression "iVar18 = iVar6 + -1" (identifier "iVar18") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (uVar11 != 0) {\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" (if "if") (parenthesized_expression "(uVar11 != 0)" (( "(") (binary_expression "uVar11 != 0" (identifier "uVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }\n        puVar10 = (uint *)&DAT_00000135;\n        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;\n        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;\n        puVar8 = PTR_DAT_000ad2c8 + 0x4254;\n        (*(code *)PTR___assert_fail_000adb00)();\n        if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }\n        iVar18 = (int)puVar12 >> 1;\n        puVar15 = puVar3 + (int)puVar12 * 2;\n        iVar6 = (int)puVar12 - iVar18;\n        FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);\n        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);\n        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);\n        puVar15 = puVar10 + iVar18;\n        if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }\n        iVar13 = 0;\n        puVar5 = puVar3 + iVar18 + -1;\n        puVar7 = puVar5;\n        do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);\n        iVar13 = 0;\n        do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);\n        return;\n      }" ({ "{") (if_statement "if (-1 < iVar18) {\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" (if "if") (parenthesized_expression "(-1 < iVar18)" (( "(") (binary_expression "-1 < iVar18" (number_literal "-1") (< "<") (identifier "iVar18")) () ")")) (compound_statement "{\n          param_3 = param_3 + iVar6;\n          do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);\n        }" ({ "{") (expression_statement "param_3 = param_3 + iVar6;" (assignment_expression "param_3 = param_3 + iVar6" (identifier "param_3") (= "=") (binary_expression "param_3 + iVar6" (identifier "param_3") (+ "+") (identifier "iVar6"))) (; ";")) (do_statement "do {\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          } while (iVar18 != -1);" (do "do") (compound_statement "{\n            uVar11 = param_3[-1];\n            iVar18 = iVar18 + -1;\n            uVar4 = uVar11 + 1;\n            param_3[-1] = uVar4;\n            if (uVar11 <= uVar4) {\n              return;\n            }\n            param_3 = param_3 + -1;\n          }" ({ "{") (expression_statement "uVar11 = param_3[-1];" (assignment_expression "uVar11 = param_3[-1]" (identifier "uVar11") (= "=") (subscript_expression "param_3[-1]" (identifier "param_3") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + -1" (identifier "iVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = uVar11 + 1;" (assignment_expression "uVar4 = uVar11 + 1" (identifier "uVar4") (= "=") (binary_expression "uVar11 + 1" (identifier "uVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_3[-1] = uVar4;" (assignment_expression "param_3[-1] = uVar4" (subscript_expression "param_3[-1]" (identifier "param_3") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar11 <= uVar4) {\n              return;\n            }" (if "if") (parenthesized_expression "(uVar11 <= uVar4)" (( "(") (binary_expression "uVar11 <= uVar4" (identifier "uVar11") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n              return;\n            }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" (identifier "param_3") (= "=") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar18 != -1)" (( "(") (binary_expression "iVar18 != -1" (identifier "iVar18") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (} "}"))) (expression_statement "puVar10 = (uint *)&DAT_00000135;" (assignment_expression "puVar10 = (uint *)&DAT_00000135" (identifier "puVar10") (= "=") (cast_expression "(uint *)&DAT_00000135" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_00000135" (& "&") (identifier "DAT_00000135")))) (; ";")) (expression_statement "puVar12 = PTR_DAT_000ad2c8 + 0x43c4;" (assignment_expression "puVar12 = PTR_DAT_000ad2c8 + 0x43c4" (identifier "puVar12") (= "=") (binary_expression "PTR_DAT_000ad2c8 + 0x43c4" (identifier "PTR_DAT_000ad2c8") (+ "+") (number_literal "0x43c4"))) (; ";")) (expression_statement "puVar9 = PTR_DAT_000ad2c8 + 0x41d0;" (assignment_expression "puVar9 = PTR_DAT_000ad2c8 + 0x41d0" (identifier "puVar9") (= "=") (binary_expression "PTR_DAT_000ad2c8 + 0x41d0" (identifier "PTR_DAT_000ad2c8") (+ "+") (number_literal "0x41d0"))) (; ";")) (expression_statement "puVar8 = PTR_DAT_000ad2c8 + 0x4254;" (assignment_expression "puVar8 = PTR_DAT_000ad2c8 + 0x4254" (identifier "puVar8") (= "=") (binary_expression "PTR_DAT_000ad2c8 + 0x4254" (identifier "PTR_DAT_000ad2c8") (+ "+") (number_literal "0x4254"))) (; ";")) (expression_statement "(*(code *)PTR___assert_fail_000adb00)();" (call_expression "(*(code *)PTR___assert_fail_000adb00)()" (parenthesized_expression "(*(code *)PTR___assert_fail_000adb00)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_000adb00" (* "*") (cast_expression "(code *)PTR___assert_fail_000adb00" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_000adb00"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if ((int)puVar12 < 0x33) {\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" (if "if") (parenthesized_expression "((int)puVar12 < 0x33)" (( "(") (binary_expression "(int)puVar12 < 0x33" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (< "<") (number_literal "0x33")) () ")")) (compound_statement "{\n          if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }\n          puVar12 = puVar8 + iVar6;\n          puVar15 = (uint *)((int)puVar10 + iVar6);\n          if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }\n          return;\n        }" ({ "{") (if_statement "if ((int)puVar12 < 1) {\n            iVar6 = (int)puVar12 << 2;\n          }\n          else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" (if "if") (parenthesized_expression "((int)puVar12 < 1)" (( "(") (binary_expression "(int)puVar12 < 1" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n            iVar6 = (int)puVar12 << 2;\n          }" ({ "{") (expression_statement "iVar6 = (int)puVar12 << 2;" (assignment_expression "iVar6 = (int)puVar12 << 2" (identifier "iVar6") (= "=") (binary_expression "(int)puVar12 << 2" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (<< "<<") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else {\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" (else "else") (compound_statement "{\n            iVar6 = (int)puVar12 * 4;\n            puVar15 = puVar10;\n            do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);\n          }" ({ "{") (expression_statement "iVar6 = (int)puVar12 * 4;" (assignment_expression "iVar6 = (int)puVar12 * 4" (identifier "iVar6") (= "=") (binary_expression "(int)puVar12 * 4" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "puVar15 = puVar10;" (assignment_expression "puVar15 = puVar10" (identifier "puVar15") (= "=") (identifier "puVar10")) (; ";")) (do_statement "do {\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            } while (puVar10 + (int)puVar12 != puVar15);" (do "do") (compound_statement "{\n              *puVar15 = 0;\n              puVar15 = puVar15 + 1;\n            }" ({ "{") (expression_statement "*puVar15 = 0;" (assignment_expression "*puVar15 = 0" (pointer_expression "*puVar15" (* "*") (identifier "puVar15")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar15 = puVar15 + 1;" (assignment_expression "puVar15 = puVar15 + 1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + 1" (identifier "puVar15") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar10 + (int)puVar12 != puVar15)" (( "(") (binary_expression "puVar10 + (int)puVar12 != puVar15" (binary_expression "puVar10 + (int)puVar12" (identifier "puVar10") (+ "+") (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12"))) (!= "!=") (identifier "puVar15")) () ")")) (; ";")) (} "}")))) (expression_statement "puVar12 = puVar8 + iVar6;" (assignment_expression "puVar12 = puVar8 + iVar6" (identifier "puVar12") (= "=") (binary_expression "puVar8 + iVar6" (identifier "puVar8") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "puVar15 = (uint *)((int)puVar10 + iVar6);" (assignment_expression "puVar15 = (uint *)((int)puVar10 + iVar6)" (identifier "puVar15") (= "=") (cast_expression "(uint *)((int)puVar10 + iVar6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar10 + iVar6)" (( "(") (binary_expression "(int)puVar10 + iVar6" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (+ "+") (identifier "iVar6")) () ")")))) (; ";")) (if_statement "if (puVar8 < puVar12) {\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" (if "if") (parenthesized_expression "(puVar8 < puVar12)" (( "(") (binary_expression "puVar8 < puVar12" (identifier "puVar8") (< "<") (identifier "puVar12")) () ")")) (compound_statement "{\n            do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);\n          }" ({ "{") (do_statement "do {\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            } while (puVar8 < puVar12);" (do "do") (compound_statement "{\n              uVar11 = 0;\n              puVar3 = (uint *)(puVar9 + iVar6 + -4);\n              puVar7 = puVar15;\n              while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }\n              puVar12 = puVar12 + -4;\n              puVar15 = puVar15 + -1;\n            }" ({ "{") (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar3 = (uint *)(puVar9 + iVar6 + -4);" (assignment_expression "puVar3 = (uint *)(puVar9 + iVar6 + -4)" (identifier "puVar3") (= "=") (cast_expression "(uint *)(puVar9 + iVar6 + -4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + iVar6 + -4)" (( "(") (binary_expression "puVar9 + iVar6 + -4" (binary_expression "puVar9 + iVar6" (identifier "puVar9") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-4")) () ")")))) (; ";")) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" (identifier "puVar7") (= "=") (identifier "puVar15")) (; ";")) (while_statement "while (puVar10 < puVar7) {\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" (while "while") (parenthesized_expression "(puVar10 < puVar7)" (( "(") (binary_expression "puVar10 < puVar7" (identifier "puVar10") (< "<") (identifier "puVar7")) () ")")) (compound_statement "{\n                puVar5 = puVar7 + -1;\n                uVar4 = *puVar3;\n                puVar7 = puVar7 + -1;\n                puVar3 = puVar3 + -1;\n                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;\n                *puVar7 = (uint)lVar2;\n                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);\n              }" ({ "{") (expression_statement "puVar5 = puVar7 + -1;" (assignment_expression "puVar5 = puVar7 + -1" (identifier "puVar5") (= "=") (binary_expression "puVar7 + -1" (identifier "puVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = *puVar3;" (assignment_expression "uVar4 = *puVar3" (identifier "uVar4") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + -1" (identifier "puVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + -1" (identifier "puVar3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11;" (assignment_expression "lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" (identifier "lVar2") (= "=") (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +\n                        (ulonglong)uVar11" (binary_expression "(ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar5")) (+ "+") (binary_expression "(ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4)" (binary_expression "(ulonglong)uVar4 * (ulonglong)" (cast_expression "(ulonglong)uVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar4")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (cast_expression "(uint *)(puVar12 + -4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar12 + -4)" (( "(") (binary_expression "puVar12 + -4" (identifier "puVar12") (+ "+") (number_literal "-4")) () ")"))))) (+ "+") (cast_expression "(ulonglong)uVar11" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar11")))) (; ";")) (expression_statement "*puVar7 = (uint)lVar2;" (assignment_expression "*puVar7 = (uint)lVar2" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) (; ";")) (expression_statement "uVar11 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "uVar11 = (uint)((ulonglong)lVar2 >> 0x20)" (identifier "uVar11") (= "=") (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (} "}"))) (expression_statement "puVar12 = puVar12 + -4;" (assignment_expression "puVar12 = puVar12 + -4" (identifier "puVar12") (= "=") (binary_expression "puVar12 + -4" (identifier "puVar12") (+ "+") (number_literal "-4"))) (; ";")) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + -1" (identifier "puVar15") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar8 < puVar12)" (( "(") (binary_expression "puVar8 < puVar12" (identifier "puVar8") (< "<") (identifier "puVar12")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar18 = (int)puVar12 >> 1;" (assignment_expression "iVar18 = (int)puVar12 >> 1" (identifier "iVar18") (= "=") (binary_expression "(int)puVar12 >> 1" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "puVar15 = puVar3 + (int)puVar12 * 2;" (assignment_expression "puVar15 = puVar3 + (int)puVar12 * 2" (identifier "puVar15") (= "=") (binary_expression "puVar3 + (int)puVar12 * 2" (identifier "puVar3") (+ "+") (binary_expression "(int)puVar12 * 2" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (* "*") (number_literal "2")))) (; ";")) (expression_statement "iVar6 = (int)puVar12 - iVar18;" (assignment_expression "iVar6 = (int)puVar12 - iVar18" (identifier "iVar6") (= "=") (binary_expression "(int)puVar12 - iVar18" (cast_expression "(int)puVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar12")) (- "-") (identifier "iVar18"))) (; ";")) (expression_statement "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);" (call_expression "FUN_0004ef90(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" (identifier "FUN_0004ef90") (argument_list "(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15)" (( "(") (binary_expression "puVar8 + iVar18 * 4" (identifier "puVar8") (+ "+") (binary_expression "iVar18 * 4" (identifier "iVar18") (* "*") (number_literal "4"))) (, ",") (binary_expression "puVar9 + iVar18 * 4" (identifier "puVar9") (+ "+") (binary_expression "iVar18 * 4" (identifier "iVar18") (* "*") (number_literal "4"))) (, ",") (binary_expression "puVar3 + iVar18 * 2" (identifier "puVar3") (+ "+") (binary_expression "iVar18 * 2" (identifier "iVar18") (* "*") (number_literal "2"))) (, ",") (identifier "iVar6") (, ",") (identifier "puVar15") () ")"))) (; ";")) (expression_statement "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" (identifier "FUN_0004f464") (argument_list "(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15)" (( "(") (identifier "puVar8") (, ",") (binary_expression "puVar9 + iVar6 * 4" (identifier "puVar9") (+ "+") (binary_expression "iVar6 * 4" (identifier "iVar6") (* "*") (number_literal "4"))) (, ",") (binary_expression "puVar3 + iVar18" (identifier "puVar3") (+ "+") (identifier "iVar18")) (, ",") (identifier "iVar18") (, ",") (identifier "puVar15") () ")"))) (; ";")) (expression_statement "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);" (call_expression "FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" (identifier "FUN_0004f464") (argument_list "(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15)" (( "(") (binary_expression "puVar8 + iVar6 * 4" (identifier "puVar8") (+ "+") (binary_expression "iVar6 * 4" (identifier "iVar6") (* "*") (number_literal "4"))) (, ",") (identifier "puVar9") (, ",") (identifier "puVar3") (, ",") (identifier "iVar18") (, ",") (identifier "puVar15") () ")"))) (; ";")) (expression_statement "puVar15 = puVar10 + iVar18;" (assignment_expression "puVar15 = puVar10 + iVar18" (identifier "puVar15") (= "=") (binary_expression "puVar10 + iVar18" (identifier "puVar10") (+ "+") (identifier "iVar18"))) (; ";")) (if_statement "if (0 < iVar6) {\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n          iVar13 = iVar18 * 2 + iVar6;\n          puVar5 = puVar3 + iVar13;\n          puVar7 = puVar15;\n          do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);\n        }" ({ "{") (expression_statement "iVar13 = iVar18 * 2 + iVar6;" (assignment_expression "iVar13 = iVar18 * 2 + iVar6" (identifier "iVar13") (= "=") (binary_expression "iVar18 * 2 + iVar6" (binary_expression "iVar18 * 2" (identifier "iVar18") (* "*") (number_literal "2")) (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "puVar5 = puVar3 + iVar13;" (assignment_expression "puVar5 = puVar3 + iVar13" (identifier "puVar5") (= "=") (binary_expression "puVar3 + iVar13" (identifier "puVar3") (+ "+") (identifier "iVar13"))) (; ";")) (expression_statement "puVar7 = puVar15;" (assignment_expression "puVar7 = puVar15" (identifier "puVar7") (= "=") (identifier "puVar15")) (; ";")) (do_statement "do {\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          } while (puVar3 + iVar6 + iVar13 != puVar5);" (do "do") (compound_statement "{\n            uVar11 = *puVar5;\n            puVar5 = puVar5 + 1;\n            *puVar7 = uVar11;\n            puVar7 = puVar7 + 1;\n          }" ({ "{") (expression_statement "uVar11 = *puVar5;" (assignment_expression "uVar11 = *puVar5" (identifier "uVar11") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar7 = uVar11;" (assignment_expression "*puVar7 = uVar11" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar3 + iVar6 + iVar13 != puVar5)" (( "(") (binary_expression "puVar3 + iVar6 + iVar13 != puVar5" (binary_expression "puVar3 + iVar6 + iVar13" (binary_expression "puVar3 + iVar6" (identifier "puVar3") (+ "+") (identifier "iVar6")) (+ "+") (identifier "iVar13")) (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" (identifier "iVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5 = puVar3 + iVar18 + -1;" (assignment_expression "puVar5 = puVar3 + iVar18 + -1" (identifier "puVar5") (= "=") (binary_expression "puVar3 + iVar18 + -1" (binary_expression "puVar3 + iVar18" (identifier "puVar3") (+ "+") (identifier "iVar18")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar7 = puVar5;" (assignment_expression "puVar7 = puVar5" (identifier "puVar7") (= "=") (identifier "puVar5")) (; ";")) (do_statement "do {\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        } while (bVar1);" (do "do") (compound_statement "{\n          uVar14 = *puVar7;\n          uVar16 = puVar7[iVar18];\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar7 = uVar4;\n          bVar1 = puVar3 != puVar7;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n          puVar7 = puVar7 + -1;\n        }" ({ "{") (expression_statement "uVar14 = *puVar7;" (assignment_expression "uVar14 = *puVar7" (identifier "uVar14") (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (expression_statement "uVar16 = puVar7[iVar18];" (assignment_expression "uVar16 = puVar7[iVar18]" (identifier "uVar16") (= "=") (subscript_expression "puVar7[iVar18]" (identifier "puVar7") ([ "[") (identifier "iVar18") (] "]"))) (; ";")) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" (identifier "uVar11") (= "=") (binary_expression "uVar14 + iVar13" (identifier "uVar14") (+ "+") (identifier "iVar13"))) (; ";")) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" (identifier "uVar4") (= "=") (binary_expression "uVar16 + uVar11" (identifier "uVar16") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "bVar1 = puVar3 != puVar7;" (assignment_expression "bVar1 = puVar3 != puVar7" (identifier "bVar1") (= "=") (binary_expression "puVar3 != puVar7" (identifier "puVar3") (!= "!=") (identifier "puVar7"))) (; ";")) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (identifier "iVar13") (= "=") (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))) (+ "+") (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar11 < uVar14)" (( "(") (binary_expression "uVar11 < uVar14" (identifier "uVar11") (< "<") (identifier "uVar14")) () ")"))))) (; ";")) (expression_statement "puVar7 = puVar7 + -1;" (assignment_expression "puVar7 = puVar7 + -1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + -1" (identifier "puVar7") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (; ";")) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" (identifier "iVar13") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        } while (puVar10 != puVar15);" (do "do") (compound_statement "{\n          puVar3 = puVar5 + iVar18 + iVar6;\n          uVar14 = *puVar5;\n          puVar15 = puVar15 + -1;\n          puVar5 = puVar5 + -1;\n          uVar16 = *puVar3;\n          uVar11 = uVar14 + iVar13;\n          uVar4 = uVar16 + uVar11;\n          *puVar15 = uVar4;\n          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);\n        }" ({ "{") (expression_statement "puVar3 = puVar5 + iVar18 + iVar6;" (assignment_expression "puVar3 = puVar5 + iVar18 + iVar6" (identifier "puVar3") (= "=") (binary_expression "puVar5 + iVar18 + iVar6" (binary_expression "puVar5 + iVar18" (identifier "puVar5") (+ "+") (identifier "iVar18")) (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "uVar14 = *puVar5;" (assignment_expression "uVar14 = *puVar5" (identifier "uVar14") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" (identifier "puVar15") (= "=") (binary_expression "puVar15 + -1" (identifier "puVar15") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + -1" (identifier "puVar5") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = *puVar3;" (assignment_expression "uVar16 = *puVar3" (identifier "uVar16") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "uVar11 = uVar14 + iVar13;" (assignment_expression "uVar11 = uVar14 + iVar13" (identifier "uVar11") (= "=") (binary_expression "uVar14 + iVar13" (identifier "uVar14") (+ "+") (identifier "iVar13"))) (; ";")) (expression_statement "uVar4 = uVar16 + uVar11;" (assignment_expression "uVar4 = uVar16 + uVar11" (identifier "uVar4") (= "=") (binary_expression "uVar16 + uVar11" (identifier "uVar16") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "*puVar15 = uVar4;" (assignment_expression "*puVar15 = uVar4" (pointer_expression "*puVar15" (* "*") (identifier "puVar15")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);" (assignment_expression "iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (identifier "iVar13") (= "=") (binary_expression "(uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14)" (call_expression "(uint)(uVar4 < uVar16)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar4 < uVar16)" (( "(") (binary_expression "uVar4 < uVar16" (identifier "uVar4") (< "<") (identifier "uVar16")) () ")"))) (+ "+") (call_expression "(uint)(uVar11 < uVar14)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar11 < uVar14)" (( "(") (binary_expression "uVar11 < uVar14" (identifier "uVar11") (< "<") (identifier "uVar14")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar10 != puVar15)" (( "(") (binary_expression "puVar10 != puVar15" (identifier "puVar10") (!= "!=") (identifier "puVar15")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *var_4,type_1 *var_5,type_1 *var_3,int var_1,type_1 *var_16)

{
  type_2 *var_25;
  bool bVar2;
  type_3 lVar3;
  type_2 var_19;
  type_2 *var_22;
  int var_13;
  type_1 *var_23;
  type_2 *var_21;
  type_1 *var_2;
  type_1 *var_7;
  type_2 *var_6;
  type_2 var_9;
  type_4 *puVar13;
  int var_15;
  type_1 *var_8;
  type_2 var_20;
  type_2 *var_11;
  type_1 BVar18;
  type_2 var_18;
  int var_14;
  int var_17;
  type_5 *pcVar22;
  
  if (var_1 < 0x33) {
    if (0 < var_1 << 1) {
      var_2 = var_3;
      do {
        *var_2 = 0;
        var_2 = var_2 + 1;
      } while (var_3 + var_1 * 2 != var_2);
    }
    var_2 = var_4 + var_1;
    var_6 = var_3 + var_1 * 2;
    if (var_4 < var_2) {
      var_7 = var_5 + var_1;
      do {
        var_6 = var_6 + -1;
        var_9 = 0;
        var_11 = var_6;
        var_8 = var_7;
        if (var_5 < var_7) {
          do {
            var_8 = var_8 + -1;
            var_9 = *var_11 + var_9;
            lVar3 = (type_6)var_10(var_9 < *var_11,var_9) +
                    (type_6)*var_8 * (type_6)var_2[-1];
            var_9 = (type_2)((type_6)lVar3 >> 0x20);
            *var_11 = (type_2)lVar3;
            var_11 = var_11 + -1;
          } while (var_5 < var_8);
          var_11 = var_6 + ~(~(type_2)var_5 + (int)var_7 >> 2);
        }
        var_2 = var_2 + -1;
        *var_11 = var_9;
      } while (var_4 < var_2);
    }
  }
  else {
    var_13 = var_1 >> 1;
    pcVar22 = (type_5 *)(var_12 + -0x1070);
    var_14 = var_1 - var_13;
    function_1(var_4,var_5,var_3,var_13,var_16);
    var_15 = var_14 + 1;
    (*pcVar22)(var_4 + var_13,var_5 + var_13,var_3 + var_13 * 2,var_14,var_16);
    var_17 = var_15 * 2;
    var_6 = var_16 + var_15;
    var_16[var_14 + 2] = 0;
    *var_6 = 0;
    var_16[1] = 0;
    *var_16 = 0;
    var_2 = var_16 + (var_17 - var_13);
    var_7 = var_4;
    var_8 = var_5;
    do {
      BVar18 = *var_7;
      var_7 = var_7 + 1;
      var_2[(var_15 - var_13) - (var_17 - var_13)] = BVar18;
      *var_2 = *var_8;
      var_2 = var_2 + 1;
      var_8 = var_8 + 1;
    } while (var_4 + var_13 != var_7);
    if (var_14 < 1) {
      *var_16 = 0;
      var_9 = 0;
    }
    else {
      var_2 = var_4 + var_15 + var_13 + -2;
      var_9 = 0;
      var_11 = var_16 + var_14;
      do {
        var_21 = var_11;
        var_18 = *var_2;
        var_2 = var_2 + -1;
        var_19 = var_18 + *var_21;
        var_20 = var_9 + var_19;
        *var_21 = var_20;
        var_9 = (type_2)(var_20 < var_9) + (type_2)(var_19 < var_18);
        var_11 = var_21 + -1;
      } while (var_16 != var_21 + -1);
      *var_16 = var_9;
      var_2 = var_5 + var_15 + var_13 + -2;
      var_9 = 0;
      var_11 = var_16 + var_15 + var_14;
      do {
        var_22 = var_11 + -1;
        var_18 = *var_2;
        var_2 = var_2 + -1;
        var_19 = var_18 + *var_11;
        var_20 = var_9 + var_19;
        *var_11 = var_20;
        var_9 = (type_2)(var_20 < var_9) + (type_2)(var_19 < var_18);
        var_11 = var_22;
      } while (var_21 + var_14 != var_22);
    }
    *var_6 = var_9;
    var_8 = var_16 + var_15 * 4;
    (*pcVar22)(var_16,var_6,var_16 + var_15 * 2,var_15);
    var_16[3] = 0;
    var_16[2] = 0;
    var_16[1] = 0;
    *var_16 = 0;
    var_2 = var_3;
    var_7 = var_16 + (var_15 - var_13) * 2;
    do {
      BVar18 = *var_2;
      var_2 = var_2 + 1;
      *var_7 = BVar18;
      var_7 = var_7 + 1;
    } while (var_3 + var_13 * 2 != var_2);
    if (var_17 + -3 < 0) {
      var_9 = 0;
    }
    else {
      var_9 = 0;
      var_7 = var_3 + var_13 * 2 + var_17 + -3;
      var_2 = var_16 + var_15 * 2 + -2;
      do {
        var_23 = var_2 + -1;
        var_18 = *var_7;
        var_7 = var_7 + -1;
        var_19 = var_18 + var_2[1];
        var_20 = var_9 + var_19;
        var_2[1] = var_20;
        var_9 = (type_2)(var_20 < var_9) + (type_2)(var_19 < var_18);
        var_2 = var_23;
      } while (var_16 != var_23);
    }
    var_17 = var_17 + -1;
    var_16[1] = var_9;
    if (-1 < var_17) {
      var_13 = 1;
      var_6 = var_16 + var_15 * 4;
      do {
        var_20 = var_6[-1];
        var_11 = var_6 + -1;
        var_18 = var_6[var_15 * -2 + -1];
        var_9 = var_20 + var_13;
        var_19 = ~var_18 + var_9;
        *var_11 = var_19;
        var_13 = (type_2)(var_19 < ~var_18) + (type_2)(var_9 < var_20);
        var_6 = var_11;
      } while (var_16 + var_15 * 2 != var_11);
      var_13 = (var_1 * 2 - var_14) + var_15 * -2;
      var_11 = var_16 + var_17 + var_15 * 2;
      var_9 = 0;
      var_6 = var_3 + var_17 + var_13;
      do {
        var_21 = var_6 + -1;
        var_18 = *var_11;
        var_11 = var_11 + -1;
        var_19 = var_18 + *var_6;
        var_20 = var_9 + var_19;
        *var_6 = var_20;
        var_9 = (type_2)(var_20 < var_9) + (type_2)(var_19 < var_18);
        var_6 = var_21;
      } while (var_3 + var_13 + -1 != var_21);
      var_13 = (var_1 * 2 - var_14) + var_15 * -2;
      var_17 = var_13 + -1;
      if (var_9 != 0) {
        if (-1 < var_17) {
          var_2 = var_3 + var_13;
          do {
            var_9 = var_2[-1];
            var_17 = var_17 + -1;
            var_19 = var_9 + 1;
            var_2[-1] = var_19;
            if (var_9 <= var_19) {
              return;
            }
            var_2 = var_2 + -1;
          } while (var_17 != -1);
        }
        var_6 = (type_2 *)&DAT_00000135;
        puVar13 = var_24 + 0x43c4;
        var_7 = (type_1 *)(var_24 + 0x41d0);
        var_2 = (type_1 *)(var_24 + 0x4254);
        (*(type_5 *)PTR___assert_fail_000adb00)();
        if ((int)puVar13 < 0x33) {
          if ((int)puVar13 < 1) {
            var_13 = (int)puVar13 << 2;
          }
          else {
            var_13 = (int)puVar13 * 4;
            var_11 = var_6;
            do {
              *var_11 = 0;
              var_11 = var_11 + 1;
            } while (var_6 + (int)puVar13 != var_11);
          }
          var_8 = (type_1 *)((int)var_2 + var_13);
          var_11 = (type_2 *)((int)var_6 + var_13);
          if (var_2 < var_8) {
            do {
              var_9 = 0;
              var_21 = (type_2 *)((int)var_7 + var_13 + -4);
              var_22 = var_11;
              while (var_6 < var_22) {
                var_25 = var_22 + -1;
                var_19 = *var_21;
                var_22 = var_22 + -1;
                var_21 = var_21 + -1;
                lVar3 = (type_6)*var_25 + (type_6)var_19 * (type_6)var_8[-1] +
                        (type_6)var_9;
                *var_22 = (type_2)lVar3;
                var_9 = (type_2)((type_6)lVar3 >> 0x20);
              }
              var_8 = var_8 + -1;
              var_11 = var_11 + -1;
            } while (var_2 < var_8);
          }
          return;
        }
        var_17 = (int)puVar13 >> 1;
        var_23 = var_8 + (int)puVar13 * 2;
        var_13 = (int)puVar13 - var_17;
        function_1(var_2 + var_17,var_7 + var_17,var_8 + var_17 * 2,var_13,var_23);
        var_26(var_2,var_7 + var_13,var_8 + var_17,var_17,var_23);
        var_26(var_2 + var_13,var_7,var_8,var_17,var_23);
        var_11 = var_6 + var_17;
        if (0 < var_13) {
          var_15 = var_17 * 2 + var_13;
          var_22 = var_8 + var_15;
          var_21 = var_11;
          do {
            var_9 = *var_22;
            var_22 = var_22 + 1;
            *var_21 = var_9;
            var_21 = var_21 + 1;
          } while (var_8 + var_13 + var_15 != var_22);
        }
        var_15 = 0;
        var_22 = var_8 + var_17 + -1;
        var_21 = var_22;
        do {
          var_20 = *var_21;
          var_18 = var_21[var_17];
          var_9 = var_20 + var_15;
          var_19 = var_18 + var_9;
          *var_21 = var_19;
          bVar2 = var_8 != var_21;
          var_15 = (type_2)(var_19 < var_18) + (type_2)(var_9 < var_20);
          var_21 = var_21 + -1;
        } while (bVar2);
        var_15 = 0;
        do {
          var_21 = var_22 + var_17 + var_13;
          var_20 = *var_22;
          var_11 = var_11 + -1;
          var_22 = var_22 + -1;
          var_18 = *var_21;
          var_9 = var_20 + var_15;
          var_19 = var_18 + var_9;
          *var_11 = var_19;
          var_15 = (type_2)(var_19 < var_18) + (type_2)(var_9 < var_20);
        } while (var_6 != var_11);
        return;
      }
    }
  }
  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: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator 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: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (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: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))) (identifier)))) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (unary_expression argument: (parenthesized_expression (binary_expression left: (binary_expression left: (unary_expression argument: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) 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: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (binary_expression left: (identifier) right: (identifier)) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (identifier) (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: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (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: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (unary_expression argument: (identifier))))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (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 (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (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: (identifier)))))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (return_statement)))))))) (return_statement))))

void MASKED(uint *param_1,uint *param_2,uint *param_3,int param_4,uint *param_5)

{
  bool bVar1;
  longlong lVar2;
  uint *puVar3;
  uint uVar4;
  uint *puVar5;
  int iVar6;
  uint *puVar7;
  undefined *puVar8;
  undefined *puVar9;
  uint *puVar10;
  uint uVar11;
  undefined *puVar12;
  int iVar13;
  uint uVar14;
  uint *puVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  code *pcVar19;
  
  if (param_4 < 0x33) {
    if (0 < param_4 << 1) {
      puVar10 = param_3;
      do {
        *puVar10 = 0;
        puVar10 = puVar10 + 1;
      } while (param_3 + param_4 * 2 != puVar10);
    }
    puVar10 = param_1 + param_4;
    param_3 = param_3 + param_4 * 2;
    if (param_1 < puVar10) {
      puVar15 = param_2 + param_4;
      do {
        param_3 = param_3 + -1;
        uVar11 = 0;
        puVar3 = param_3;
        puVar7 = puVar15;
        if (param_2 < puVar15) {
          do {
            puVar7 = puVar7 + -1;
            uVar11 = *puVar3 + uVar11;
            lVar2 = (ulonglong)CONCAT14(uVar11 < *puVar3,uVar11) +
                    (ulonglong)*puVar7 * (ulonglong)puVar10[-1];
            uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
            *puVar3 = (uint)lVar2;
            puVar3 = puVar3 + -1;
          } while (param_2 < puVar7);
          puVar3 = param_3 + ~(~(uint)param_2 + (int)puVar15 >> 2);
        }
        puVar10 = puVar10 + -1;
        *puVar3 = uVar11;
      } while (param_1 < puVar10);
    }
  }
  else {
    iVar6 = param_4 >> 1;
    pcVar19 = (code *)(PTR_LAB_000ad6d0 + -0x1070);
    iVar17 = param_4 - iVar6;
    MASKED();
    iVar13 = iVar17 + 1;
    (*pcVar19)(param_1 + iVar6,param_2 + iVar6,param_3 + iVar6 * 2,iVar17,param_5);
    iVar18 = iVar13 * 2;
    puVar7 = param_5 + iVar13;
    param_5[iVar17 + 2] = 0;
    *puVar7 = 0;
    param_5[1] = 0;
    *param_5 = 0;
    puVar10 = param_5 + (iVar18 - iVar6);
    puVar15 = param_1;
    puVar3 = param_2;
    do {
      uVar11 = *puVar15;
      puVar15 = puVar15 + 1;
      puVar10[(iVar13 - iVar6) - (iVar18 - iVar6)] = uVar11;
      *puVar10 = *puVar3;
      puVar10 = puVar10 + 1;
      puVar3 = puVar3 + 1;
    } while (param_1 + iVar6 != puVar15);
    if (iVar17 < 1) {
      *param_5 = 0;
      uVar11 = 0;
    }
    else {
      param_1 = param_1 + iVar13 + iVar6 + -2;
      uVar11 = 0;
      puVar10 = param_5 + iVar17;
      do {
        puVar15 = puVar10;
        uVar16 = *param_1;
        param_1 = param_1 + -1;
        uVar4 = uVar16 + *puVar15;
        uVar14 = uVar11 + uVar4;
        *puVar15 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar15 + -1;
      } while (param_5 != puVar15 + -1);
      *param_5 = uVar11;
      param_2 = param_2 + iVar13 + iVar6 + -2;
      uVar11 = 0;
      puVar10 = param_5 + iVar13 + iVar17;
      do {
        puVar3 = puVar10 + -1;
        uVar16 = *param_2;
        param_2 = param_2 + -1;
        uVar4 = uVar16 + *puVar10;
        uVar14 = uVar11 + uVar4;
        *puVar10 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar3;
      } while (puVar15 + iVar17 != puVar3);
    }
    *puVar7 = uVar11;
    puVar3 = param_5 + iVar13 * 4;
    (*pcVar19)(param_5,puVar7,param_5 + iVar13 * 2,iVar13);
    param_5[3] = 0;
    param_5[2] = 0;
    param_5[1] = 0;
    *param_5 = 0;
    puVar10 = param_3;
    puVar15 = param_5 + (iVar13 - iVar6) * 2;
    do {
      uVar11 = *puVar10;
      puVar10 = puVar10 + 1;
      *puVar15 = uVar11;
      puVar15 = puVar15 + 1;
    } while (param_3 + iVar6 * 2 != puVar10);
    if (iVar18 + -3 < 0) {
      uVar11 = 0;
    }
    else {
      uVar11 = 0;
      puVar15 = param_3 + iVar6 * 2 + iVar18 + -3;
      puVar10 = param_5 + iVar13 * 2 + -2;
      do {
        puVar7 = puVar10 + -1;
        uVar16 = *puVar15;
        puVar15 = puVar15 + -1;
        uVar4 = uVar16 + puVar10[1];
        uVar14 = uVar11 + uVar4;
        puVar10[1] = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar7;
      } while (param_5 != puVar7);
    }
    iVar18 = iVar18 + -1;
    param_5[1] = uVar11;
    if (-1 < iVar18) {
      iVar6 = 1;
      puVar10 = param_5 + iVar13 * 4;
      do {
        uVar14 = puVar10[-1];
        puVar15 = puVar10 + -1;
        uVar16 = puVar10[iVar13 * -2 + -1];
        uVar11 = uVar14 + iVar6;
        uVar4 = ~uVar16 + uVar11;
        *puVar15 = uVar4;
        iVar6 = (uint)(uVar4 < ~uVar16) + (uint)(uVar11 < uVar14);
        puVar10 = puVar15;
      } while (param_5 + iVar13 * 2 != puVar15);
      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;
      param_5 = param_5 + iVar18 + iVar13 * 2;
      uVar11 = 0;
      puVar10 = param_3 + iVar18 + iVar6;
      do {
        puVar15 = puVar10 + -1;
        uVar16 = *param_5;
        param_5 = param_5 + -1;
        uVar4 = uVar16 + *puVar10;
        uVar14 = uVar11 + uVar4;
        *puVar10 = uVar14;
        uVar11 = (uint)(uVar14 < uVar11) + (uint)(uVar4 < uVar16);
        puVar10 = puVar15;
      } while (param_3 + iVar6 + -1 != puVar15);
      iVar6 = (param_4 * 2 - iVar17) + iVar13 * -2;
      iVar18 = iVar6 + -1;
      if (uVar11 != 0) {
        if (-1 < iVar18) {
          param_3 = param_3 + iVar6;
          do {
            uVar11 = param_3[-1];
            iVar18 = iVar18 + -1;
            uVar4 = uVar11 + 1;
            param_3[-1] = uVar4;
            if (uVar11 <= uVar4) {
              return;
            }
            param_3 = param_3 + -1;
          } while (iVar18 != -1);
        }
        puVar10 = (uint *)&DAT_00000135;
        puVar12 = PTR_DAT_000ad2c8 + 0x43c4;
        puVar9 = PTR_DAT_000ad2c8 + 0x41d0;
        puVar8 = PTR_DAT_000ad2c8 + 0x4254;
        (*(code *)PTR___assert_fail_000adb00)();
        if ((int)puVar12 < 0x33) {
          if ((int)puVar12 < 1) {
            iVar6 = (int)puVar12 << 2;
          }
          else {
            iVar6 = (int)puVar12 * 4;
            puVar15 = puVar10;
            do {
              *puVar15 = 0;
              puVar15 = puVar15 + 1;
            } while (puVar10 + (int)puVar12 != puVar15);
          }
          puVar12 = puVar8 + iVar6;
          puVar15 = (uint *)((int)puVar10 + iVar6);
          if (puVar8 < puVar12) {
            do {
              uVar11 = 0;
              puVar3 = (uint *)(puVar9 + iVar6 + -4);
              puVar7 = puVar15;
              while (puVar10 < puVar7) {
                puVar5 = puVar7 + -1;
                uVar4 = *puVar3;
                puVar7 = puVar7 + -1;
                puVar3 = puVar3 + -1;
                lVar2 = (ulonglong)*puVar5 + (ulonglong)uVar4 * (ulonglong)*(uint *)(puVar12 + -4) +
                        (ulonglong)uVar11;
                *puVar7 = (uint)lVar2;
                uVar11 = (uint)((ulonglong)lVar2 >> 0x20);
              }
              puVar12 = puVar12 + -4;
              puVar15 = puVar15 + -1;
            } while (puVar8 < puVar12);
          }
          return;
        }
        iVar18 = (int)puVar12 >> 1;
        puVar15 = puVar3 + (int)puVar12 * 2;
        iVar6 = (int)puVar12 - iVar18;
        MASKED(puVar8 + iVar18 * 4,puVar9 + iVar18 * 4,puVar3 + iVar18 * 2,iVar6,puVar15);
        FUN_0004f464(puVar8,puVar9 + iVar6 * 4,puVar3 + iVar18,iVar18,puVar15);
        FUN_0004f464(puVar8 + iVar6 * 4,puVar9,puVar3,iVar18,puVar15);
        puVar15 = puVar10 + iVar18;
        if (0 < iVar6) {
          iVar13 = iVar18 * 2 + iVar6;
          puVar5 = puVar3 + iVar13;
          puVar7 = puVar15;
          do {
            uVar11 = *puVar5;
            puVar5 = puVar5 + 1;
            *puVar7 = uVar11;
            puVar7 = puVar7 + 1;
          } while (puVar3 + iVar6 + iVar13 != puVar5);
        }
        iVar13 = 0;
        puVar5 = puVar3 + iVar18 + -1;
        puVar7 = puVar5;
        do {
          uVar14 = *puVar7;
          uVar16 = puVar7[iVar18];
          uVar11 = uVar14 + iVar13;
          uVar4 = uVar16 + uVar11;
          *puVar7 = uVar4;
          bVar1 = puVar3 != puVar7;
          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);
          puVar7 = puVar7 + -1;
        } while (bVar1);
        iVar13 = 0;
        do {
          puVar3 = puVar5 + iVar18 + iVar6;
          uVar14 = *puVar5;
          puVar15 = puVar15 + -1;
          puVar5 = puVar5 + -1;
          uVar16 = *puVar3;
          uVar11 = uVar14 + iVar13;
          uVar4 = uVar16 + uVar11;
          *puVar15 = uVar4;
          iVar13 = (uint)(uVar4 < uVar16) + (uint)(uVar11 < uVar14);
        } while (puVar10 != puVar15);
        return;
      }
    }
  }
  return;
}

