/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14008f270 FUN_14008f270 * Pseudocode, not original source. */ ulonglong FUN_14008f270(longlong param_1,ulonglong param_2,ulonglong *param_3,undefined8 param_4) { longlong *plVar1; undefined8 *puVar2; undefined8 *puVar3; uint uVar4; uint uVar5; ulonglong *puVar6; undefined8 uVar7; uint *puVar8; ulonglong *puVar9; int *piVar10; undefined ***pppuVar11; undefined8 **ppuVar12; char *pcVar13; uint *puVar14; uint uVar15; uint uVar16; uint uVar17; ulonglong *puVar18; longlong *plVar19; ulonglong uVar20; uint **ppuVar21; uint *local_res8; int *local_res20; undefined8 *local_98; undefined8 local_90; int *local_88; undefined1 local_80; int *local_78; undefined1 local_70; undefined **local_68; undefined8 local_60; undefined8 local_58; undefined8 local_50; undefined8 local_48; local_90 = 0xfffffffffffffffe; plVar19 = (longlong *)(param_2 & 0xffffffff); puVar18 = param_3; local_res8 = (uint *)FUN_14006cbf0(0x400); puVar9 = (ulonglong *)0x0; uVar16 = 0; uVar17 = 0; puVar6 = puVar9; if (local_res8 != (uint *)0x0) { puVar18 = (ulonglong *)(param_1 + 0x60); if (param_1 == 0) { puVar18 = puVar9; } puVar6 = FUN_1400724c0((undefined8 *)local_res8,0,puVar18,param_4); } if (puVar6 == (ulonglong *)0x0) { local_98 = (undefined8 *)0x0; } else { local_98 = (undefined8 *)FUN_14006cbf0(0x10); local_98[1] = 1; *local_98 = puVar6; } puVar2 = local_98; ppuVar12 = &local_98; FUN_14006e8a0((longlong *)(param_1 + 0x748),(longlong *)ppuVar12); puVar3 = local_98; if (puVar2 != (undefined8 *)0x0) { plVar1 = puVar2 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { plVar1 = (longlong *)*local_98; if (plVar1 != (longlong *)0x0) { FUN_140072370(plVar1,ppuVar12,(longlong *)puVar18,param_4); FUN_14006cc60(plVar1); } FUN_14006cc60(puVar3); } } puVar6 = puVar9; if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) { puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748); } *(undefined1 *)((longlong)puVar6 + 0x314) = 1; pcVar13 = *(char **)(param_1 + 0x218); if (*(char **)(param_1 + 0x218) == (char *)0x0) { pcVar13 = PTR_DAT_1401ac008; } puVar6 = puVar9; if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) { puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748); } uVar7 = FUN_140073b00((longlong)puVar6,pcVar13,(short)plVar19,param_4); if ((char)uVar7 != '\0') { puVar6 = puVar9; if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) { puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748); } FUN_1400734d0((longlong)puVar6,pcVar13,plVar19,param_4); puVar6 = puVar9; if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) { puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748); } FUN_1400716c0((longlong)puVar6,param_1 + 0xb0,plVar19,param_4); if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) { puVar9 = (ulonglong *)**(undefined8 **)(param_1 + 0x748); } uVar7 = FUN_1400765b0(*(longlong *)(param_1 + 0x790),(longlong *)puVar9,plVar19,param_4); return CONCAT71((int7)((ulonglong)uVar7 >> 8),1); } FUN_14006cb70(puVar6,pcVar13,plVar19,param_4); local_res8 = (uint *)PTR_DAT_1401ac010; uVar4 = FUN_14006c9f0(&DAT_14015cd00); if ((local_res8 != (uint *)0x0) && (puVar9 = (ulonglong *)0x0, local_res8 != (uint *)PTR_DAT_1401ac010)) { puVar9 = (ulonglong *)(ulonglong)local_res8[-2]; } uVar5 = uVar4; if ((((int)uVar4 <= (int)puVar9) && (uVar5 = uVar17, local_res8 != (uint *)0x0)) && (local_res8 != (uint *)PTR_DAT_1401ac010)) { uVar5 = local_res8[-2]; } uVar15 = 1; if (1 < (int)uVar5) { uVar15 = uVar5; } uVar5 = uVar17; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) { uVar5 = local_res8[-2]; } if ((int)uVar5 < (int)uVar15) { if (local_res8 == (uint *)0x0) { local_res8 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar15 == 0) { FUN_1400031e0((longlong *)&local_res8,PTR_DAT_1401ac010,puVar9,param_4); } else { uVar5 = uVar17; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) { uVar5 = local_res8[-2]; } if (uVar15 != uVar5) { puVar8 = (uint *)FUN_14006cbf0((longlong)(int)uVar15 * 2 + 10); if (puVar8 != (uint *)0x0) { *puVar8 = 0; puVar8[1] = 1; } *puVar8 = uVar15; uVar5 = uVar17; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) { uVar5 = local_res8[-2]; } puVar14 = (uint *)PTR_DAT_1401ac010; if ((int)uVar15 < (int)uVar5) { LAB_14008f48d: if (local_res8 != (uint *)0x0) { puVar14 = local_res8; } } else { uVar15 = uVar17; if (local_res8 != (uint *)0x0) { if (local_res8 != (uint *)PTR_DAT_1401ac010) { uVar15 = local_res8[-2]; } goto LAB_14008f48d; } } uVar20 = (ulonglong)uVar15; FUN_14006ca20(puVar8 + 2,puVar14,uVar15); FUN_1400031e0((longlong *)&local_res8,puVar14,uVar20,param_4); local_res8 = puVar8 + 2; } } } FUN_140002e40((longlong *)&local_res8); puVar8 = local_res8; if (local_res8 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar8,&DAT_14015cd00,uVar4); puVar8 = local_res8; if (local_res8 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_1401ac010; } uVar4 = FUN_14006c9f0((short *)puVar8); uVar17 = uVar16; if (0 < (int)uVar4) { uVar17 = uVar4; } uVar4 = uVar16; if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) { uVar4 = local_res8[-2]; } if (((int)uVar4 <= (int)uVar17) && (uVar17 = uVar16, local_res8 != (uint *)0x0)) { if (local_res8 == (uint *)PTR_DAT_1401ac010) goto LAB_14008f53d; uVar17 = local_res8[-2]; } if (((local_res8 != (uint *)PTR_DAT_1401ac010) && (local_res8 != (uint *)0x0)) && (local_res8 + -2 != (uint *)0x0)) { local_res8[-2] = uVar17; *(undefined2 *)((longlong)local_res8 + (longlong)(int)uVar17 * 2) = 0; } LAB_14008f53d: local_60 = 0; local_58 = 0; local_50 = 0; local_48 = 0; local_68 = Proud::ByteArray::vftable; ppuVar21 = &local_res8; uVar7 = 1; puVar9 = (ulonglong *) FUN_140078c10((longlong *)&local_res20,0x10,1,(longlong *)ppuVar21,(longlong)&local_68); FUN_140078ae0(param_3,puVar9,uVar7,ppuVar21); piVar10 = local_res20; if (local_res20 != (int *)0x0) { local_88 = local_res20; FUN_14006b350(local_res20); local_80 = 1; *(longlong *)(local_res20 + 0x10) = *(longlong *)(local_res20 + 0x10) + -1; if (*(longlong *)(local_res20 + 0x10) == 0) { FUN_14006b3e0((longlong)piVar10); local_80 = 0; FUN_1400640e0(local_res20,puVar9,uVar7,ppuVar21); } else { FUN_14006b3e0((longlong)piVar10); } } pppuVar11 = &local_68; FUN_140078360(pppuVar11); puVar8 = local_res8; if (((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) && (puVar14 = local_res8 + -2, puVar14 != (uint *)0x0)) { piVar10 = (int *)FUN_14006cb70(pppuVar11,puVar9,uVar7,ppuVar21); local_78 = piVar10; FUN_14006b350(piVar10); local_70 = 1; puVar8 = puVar8 + -1; *puVar8 = *puVar8 - 1; if (*puVar8 == 0) { FUN_14006cc60(puVar14); } local_res8 = (uint *)FUN_14006b3e0((longlong)piVar10); } return (ulonglong)local_res8 & 0xffffffffffffff00; }