/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400ca800 FUN_1400ca800 * Pseudocode, not original source. */ void FUN_1400ca800(int *param_1,int param_2,int *param_3) { uint uVar1; int *piVar2; int iVar3; undefined8 *puVar4; undefined8 *puVar5; longlong lVar6; longlong lVar7; longlong lVar8; longlong *plVar9; undefined8 **ppuVar10; int iVar11; int iVar12; ulonglong uVar13; int iVar14; longlong lVar15; longlong lVar16; int local_res18; undefined8 *local_88; undefined8 *local_80; undefined8 *local_78; undefined8 *local_70; undefined8 local_68; int *local_60; undefined1 local_58; iVar12 = (int)param_3; local_68 = 0xfffffffffffffffe; uVar13 = (ulonglong)*(uint *)(*(longlong *)(param_1 + 0x52) + 600); if (*(uint *)(*(longlong *)(param_1 + 0x52) + 600) != 0) { FUN_1400f4580((double *)(param_1 + 0x7a),(double)uVar13 * 0.001); } puVar5 = operator_new(0x28); if (puVar5 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { param_3 = param_1; puVar5 = FUN_140074090(puVar5,FUN_1400c8950,param_1); } if (puVar5 == (undefined8 *)0x0) { local_80 = (undefined8 *)0x0; } else { local_80 = (undefined8 *)FUN_14006cbf0(0x10); local_80[1] = 1; *local_80 = puVar5; } puVar5 = local_80; FUN_1400c2980((longlong *)(param_1 + 0x22),(longlong *)&local_80); puVar4 = local_80; if (puVar5 != (undefined8 *)0x0) { plVar9 = puVar5 + 1; *plVar9 = *plVar9 + -1; if (*plVar9 == 0) { puVar5 = (undefined8 *)*local_80; if (puVar5 != (undefined8 *)0x0) { FUN_1400741a0(puVar5); operator_delete(puVar5); } FUN_14006cc60(puVar4); } } puVar5 = operator_new(0x28); if (puVar5 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { param_3 = param_1; puVar5 = FUN_140074090(puVar5,FUN_1400c3f80,param_1); } if (puVar5 == (undefined8 *)0x0) { local_78 = (undefined8 *)0x0; } else { local_78 = (undefined8 *)FUN_14006cbf0(0x10); local_78[1] = 1; *local_78 = puVar5; } puVar5 = local_78; ppuVar10 = &local_78; FUN_1400c2980((longlong *)(param_1 + 0x24),(longlong *)ppuVar10); puVar4 = local_78; if (puVar5 != (undefined8 *)0x0) { plVar9 = puVar5 + 1; *plVar9 = *plVar9 + -1; if (*plVar9 == 0) { puVar5 = (undefined8 *)*local_78; if (puVar5 != (undefined8 *)0x0) { FUN_1400741a0(puVar5); operator_delete(puVar5); } FUN_14006cc60(puVar4); } } iVar14 = 0; if (0 < iVar12) { piVar2 = param_1 + 0xe; do { local_70 = operator_new(0x28); if (local_70 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { param_3 = param_1; puVar5 = FUN_140074090(local_70,FUN_1400ca7d0,param_1); } if (puVar5 == (undefined8 *)0x0) { local_70 = (undefined8 *)0x0; } else { local_70 = (undefined8 *)FUN_14006cbf0(0x10); local_70[1] = 1; *local_70 = puVar5; } puVar5 = local_70; iVar3 = param_1[0x14]; if (iVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } iVar11 = param_1[0x14]; FUN_1400c6490((longlong)piVar2,iVar11 + 1,param_3,uVar13); iVar11 = iVar11 - iVar3; if ((0 < iVar11) && (iVar11 = iVar11 + -1, -1 < iVar11)) { lVar15 = (longlong)(iVar11 + iVar3 + 1) << 3; lVar16 = (longlong)(iVar11 + iVar3) << 3; do { lVar6 = FUN_14007a110((longlong)piVar2); lVar7 = FUN_14007a110((longlong)piVar2); FUN_1400c2980((longlong *)(lVar15 + lVar7),(longlong *)(lVar16 + lVar6)); lVar16 = lVar16 + -8; lVar15 = lVar15 + -8; iVar11 = iVar11 + -1; } while (-1 < iVar11); } lVar15 = FUN_14007a110((longlong)piVar2); ppuVar10 = &local_70; FUN_1400c2980((longlong *)(lVar15 + (longlong)iVar3 * 8),(longlong *)ppuVar10); puVar4 = local_70; if (puVar5 != (undefined8 *)0x0) { plVar9 = puVar5 + 1; *plVar9 = *plVar9 + -1; if (*plVar9 == 0) { puVar5 = (undefined8 *)*local_70; if (puVar5 != (undefined8 *)0x0) { FUN_1400741a0(puVar5); operator_delete(puVar5); } FUN_14006cc60(puVar4); } } iVar14 = iVar14 + 1; } while (iVar14 < iVar12); } local_60 = param_1; FUN_14006b350(param_1); local_58 = 1; local_res18 = 0; if (0 < param_2) { do { puVar5 = operator_new(0x28); if (puVar5 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { param_3 = param_1; puVar5 = FUN_140074090(puVar5,FUN_1400c8980,param_1); } if (puVar5 == (undefined8 *)0x0) { local_88 = (undefined8 *)0x0; } else { local_88 = (undefined8 *)FUN_14006cbf0(0x10); local_88[1] = 1; *local_88 = puVar5; } iVar12 = param_1[0x1e]; lVar15 = (longlong)iVar12; if (iVar12 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } iVar14 = param_1[0x1e]; uVar1 = iVar14 + 1; ppuVar10 = (undefined8 **)(ulonglong)uVar1; FUN_1400c6490((longlong)(param_1 + 0x18),uVar1,param_3,uVar13); iVar14 = iVar14 - iVar12; if ((0 < iVar14) && (iVar14 = iVar14 + -1, lVar16 = (longlong)iVar14, -1 < iVar14)) { lVar6 = (lVar16 + lVar15) * 8 + 8; do { lVar7 = FUN_14007a110((longlong)(param_1 + 0x18)); lVar8 = FUN_14007a110((longlong)(param_1 + 0x18)); plVar9 = (longlong *)(lVar6 + lVar8); ppuVar10 = *(undefined8 ***)(lVar7 + -8 + lVar6); if (ppuVar10 != (undefined8 **)*plVar9) { if (ppuVar10 != (undefined8 **)0x0) { ppuVar10 = (undefined8 **)((longlong)ppuVar10[1] + 1); *(undefined8 ***)(*(longlong *)(lVar7 + -8 + lVar6) + 8) = ppuVar10; } puVar5 = (undefined8 *)0x0; if ((*plVar9 != 0) && (*(longlong *)(*plVar9 + 8) = *(longlong *)(*plVar9 + 8) + -1, *(longlong *)(*plVar9 + 8) == 0)) { puVar5 = (undefined8 *)*plVar9; } *plVar9 = *(longlong *)(lVar7 + -8 + lVar6); if (puVar5 != (undefined8 *)0x0) { puVar4 = (undefined8 *)*puVar5; if (puVar4 != (undefined8 *)0x0) { FUN_1400741a0(puVar4); operator_delete(puVar4); } FUN_14006cc60(puVar5); } } lVar6 = lVar6 + -8; lVar16 = lVar16 + -1; } while (-1 < lVar16); } lVar16 = FUN_14007a110((longlong)(param_1 + 0x18)); if (local_88 != *(undefined8 **)(lVar16 + lVar15 * 8)) { if (local_88 != (undefined8 *)0x0) { local_88[1] = local_88[1] + 1; } puVar5 = (undefined8 *)0x0; lVar6 = *(longlong *)(lVar16 + lVar15 * 8); if ((lVar6 != 0) && (*(longlong *)(*(longlong *)(lVar16 + lVar15 * 8) + 8) = *(longlong *)(lVar6 + 8) + -1, *(longlong *)(*(longlong *)(lVar16 + lVar15 * 8) + 8) == 0)) { puVar5 = *(undefined8 **)(lVar16 + lVar15 * 8); } *(undefined8 **)(lVar16 + lVar15 * 8) = local_88; if (puVar5 != (undefined8 *)0x0) { puVar4 = (undefined8 *)*puVar5; if (puVar4 != (undefined8 *)0x0) { FUN_1400741a0(puVar4); operator_delete(puVar4); } FUN_14006cc60(puVar5); } } if (local_88 != (undefined8 *)0x0) { plVar9 = local_88 + 1; *plVar9 = *plVar9 + -1; if (*plVar9 == 0) { puVar5 = (undefined8 *)*local_88; if (puVar5 != (undefined8 *)0x0) { FUN_1400741a0(puVar5); operator_delete(puVar5); } FUN_14006cc60(local_88); } } local_res18 = local_res18 + 1; } while (local_res18 < param_2); } FUN_14006b3e0((longlong)param_1); plVar9 = (longlong *)0x0; if (*(undefined8 **)(param_1 + 0x22) != (undefined8 *)0x0) { plVar9 = (longlong *)**(undefined8 **)(param_1 + 0x22); } FUN_140074290(plVar9,ppuVar10,param_3,uVar13); plVar9 = (longlong *)0x0; if (*(undefined8 **)(param_1 + 0x24) != (undefined8 *)0x0) { plVar9 = (longlong *)**(undefined8 **)(param_1 + 0x24); } FUN_140074290(plVar9,ppuVar10,param_3,uVar13); iVar12 = 0; lVar15 = 0; if (0 < param_1[0x14]) { do { if ((lVar15 < 0) || (param_1[0x14] <= iVar12)) { /* WARNING: Subroutine does not return */ FUN_14006be30(plVar9,ppuVar10,param_3,uVar13); } puVar5 = *(undefined8 **)(*(longlong *)(param_1 + 0x12) + lVar15 * 8); plVar9 = (longlong *)0x0; if (puVar5 != (undefined8 *)0x0) { plVar9 = (longlong *)*puVar5; } FUN_140074290(plVar9,ppuVar10,param_3,uVar13); iVar12 = iVar12 + 1; lVar15 = lVar15 + 1; } while (iVar12 < param_1[0x14]); } iVar12 = 0; lVar15 = 0; if (0 < param_1[0x1e]) { do { if ((lVar15 < 0) || (param_1[0x1e] <= iVar12)) { /* WARNING: Subroutine does not return */ FUN_14006be30(plVar9,ppuVar10,param_3,uVar13); } puVar5 = *(undefined8 **)(*(longlong *)(param_1 + 0x1c) + lVar15 * 8); plVar9 = (longlong *)0x0; if (puVar5 != (undefined8 *)0x0) { plVar9 = (longlong *)*puVar5; } FUN_140074290(plVar9,ppuVar10,param_3,uVar13); iVar12 = iVar12 + 1; lVar15 = lVar15 + 1; } while (iVar12 < param_1[0x1e]); } return; }