L L4D2node

mainSort

0x00299f60 · 5008 bytes · __regparm3

_ZL8mainSortPjPhPtS_iiPi

Decompiled

undefined (7 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* mainSort(unsigned int*, unsigned char*, unsigned short*, unsigned int*, int, int, int*) */

void __regparm3
mainSort(uint *param_1,uchar *param_2,ushort *param_3,uint *param_4,int param_5,int param_6,
        int *param_7)

{
  byte *pbVar1;
  int *piVar2;
  byte bVar3;
  undefined4 uVar4;
  char cVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint *puVar10;
  int iVar11;
  undefined4 *puVar12;
  byte bVar13;
  uint uVar14;
  byte *pbVar15;
  int iVar16;
  int iVar17;
  undefined2 uVar18;
  uint uVar19;
  ushort *puVar20;
  int iVar21;
  int *piVar22;
  int iVar23;
  int iVar24;
  undefined4 *puVar25;
  undefined4 *puVar26;
  int *piVar27;
  undefined4 *puVar28;
  undefined1 *puVar29;
  undefined4 uVar30;
  undefined4 uVar31;
  int in_GS_OFFSET;
  bool bVar32;
  bool bVar33;
  uint local_1270;
  int local_1200;
  int *local_11f8;
  int local_11f4;
  int local_11e4;
  uint local_11e0;
  int local_d20 [768];
  undefined1 auStack_120 [256];
  undefined4 local_20;
  
  puVar29 = &stack0xfffffffc;
  piVar27 = (int *)&stack0xffffed94;
  local_20 = *(undefined4 *)(in_GS_OFFSET + 0x14);
  if (3 < param_6) {
    fwrite("        main sort initialise ...\n",1,0x21,_stderr);
  }
  iVar6 = 0x10000;
  do {
    param_4[iVar6] = 0;
    iVar6 = iVar6 + -1;
  } while (iVar6 != -1);
  uVar14 = param_5 - 1;
  uVar7 = (uint)*param_2 << 8;
  uVar8 = uVar14;
  if (2 < (int)uVar14) {
    pbVar15 = param_2 + param_5;
    puVar20 = param_3 + param_5 + -2;
    local_11e0 = uVar14;
    do {
      local_11e0 = local_11e0 - 4;
      puVar20[1] = 0;
      uVar8 = (uint)pbVar15[-1] << 8 | (int)uVar7 >> 8;
      param_4[uVar8] = param_4[uVar8] + 1;
      *puVar20 = 0;
      uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-2] << 8;
      param_4[uVar8] = param_4[uVar8] + 1;
      puVar20[-1] = 0;
      uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-3] << 8;
      param_4[uVar8] = param_4[uVar8] + 1;
      puVar20[-2] = 0;
      uVar7 = (int)uVar8 >> 8 | (uint)pbVar15[-4] << 8;
      param_4[uVar7] = param_4[uVar7] + 1;
      pbVar15 = pbVar15 + -4;
      puVar20 = puVar20 + -4;
    } while (2 < (int)local_11e0);
    uVar8 = (param_5 + -5) - (param_5 - 4U & 0xfffffffc);
  }
  pbVar15 = param_2 + param_5;
  if (-1 < (int)uVar8) {
    do {
      param_3[uVar8] = 0;
      pbVar1 = param_2 + uVar8;
      uVar8 = uVar8 - 1;
      uVar7 = (uint)*pbVar1 << 8 | (int)uVar7 >> 8;
      param_4[uVar7] = param_4[uVar7] + 1;
    } while (uVar8 != 0xffffffff);
  }
  iVar6 = 0;
  do {
    pbVar15[iVar6] = param_2[iVar6];
    param_3[param_5 + iVar6] = 0;
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x22);
  if (3 < param_6) {
    fwrite("        bucket sorting ...\n",1,0x1b,_stderr);
  }
  iVar6 = 1;
  do {
    param_4[iVar6] = param_4[iVar6] + param_4[iVar6 + -1];
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x10001);
  uVar8 = (uint)*param_2 << 8;
  if (2 < (int)uVar14) {
    do {
      uVar7 = uVar8 >> 8 | (uint)pbVar15[-1] << 8;
      uVar8 = param_4[uVar7] - 1;
      param_4[uVar7] = uVar8;
      param_1[uVar8] = uVar14;
      uVar8 = (int)uVar7 >> 8 | (uint)pbVar15[-2] << 8;
      uVar7 = param_4[uVar8] - 1;
      param_4[uVar8] = uVar7;
      param_1[uVar7] = uVar14 - 1;
      uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-3] << 8;
      uVar7 = param_4[uVar8] - 1;
      param_4[uVar8] = uVar7;
      param_1[uVar7] = uVar14 - 2;
      uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-4] << 8;
      uVar19 = param_4[uVar8] - 1;
      param_4[uVar8] = uVar19;
      uVar7 = uVar14 - 3;
      uVar14 = uVar14 - 4;
      param_1[uVar19] = uVar7;
      pbVar15 = pbVar15 + -4;
    } while (2 < (int)uVar14);
    uVar14 = (param_5 + -5) - (param_5 - 4U & 0xfffffffc);
  }
  if (-1 < (int)uVar14) {
    do {
      uVar7 = uVar8 >> 8;
      uVar8 = (uint)param_2[uVar14] << 8;
      uVar19 = param_4[uVar7 | uVar8] - 1;
      param_4[uVar7 | uVar8] = uVar19;
      param_1[uVar19] = uVar14;
      uVar14 = uVar14 - 1;
    } while (uVar14 != 0xffffffff);
  }
  iVar6 = 0;
  do {
    auStack_120[iVar6] = 0;
    local_d20[iVar6] = iVar6;
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x100);
  iVar6 = 5;
  local_1200 = 1;
  do {
    local_1200 = local_1200 * 3 + 1;
    iVar6 = iVar6 + -1;
  } while (iVar6 != 0);
  do {
    do {
      local_1200 = local_1200 / 3;
    } while (0xff < local_1200);
    local_11f8 = local_d20;
    local_11f4 = local_1200;
    do {
      iVar6 = local_11f8[local_1200];
      uVar14 = param_4[iVar6 * 0x100];
      uVar8 = param_4[(iVar6 + 1) * 0x100];
      local_11e4 = local_11f4;
      piVar22 = local_11f8;
      do {
        iVar9 = *piVar22;
        iVar21 = local_11e4 - local_1200;
        if (param_4[(iVar9 + 1) * 0x100] - param_4[iVar9 * 0x100] <= uVar8 - uVar14) break;
        piVar22[local_1200] = iVar9;
        piVar22 = piVar22 + -local_1200;
        local_11e4 = iVar21;
      } while (local_1200 <= iVar21);
      local_11f4 = local_11f4 + 1;
      local_11f8 = local_11f8 + 1;
      local_d20[local_11e4] = iVar6;
    } while (local_11f4 != 0x100);
  } while (local_1200 != 1);
LAB_0029a3d8:
  *(uchar **)(puVar29 + -0x1238) = param_2;
  *(undefined4 *)(puVar29 + -0x1244) = 0;
  iVar6 = **(int **)(puVar29 + -0x1240);
  *(int *)(puVar29 + -0x1228) = iVar6;
  iVar6 = iVar6 * 0x400 + *(int *)(puVar29 + -0x1224);
  *(int *)(puVar29 + -0x124c) = iVar6;
  *(int *)(puVar29 + -0x1234) = iVar6;
LAB_0029a40b:
  if (*(int *)(puVar29 + -0x1244) != *(int *)(puVar29 + -0x1228)) {
    uVar14 = **(uint **)(puVar29 + -0x1234);
    if ((uVar14 & 0x200000) == 0) {
      uVar8 = uVar14 & 0xffdfffff;
      iVar6 = (*(uint *)(*(int *)(puVar29 + -0x1234) + 4) & 0xffdfffff) - 1;
      if ((int)uVar8 < iVar6) {
        iVar9 = (iVar6 - uVar8) + 1;
        *(int *)(puVar29 + -0x1250) = iVar9;
        if (3 < *(int *)(puVar29 + 0x10)) {
          piVar27[5] = iVar9;
          uVar30 = *(undefined4 *)(puVar29 + -0x1248);
          piVar27[1] = (int)"        qsort [0x%x, 0x%x]   done %d   this %d\n";
          piVar27[4] = uVar30;
          piVar27[3] = *(undefined4 *)(puVar29 + -0x1244);
          piVar27[2] = *(undefined4 *)(puVar29 + -0x1228);
          *piVar27 = (int)_stderr;
          piVar27[-1] = 0x29a49c;
          fprintf((FILE *)*piVar27,(char *)piVar27[1]);
        }
        *(uint *)(puVar29 + -0x11cc) = uVar8;
        *(int *)(puVar29 + -0x103c) = iVar6;
        *(undefined4 *)(puVar29 + -0xeac) = 2;
        *(int *)(puVar29 + -0x120c) = iVar6;
        *(uint *)(puVar29 + -0x1218) = uVar8;
        *(undefined4 *)(puVar29 + -0x11e0) = 2;
        *(undefined4 *)(puVar29 + -0x11f8) = 1;
        do {
          *(int *)(puVar29 + -0x1220) = *(int *)(puVar29 + -0x11f8) + -1;
          if ((*(int *)(puVar29 + -0x120c) - *(int *)(puVar29 + -0x1218) < 0x14) ||
             (0xe < *(int *)(puVar29 + -0x11e0))) {
            *(undefined4 *)(puVar29 + -0x121c) = 0;
            iVar9 = (*(int *)(puVar29 + -0x120c) - *(int *)(puVar29 + -0x1218)) + 1;
            iVar6 = *(int *)(puVar29 + -0x121c);
            if (1 < iVar9) {
              do {
                iVar21 = iVar6;
                iVar6 = iVar21 + 1;
              } while (*(int *)(incs + iVar6 * 4) < iVar9);
              *(int *)(puVar29 + -0x121c) = iVar21;
              iVar6 = *(int *)(puVar29 + -0x1238);
              *(int *)(puVar29 + -0x1230) =
                   *(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x1218) * 4;
              do {
                iVar9 = *(int *)(incs + *(int *)(puVar29 + -0x121c) * 4);
                iVar21 = *(int *)(puVar29 + -0x1218) + iVar9;
                *(int *)(puVar29 + -0x11dc) = iVar9;
                *(int *)(puVar29 + -0x11e8) = iVar21;
                if (iVar21 <= *(int *)(puVar29 + -0x120c)) {
                  *(int *)(puVar29 + -0x11fc) = iVar21;
                  *(int *)(puVar29 + -0x11e4) = iVar9 * 4;
                  *(int *)(puVar29 + -0x11e4) = -*(int *)(puVar29 + -0x11e4);
                  *(int *)(puVar29 + -0x1200) = *(int *)(puVar29 + -0x1208) + iVar21 * 4;
                  *(undefined4 *)(puVar29 + -0x1204) = *(undefined4 *)(puVar29 + -0x1230);
                  do {
                    piVar22 = *(int **)(puVar29 + -0x1204);
                    iVar9 = **(int **)(puVar29 + -0x1200);
                    *(int *)(puVar29 + -0x1210) = iVar9;
                    iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
                    *(int *)(puVar29 + -0x11f8) = iVar9;
                    *(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
                    *(undefined4 *)(puVar29 + -0x11ec) = *(undefined4 *)(puVar29 + -0x11fc);
                    while( true ) {
                      *(int **)(puVar29 + -0x11f0) = piVar22;
                      iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
                      iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
                      bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
                      bVar33 = false;
                      if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029a840:
                      puVar12 = piVar27;
                      if (bVar32 || bVar33) goto LAB_0029a990;
LAB_0029a84b:
                      piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
                      piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
                      if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029a9a5;
                      *(int *)(puVar29 + -0x11ec) = iVar21;
                    }
                    bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 1 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 2 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 3 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 4 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 5 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 6 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 7 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 8 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 9 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 10 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029a840;
                    uVar30 = *(undefined4 *)(puVar29 + 0xc);
                    piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
                    uVar31 = *(undefined4 *)(puVar29 + -0x122c);
                    piVar27[1] = uVar30;
                    uVar14 = *(uint *)(puVar29 + -0x11f8);
                    *piVar27 = uVar31;
                    puVar25 = piVar27 + -1;
                    piVar27[-1] = 0x29a987;
                    cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
                                    piVar27[2],(int *)piVar27[3]);
                    piVar27 = piVar27 + -1;
                    puVar12 = puVar25;
                    if (cVar5 != '\0') goto LAB_0029a84b;
LAB_0029a990:
                    *(int *)(puVar29 + -0x11f0) =
                         *(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
                    piVar27 = puVar12;
LAB_0029a9a5:
                    **(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
                    *(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11fc) + 1;
                    if (*(int *)(puVar29 + -0x120c) < *(int *)(puVar29 + -0x11fc) + 1) break;
                    iVar9 = *(int *)(*(int *)(puVar29 + -0x1200) + 4);
                    *(int *)(puVar29 + -0x1210) = iVar9;
                    iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
                    *(int *)(puVar29 + -0x11f8) = iVar9;
                    *(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
                    piVar22 = (int *)(*(int *)(puVar29 + -0x1204) + 4);
                    while( true ) {
                      *(int **)(puVar29 + -0x11f0) = piVar22;
                      iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
                      iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
                      bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
                      bVar33 = false;
                      if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029aa00:
                      puVar12 = piVar27;
                      if (bVar32 || bVar33) goto LAB_0029ab50;
LAB_0029aa0b:
                      piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
                      piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
                      if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029ab65;
                      *(int *)(puVar29 + -0x11ec) = iVar21;
                    }
                    bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 1 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 2 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 3 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 4 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 5 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 6 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 7 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 8 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 9 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 10 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029aa00;
                    uVar30 = *(undefined4 *)(puVar29 + 0xc);
                    piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
                    uVar31 = *(undefined4 *)(puVar29 + -0x122c);
                    piVar27[1] = uVar30;
                    *piVar27 = uVar31;
                    uVar14 = *(uint *)(puVar29 + -0x11f8);
                    puVar26 = piVar27 + -1;
                    piVar27[-1] = 0x29ab47;
                    cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
                                    piVar27[2],(int *)piVar27[3]);
                    piVar27 = piVar27 + -1;
                    puVar12 = puVar26;
                    if (cVar5 != '\0') goto LAB_0029aa0b;
LAB_0029ab50:
                    *(int *)(puVar29 + -0x11f0) =
                         *(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
                    piVar27 = puVar12;
LAB_0029ab65:
                    **(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
                    *(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11fc) + 2;
                    if (*(int *)(puVar29 + -0x120c) < *(int *)(puVar29 + -0x11fc) + 2) break;
                    iVar9 = *(int *)(*(int *)(puVar29 + -0x1200) + 8);
                    *(int *)(puVar29 + -0x1210) = iVar9;
                    iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
                    *(int *)(puVar29 + -0x11f8) = iVar9;
                    *(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
                    piVar22 = (int *)(*(int *)(puVar29 + -0x1204) + 8);
                    while( true ) {
                      *(int **)(puVar29 + -0x11f0) = piVar22;
                      iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
                      iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
                      bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
                      bVar33 = false;
                      if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029abc0:
                      puVar12 = piVar27;
                      if (bVar32 || bVar33) goto LAB_0029ad10;
LAB_0029abcb:
                      piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
                      piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
                      if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029ad25;
                      *(int *)(puVar29 + -0x11ec) = iVar21;
                    }
                    bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 1 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 2 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 3 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 4 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 5 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 6 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 7 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 8 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 9 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
                    bVar3 = *(byte *)(iVar6 + 10 + iVar9);
                    bVar32 = bVar3 < bVar13;
                    bVar33 = bVar3 == bVar13;
                    if (!bVar33) goto LAB_0029abc0;
                    uVar30 = *(undefined4 *)(puVar29 + 0xc);
                    piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
                    uVar31 = *(undefined4 *)(puVar29 + -0x122c);
                    piVar27[1] = uVar30;
                    uVar14 = *(uint *)(puVar29 + -0x11f8);
                    *piVar27 = uVar31;
                    puVar28 = piVar27 + -1;
                    piVar27[-1] = 0x29ad07;
                    cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
                                    piVar27[2],(int *)piVar27[3]);
                    piVar27 = piVar27 + -1;
                    puVar12 = puVar28;
                    if (cVar5 != '\0') goto LAB_0029abcb;
LAB_0029ad10:
                    *(int *)(puVar29 + -0x11f0) =
                         *(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
                    piVar27 = puVar12;
LAB_0029ad25:
                    *(int *)(puVar29 + -0x11fc) = *(int *)(puVar29 + -0x11fc) + 3;
                    **(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
                    if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
                    *(int *)(puVar29 + -0x1200) = *(int *)(puVar29 + -0x1200) + 0xc;
                    *(int *)(puVar29 + -0x1204) = *(int *)(puVar29 + -0x1204) + 0xc;
                  } while (*(int *)(puVar29 + -0x11fc) <= *(int *)(puVar29 + -0x120c));
                }
                *(int *)(puVar29 + -0x121c) = *(int *)(puVar29 + -0x121c) + -1;
              } while (*(int *)(puVar29 + -0x121c) != -1);
            }
            if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
            if (*(int *)(puVar29 + -0x1220) == 0) goto code_r0x0029ad9c;
          }
          else {
            iVar6 = *(int *)(puVar29 + -0x1238);
            puVar29[-0x11dc] =
                 *(undefined1 *)
                  (*(int *)(*(int *)(puVar29 + -0x1208) +
                           (*(int *)(puVar29 + -0x1218) + *(int *)(puVar29 + -0x120c) >> 1) * 4) +
                   iVar6 + *(int *)(puVar29 + -0x11e0));
            bVar13 = *(byte *)(*(int *)(*(int *)(puVar29 + -0x1208) +
                                       *(int *)(puVar29 + -0x120c) * 4) + iVar6 +
                              *(int *)(puVar29 + -0x11e0));
            piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x1218) * 4);
            *(int **)(puVar29 + -0x11fc) = piVar22;
            bVar3 = *(byte *)(*piVar22 + iVar6 + *(int *)(puVar29 + -0x11e0));
            uVar14 = (uint)bVar3;
            uVar8 = (uint)bVar13;
            if (bVar3 <= bVar13) {
              uVar8 = (uint)bVar3;
              uVar14 = (uint)bVar13;
            }
            if (((byte)puVar29[-0x11dc] < (byte)uVar14) &&
               (uVar14 = (uint)(byte)puVar29[-0x11dc], (byte)puVar29[-0x11dc] <= (byte)uVar8)) {
              uVar14 = uVar8;
            }
            *(uint *)(puVar29 + -0x11e4) = uVar14;
            iVar6 = *(int *)(puVar29 + -0x120c);
            *(int *)(puVar29 + -0x11f0) = *(int *)(puVar29 + -0x1218);
            *(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x1218) + 1;
            *(int *)(puVar29 + -0x11e8) = *(int *)(puVar29 + -0x1238) + *(int *)(puVar29 + -0x11e0);
            iVar9 = iVar6;
LAB_0029a622:
            *(int *)(puVar29 + -0x11dc) = *(int *)(puVar29 + -0x11ec) + -1;
            if (*(int *)(puVar29 + -0x11ec) + -1 <= iVar6) {
              iVar21 = *(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4);
              uVar14 = (uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21);
              if (uVar14 == *(uint *)(puVar29 + -0x11e4)) {
                *(int *)(puVar29 + -0x11dc) = iVar6;
                iVar6 = *(int *)(puVar29 + -0x11f0);
                *(int *)(puVar29 + -0x11f0) = *(int *)(puVar29 + -0x11f0) + 1;
                piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4);
                *(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4) =
                     *piVar22;
                iVar6 = *(int *)(puVar29 + -0x11dc);
                *piVar22 = iVar21;
              }
              else if (0 < (int)(uVar14 - *(uint *)(puVar29 + -0x11e4))) {
                piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4);
                *(int **)(puVar29 + -0x11f4) = piVar22;
                do {
                  iVar6 = iVar6 + -1;
                  iVar21 = *piVar22;
                  if ((uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21) ==
                      *(uint *)(puVar29 + -0x11e4)) {
                    piVar2 = (int *)(*(int *)(puVar29 + -0x1208) + iVar9 * 4);
                    iVar9 = iVar9 + -1;
                    *piVar22 = *piVar2;
                    *piVar2 = iVar21;
                  }
                  else if ((int)((uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21) -
                                *(uint *)(puVar29 + -0x11e4)) < 0) goto LAB_0029a720;
                  piVar22 = piVar22 + -1;
                  if (iVar6 < *(int *)(puVar29 + -0x11dc)) goto LAB_0029a635;
                } while( true );
              }
              goto LAB_0029a61b;
            }
LAB_0029a635:
            if (iVar9 < *(int *)(puVar29 + -0x11f0)) {
              *(int *)(puVar29 + *(int *)(puVar29 + -0x1220) * 4 + -0xeac) =
                   *(int *)(puVar29 + -0x11e0) + 1;
              *(undefined4 *)(puVar29 + -0x1220) = *(undefined4 *)(puVar29 + -0x11f8);
            }
            else {
              iVar21 = *(int *)(puVar29 + -0x11f0) - *(int *)(puVar29 + -0x1218);
              iVar11 = *(int *)(puVar29 + -0x11dc) - *(int *)(puVar29 + -0x11f0);
              if (iVar11 < iVar21) {
                iVar21 = iVar11;
              }
              if (0 < iVar21) {
                iVar11 = *(int *)(puVar29 + -0x1218);
                *(int *)(puVar29 + -0x11e4) = iVar6;
                iVar6 = *(int *)(puVar29 + -0x1208);
                iVar23 = (*(int *)(puVar29 + -0x11dc) - iVar21) - iVar11;
                puVar12 = *(undefined4 **)(puVar29 + -0x11fc);
                do {
                  uVar30 = *puVar12;
                  *puVar12 = puVar12[iVar23];
                  puVar12[iVar23] = uVar30;
                  puVar12 = puVar12 + 1;
                } while (puVar12 != (undefined4 *)(iVar6 + (iVar21 + iVar11) * 4));
                iVar6 = *(int *)(puVar29 + -0x11e4);
              }
              iVar21 = *(int *)(puVar29 + -0x120c) - iVar9;
              if (iVar9 - iVar6 < iVar21) {
                iVar21 = iVar9 - iVar6;
              }
              *(int *)(puVar29 + -0x11e4) = *(int *)(puVar29 + -0x120c) - iVar21;
              if (0 < iVar21) {
                iVar11 = *(int *)(puVar29 + -0x11dc);
                iVar23 = *(int *)(puVar29 + -0x1208);
                puVar12 = (undefined4 *)(iVar23 + iVar11 * 4);
                iVar24 = *(int *)(puVar29 + -0x11e4);
                *(int *)(puVar29 + -0x11e4) = iVar6;
                do {
                  uVar30 = *puVar12;
                  *puVar12 = puVar12[(iVar24 - iVar11) + 1];
                  puVar12[(iVar24 - iVar11) + 1] = uVar30;
                  puVar12 = puVar12 + 1;
                } while (puVar12 != (undefined4 *)(iVar23 + (iVar21 + iVar11) * 4));
                iVar6 = *(int *)(puVar29 + -0x11e4);
              }
              iVar21 = *(int *)(puVar29 + -0x120c);
              iVar9 = (iVar6 - iVar9) + iVar21;
              iVar24 = (*(int *)(puVar29 + -0x11dc) + *(int *)(puVar29 + -0x1218)) -
                       *(int *)(puVar29 + -0x11f0);
              *(int *)(puVar29 + -0x11e4) = *(int *)(puVar29 + -0x11e0) + 1;
              *(int *)(puVar29 + -0x11dc) = iVar24 + -1;
              iVar6 = iVar9 + 1;
              iVar16 = (iVar24 + -1) - *(int *)(puVar29 + -0x1218);
              *(int *)(puVar29 + -0x11e8) = iVar16;
              iVar17 = iVar21 - iVar6;
              iVar23 = iVar6;
              iVar11 = iVar17;
              if (iVar16 < iVar17) {
                iVar11 = *(int *)(puVar29 + -0x11e8);
                *(int *)(puVar29 + -0x11e8) = iVar17;
                uVar30 = *(undefined4 *)(puVar29 + -0x11dc);
                *(int *)(puVar29 + -0x11dc) = iVar21;
                *(undefined4 *)(puVar29 + -0x120c) = uVar30;
                iVar23 = *(int *)(puVar29 + -0x1218);
                *(int *)(puVar29 + -0x1218) = iVar6;
              }
              uVar30 = *(undefined4 *)(puVar29 + -0x11e0);
              iVar21 = iVar23;
              iVar6 = iVar9;
              if (iVar11 < iVar9 - iVar24) {
                uVar30 = *(undefined4 *)(puVar29 + -0x11e4);
                *(undefined4 *)(puVar29 + -0x11e4) = *(undefined4 *)(puVar29 + -0x11e0);
                iVar6 = *(int *)(puVar29 + -0x120c);
                *(int *)(puVar29 + -0x120c) = iVar9;
                iVar21 = iVar24;
                iVar11 = iVar9 - iVar24;
                iVar24 = iVar23;
              }
              iVar9 = iVar21;
              uVar31 = uVar30;
              if (iVar11 <= *(int *)(puVar29 + -0x11e8)) {
                uVar31 = *(undefined4 *)(puVar29 + -0x11e0);
                *(undefined4 *)(puVar29 + -0x11e0) = uVar30;
                uVar30 = *(undefined4 *)(puVar29 + -0x11dc);
                *(undefined4 *)(puVar29 + -0x11dc) = *(undefined4 *)(puVar29 + -0x120c);
                iVar9 = *(int *)(puVar29 + -0x1218);
                *(int *)(puVar29 + -0x1218) = iVar21;
                *(undefined4 *)(puVar29 + -0x120c) = uVar30;
              }
              iVar21 = *(int *)(puVar29 + -0x1220);
              uVar30 = *(undefined4 *)(puVar29 + -0x1218);
              *(int *)(puVar29 + iVar21 * 4 + -0x11cc) = iVar9;
              uVar4 = *(undefined4 *)(puVar29 + -0x120c);
              *(undefined4 *)(puVar29 + iVar21 * 4 + -0xeac) = uVar31;
              *(undefined4 *)(puVar29 + iVar21 * 4 + -0x103c) = uVar4;
              iVar9 = *(int *)(puVar29 + -0x11f8);
              uVar31 = *(undefined4 *)(puVar29 + -0x11dc);
              *(undefined4 *)(puVar29 + iVar9 * 4 + -0x11cc) = uVar30;
              uVar30 = *(undefined4 *)(puVar29 + -0x11e0);
              *(undefined4 *)(puVar29 + iVar9 * 4 + -0x103c) = uVar31;
              *(undefined4 *)(puVar29 + iVar9 * 4 + -0xeac) = uVar30;
              iVar21 = iVar9 + 1;
              *(int *)(puVar29 + iVar21 * 4 + -0x103c) = iVar6;
              uVar30 = *(undefined4 *)(puVar29 + -0x11e4);
              *(int *)(puVar29 + iVar21 * 4 + -0x11cc) = iVar24;
              *(undefined4 *)(puVar29 + iVar21 * 4 + -0xeac) = uVar30;
              *(int *)(puVar29 + -0x1220) = iVar9 + 2;
            }
          }
          if (99 < *(int *)(puVar29 + -0x1220)) {
            *piVar27 = 0x3e9;
            piVar27[-1] = 0x29b0a4;
            BZ2_bz__AssertH__fail(*piVar27);
          }
          *(int *)(puVar29 + -0x11f8) = *(int *)(puVar29 + -0x1220);
          iVar6 = *(int *)(puVar29 + -0x1220) + -1;
          *(undefined4 *)(puVar29 + -0x1218) = *(undefined4 *)(puVar29 + iVar6 * 4 + -0x11cc);
          uVar30 = *(undefined4 *)(puVar29 + iVar6 * 4 + -0xeac);
          *(undefined4 *)(puVar29 + -0x120c) = *(undefined4 *)(puVar29 + iVar6 * 4 + -0x103c);
          *(undefined4 *)(puVar29 + -0x11e0) = uVar30;
        } while( true );
      }
    }
    goto LAB_0029adc0;
  }
  goto LAB_0029adcd;
code_r0x0029ad9c:
  *(int *)(puVar29 + -0x1248) = *(int *)(puVar29 + -0x1248) + *(int *)(puVar29 + -0x1250);
  if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
  uVar14 = **(uint **)(puVar29 + -0x1234);
LAB_0029adc0:
  **(uint **)(puVar29 + -0x1234) = uVar14 | 0x200000;
LAB_0029adcd:
  *(int *)(puVar29 + -0x1244) = *(int *)(puVar29 + -0x1244) + 1;
  *(int *)(puVar29 + -0x1234) = *(int *)(puVar29 + -0x1234) + 4;
  if (*(int *)(puVar29 + -0x1244) == 0x100) goto code_r0x0029adeb;
  goto LAB_0029a40b;
LAB_0029a720:
  *(int **)(puVar29 + -0x11f4) = piVar22;
  uVar30 = *(undefined4 *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4);
  *(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4) = iVar21;
  **(undefined4 **)(puVar29 + -0x11f4) = uVar30;
LAB_0029a61b:
  *(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11ec) + 1;
  goto LAB_0029a622;
code_r0x0029adeb:
  param_2 = *(uchar **)(puVar29 + -0x1238);
  if (puVar29[*(int *)(puVar29 + -0x1228) + -0x11c] != '\0') {
    *piVar27 = 0x3ee;
    piVar27[-1] = 0x29ae0d;
    BZ2_bz__AssertH__fail(*piVar27);
  }
  iVar6 = *(int *)(puVar29 + -0x1224);
  iVar9 = 0;
  do {
    iVar21 = iVar9 * 0x100 + *(int *)(puVar29 + -0x1228);
    *(uint *)(puVar29 + iVar9 * 4 + -0x91c) = *(uint *)(iVar6 + iVar21 * 4) & 0xffdfffff;
    *(uint *)(puVar29 + iVar9 * 4 + -0x51c) = (*(uint *)(iVar6 + 4 + iVar21 * 4) & 0xffdfffff) - 1;
    iVar9 = iVar9 + 1;
  } while (iVar9 != 0x100);
  uVar14 = **(uint **)(puVar29 + -0x124c) & 0xffdfffff;
  iVar6 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x91c);
  if ((int)uVar14 < iVar6) {
    do {
      iVar9 = *(int *)(*(int *)(puVar29 + -0x1208) + uVar14 * 4);
      *(int *)(puVar29 + -0x11dc) = iVar9;
      iVar9 = iVar9 + -1;
      if (iVar9 < 0) {
        iVar9 = *(int *)(puVar29 + 0xc) + iVar9;
      }
      uVar8 = (uint)param_2[iVar9];
      if (puVar29[uVar8 - 0x11c] == '\0') {
        iVar6 = *(int *)(puVar29 + uVar8 * 4 + -0x91c);
        *(int *)(puVar29 + uVar8 * 4 + -0x91c) = iVar6 + 1;
        *(int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4) = iVar9;
        iVar6 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x91c);
      }
      uVar14 = uVar14 + 1;
    } while ((int)uVar14 < iVar6);
  }
  iVar9 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x51c);
  puVar10 = (uint *)((*(int *)(puVar29 + -0x1228) + 1) * 0x400 + *(int *)(puVar29 + -0x1224));
  uVar14 = *puVar10;
  *(uint **)(puVar29 + -0x11dc) = puVar10;
  iVar21 = (uVar14 & 0xffdfffff) - 1;
  if (iVar9 < iVar21) {
    *(int *)(puVar29 + -0x11e4) = iVar6;
    do {
      iVar6 = *(int *)(*(int *)(puVar29 + -0x1208) + iVar21 * 4);
      *(int *)(puVar29 + -0x11e0) = iVar6;
      iVar6 = iVar6 + -1;
      if (iVar6 < 0) {
        iVar6 = *(int *)(puVar29 + 0xc) + iVar6;
      }
      uVar14 = (uint)param_2[iVar6];
      if (puVar29[uVar14 - 0x11c] == '\0') {
        iVar9 = *(int *)(puVar29 + uVar14 * 4 + -0x51c);
        *(int *)(puVar29 + uVar14 * 4 + -0x51c) = iVar9 + -1;
        *(int *)(*(int *)(puVar29 + -0x1208) + iVar9 * 4) = iVar6;
        iVar9 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x51c);
      }
      iVar21 = iVar21 + -1;
    } while (iVar9 < iVar21);
    iVar6 = *(int *)(puVar29 + -0x11e4);
  }
  if ((iVar9 != iVar6 + -1) && ((iVar6 != 0 || (*(int *)(puVar29 + -0x123c) != iVar9)))) {
    *piVar27 = 0x3ef;
    piVar27[-1] = 0x29af78;
    BZ2_bz__AssertH__fail(*piVar27);
  }
  iVar6 = *(int *)(puVar29 + -0x1224);
  iVar9 = 0;
  do {
    iVar21 = iVar9 + 1;
    puVar10 = (uint *)(iVar6 + (iVar9 * 0x100 + *(int *)(puVar29 + -0x1228)) * 4);
    *puVar10 = *puVar10 | 0x200000;
    iVar9 = iVar21;
  } while (iVar21 != 0x100);
  puVar29[*(int *)(puVar29 + -0x1228) + -0x11c] = 1;
  if (*(undefined1 **)(puVar29 + -0x1240) == puVar29 + -0x920) goto LAB_0029b06f;
  bVar13 = 0;
  iVar6 = (**(uint **)(puVar29 + -0x11dc) & 0xffdfffff) -
          (**(uint **)(puVar29 + -0x124c) & 0xffdfffff);
  iVar9 = iVar6;
  while (0xfffe < iVar9) {
    bVar13 = bVar13 + 1;
    iVar9 = iVar6 >> (bVar13 & 0x1f);
  }
  iVar6 = iVar6 + -1;
  *(uint *)(puVar29 + -0x11dc) =
       *(int *)(puVar29 + -0x1208) + (**(uint **)(puVar29 + -0x124c) & 0xffdfffff) * 4;
  if (-1 < iVar6) {
    *(int *)(puVar29 + -0x11e0) = iVar6;
    do {
      iVar9 = *(int *)(puVar29 + -0x122c);
      iVar21 = *(int *)(*(int *)(puVar29 + -0x11dc) + iVar6 * 4);
      uVar18 = (undefined2)(iVar6 >> (bVar13 & 0x1f));
      *(undefined2 *)(iVar9 + iVar21 * 2) = uVar18;
      if (iVar21 < 0x22) {
        *(undefined2 *)(iVar9 + (iVar21 + *(int *)(puVar29 + 0xc)) * 2) = uVar18;
      }
      iVar6 = iVar6 + -1;
    } while (iVar6 != -1);
    iVar6 = *(int *)(puVar29 + -0x11e0);
  }
  if (0xffff < iVar6 >> (bVar13 & 0x1f)) {
    *piVar27 = 0x3ea;
    piVar27[-1] = 0x29b056;
    BZ2_bz__AssertH__fail(*piVar27);
  }
  *(int *)(puVar29 + -0x1240) = *(int *)(puVar29 + -0x1240) + 4;
  if (*(undefined1 **)(puVar29 + -0x1240) == puVar29 + -0x91c) {
LAB_0029b06f:
    if (3 < *(int *)(puVar29 + 0x10)) {
      iVar6 = *(int *)(puVar29 + -0x1248);
      piVar27[1] = (int)"        %d pointers, %d sorted, %d scanned\n";
      iVar9 = *(int *)(puVar29 + 0xc);
      piVar27[3] = iVar6;
      piVar27[4] = iVar9 - iVar6;
      piVar27[2] = *(int *)(puVar29 + 0xc);
      *piVar27 = (int)_stderr;
      piVar27[-1] = 0x29b30e;
      fprintf((FILE *)*piVar27,(char *)piVar27[1]);
    }
LAB_0029b079:
    if (*(int *)(puVar29 + -0x1c) == *(int *)(in_GS_OFFSET + 0x14)) {
      return;
    }
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)((int)piVar27 + -4) = 0x29b2df;
    __stack_chk_fail();
  }
  goto LAB_0029a3d8;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)