/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400a56c0 FUN_1400a56c0 * Pseudocode, not original source. */ void FUN_1400a56c0(longlong *param_1,ulonglong param_2,undefined8 param_3,undefined8 param_4) { longlong lVar1; longlong lVar2; longlong lVar3; undefined8 *puVar4; undefined8 *puVar5; undefined8 *puVar6; longlong *plVar7; longlong *plVar8; longlong lVar9; ulonglong uVar10; undefined8 *puVar11; longlong *plVar12; double dVar13; longlong *local_30; ulonglong local_28; lVar9 = param_1[4]; lVar1 = param_1[1]; lVar2 = *param_1; local_30 = (longlong *)0x0; local_28 = param_2; FUN_1400a59f0(&local_30,param_2,lVar1,param_4,0xfffffffffffffffe); lVar3 = param_1[1]; puVar4 = (undefined8 *)*param_1; *param_1 = 0; param_1[1] = lVar3; param_1[4] = 0; for (plVar12 = (longlong *)param_1[6]; plVar12 != (longlong *)(lVar2 + lVar1 * 8); plVar12 = plVar12 + 1) { plVar8 = (longlong *)*plVar12; while (plVar8 != (longlong *)0x0) { uVar10 = (ulonglong)(longlong)(int)plVar8[1] % local_28; *plVar12 = *plVar8; *plVar8 = local_30[uVar10]; local_30[uVar10] = (longlong)plVar8; plVar8 = (longlong *)*plVar12; } } param_1[4] = lVar9; plVar12 = (longlong *)*param_1; *param_1 = (longlong)local_30; uVar10 = param_1[1]; param_1[1] = local_28; if (param_1[4] == 0) { param_1[6] = *param_1 + local_28 * 8; } else { plVar8 = (longlong *)*param_1; param_1[6] = (longlong)plVar8; lVar9 = *plVar8; while (lVar9 == 0) { plVar8 = plVar8 + 1; param_1[6] = (longlong)plVar8; lVar9 = *plVar8; } } dVar13 = (double)param_1[1]; if (param_1[1] < 0) { dVar13 = dVar13 + 1.8446744073709552e+19; } local_30 = plVar12; local_28 = uVar10; dVar13 = ceil((double)*(float *)(param_1 + 5) * dVar13); lVar9 = -1; if (dVar13 < 1.8446744073709552e+19) { lVar9 = 0; if ((9.223372036854776e+18 < dVar13) && (dVar13 = dVar13 - 9.223372036854776e+18, dVar13 < 9.223372036854776e+18)) { lVar9 = -0x8000000000000000; } lVar9 = (longlong)dVar13 + lVar9; } param_1[7] = lVar9; if (puVar4 != (undefined8 *)0x0) { for (puVar11 = puVar4; puVar11 != puVar4 + lVar3; puVar11 = puVar11 + 1) { puVar5 = (undefined8 *)*puVar11; *puVar11 = 0; while (puVar5 != (undefined8 *)0x0) { puVar6 = (undefined8 *)*puVar5; operator_delete(puVar5); puVar5 = puVar6; } } operator_delete(puVar4); uVar10 = local_28; plVar12 = local_30; } if (plVar12 != (longlong *)0x0) { plVar8 = plVar12 + uVar10; plVar7 = plVar12; for (; plVar12 != plVar8; plVar12 = plVar12 + 1) { puVar4 = (undefined8 *)*plVar12; *plVar12 = 0; while (puVar4 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar4; operator_delete(puVar4); puVar4 = puVar11; } plVar7 = local_30; } operator_delete(plVar7); } return; }