/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14004c590 FUN_14004c590 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_14004c590(longlong param_1,uint *param_2,longlong param_3,TypeDescriptor *param_4) { bool bVar1; undefined4 *puVar2; ulonglong uVar3; longlong lVar4; longlong lVar5; ulonglong uVar6; ulonglong uVar7; undefined1 *puVar8; undefined1 *puVar9; int iVar10; ulonglong uVar11; longlong *plVar12; longlong lVar13; TypeDescriptor *pTVar14; uint uVar15; longlong *plVar16; double dVar17; undefined8 uVar18; double dVar19; undefined1 auStack_d8 [32]; undefined4 local_b8; longlong local_a8; longlong local_a0; double local_98; ulonglong local_90; uint *local_88; longlong *local_80; undefined8 local_60; ulonglong local_58; puVar9 = auStack_d8; puVar8 = auStack_d8; local_60 = 0xfffffffffffffffe; local_58 = DAT_1401555a0 ^ (ulonglong)&local_a8; dVar17 = (double)(**(code **)(*(longlong *)(param_1 + 0x118) + 8))(); local_98 = dVar17; if ((*(longlong *)(param_2 + 10) == 0) || ((char)param_2[0x22] == '\0')) { FUN_14003e030((longlong)(param_2 + 0x18),0,param_3); goto LAB_14004cb4e; } local_88 = param_2 + 2; uVar11 = 0; uVar3 = uVar11; if (*(longlong *)(param_2 + 10) != 0) { uVar3 = *(ulonglong *)(param_2 + 6); } while (uVar6 = uVar3, local_90 = uVar6, uVar6 != 0) { if (uVar6 == 0) { /* WARNING: Subroutine does not return */ FUN_14000b450(0x80004005); } local_80 = *(longlong **)(uVar6 + 8); local_a0 = 0; local_b8 = 0; param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor; pTVar14 = &Proud::CP2PGroupMemberBase_S::RTTI_Type_Descriptor; lVar4 = __RTDynamicCast(*(undefined8 *)(uVar6 + 0x10),0); local_a0 = lVar4; if ((lVar4 != 0) && ((((*(double *)(lVar4 + 0x1b0) == 0.0 || ((int)param_2[0x1e] < 1)) || (**(int **)(param_2 + 0x1c) != *(int *)(lVar4 + 0x6f8))) || (*(char *)(lVar4 + 0x700) == '\0')))) { *(undefined8 *)(lVar4 + 0x1b0) = 0; if (*(char *)(lVar4 + 0x700) != '\0') { *(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x24) + 0.0; } bVar1 = FUN_140095420(lVar4); if (!bVar1) { *(double *)(lVar4 + 0x1b0) = *(double *)(param_2 + 0x26) + *(double *)(lVar4 + 0x1b0); } dVar19 = *(double *)(lVar4 + 0x1b0) - *(double *)(lVar4 + 0x1c8) * *(double *)(param_2 + 0x28) ; *(double *)(lVar4 + 0x1b0) = dVar19; *(double *)(lVar4 + 0x1b0) = *(double *)(lVar4 + 0x1e0) * *(double *)(param_2 + 0x2e) + dVar19 ; dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4); if (0.0 <= dVar19) { dVar19 = (double)FUN_140096240(lVar4,*param_2,pTVar14,param_4); } else { dVar19 = 0.0; } dVar19 = *(double *)(lVar4 + 0x1b0) - dVar19 * *(double *)(param_2 + 0x2a); *(double *)(lVar4 + 0x1b0) = dVar19; *(double *)(lVar4 + 0x1b0) = *(double *)(lVar4 + 400) * *(double *)(param_2 + 0x2c) * 10485760.0 + dVar19; if ((0.0 < *(double *)(param_2 + 0x30)) && (dVar17 - (double)local_80 < *(double *)(param_2 + 0x30))) { *(undefined8 *)(lVar4 + 0x1b0) = 0xc65c662460d49e87; } } uVar3 = uVar11; if (uVar6 != 0) { uVar3 = *(ulonglong *)(uVar6 + 0x18); } } lVar4 = *(longlong *)(param_2 + 10); if (lVar4 * 0x18 + 0x10U < 0x401) { uVar3 = lVar4 * 0x18 + 0x1f; if (uVar3 <= lVar4 * 0x18 + 0x10U) { uVar3 = 0xffffffffffffff0; } lVar4 = -(uVar3 & 0xfffffffffffffff0); puVar8 = auStack_d8 + lVar4; puVar2 = (undefined4 *)((longlong)&local_a8 + lVar4); plVar12 = (longlong *)0x0; puVar9 = auStack_d8 + lVar4; if (puVar2 != (undefined4 *)0x0) { *puVar2 = 0xcccc; LAB_14004c6c7: plVar12 = (longlong *)(puVar2 + 4); puVar9 = puVar8; } } else { puVar2 = malloc(lVar4 * 0x18 + 0x10); plVar12 = (longlong *)0x0; puVar9 = auStack_d8; if (puVar2 != (undefined4 *)0x0) { *puVar2 = 0xdddd; goto LAB_14004c6c7; } } local_a8._0_4_ = 0; local_88 = param_2 + 2; uVar3 = uVar11; uVar6 = uVar11; local_80 = plVar12; if (*(longlong *)(param_2 + 10) != 0) { uVar3 = *(ulonglong *)(param_2 + 6); } while (uVar7 = uVar3, uVar15 = (uint)uVar6, local_90 = uVar7, uVar7 != 0) { local_a0 = 0; if (uVar7 == 0) { /* WARNING: Subroutine does not return */ *(undefined8 *)(puVar9 + -8) = 0x14004c8d1; FUN_14000b450(0x80004005); } *(undefined4 *)(puVar9 + 0x20) = 0; param_4 = &Proud::CRemoteClient_S::RTTI_Type_Descriptor; uVar18 = *(undefined8 *)(uVar7 + 0x10); *(undefined8 *)(puVar9 + -8) = 0x14004c8ee; local_a0 = __RTDynamicCast(uVar18,0); if (local_a0 != 0) { lVar4 = (longlong)(int)uVar15; plVar12[lVar4 * 3] = local_a0; plVar12[lVar4 * 3 + 1] = (longlong)param_2; if (uVar7 == 0) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c93d; FUN_14000b450(0x80004005); } plVar12[lVar4 * 3 + 2] = (longlong)(dVar17 - *(double *)(uVar7 + 8)); local_a8._0_4_ = uVar15 + 1; uVar6 = (ulonglong)(uint)local_a8; } uVar3 = uVar11; if (uVar7 != 0) { uVar3 = *(ulonglong *)(uVar7 + 0x18); } } lVar13 = 0; *(undefined8 *)(puVar9 + -8) = 0x14004c715; FUN_140043ff0((longlong)plVar12,uVar15,0); *(undefined8 *)(puVar9 + -8) = 0x14004c721; FUN_14003e030((longlong)(param_2 + 0x18),uVar15,lVar13); local_a8 = 0; lVar4 = (longlong)(int)uVar15; local_98 = (double)lVar4; uVar3 = uVar11; plVar16 = plVar12; if (0 < (int)uVar15) { do { if ((local_a8 < 0) || (iVar10 = (int)uVar11, (int)param_2[0x1e] <= iVar10)) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c892; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined4 *)(uVar3 + lVar4) = *(undefined4 *)(*plVar16 + 0x6f8); if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c88c; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined8 *)(lVar4 + 8 + uVar3) = *(undefined8 *)(*plVar16 + 0x1b0); if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c886; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined1 *)(lVar4 + 0x10 + uVar3) = *(undefined1 *)(*plVar16 + 0x700); if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c880; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); lVar5 = *plVar16; *(undefined8 *)(puVar9 + -8) = 0x14004c7b4; bVar1 = FUN_140095420(lVar5); *(bool *)(uVar3 + 0x11 + lVar4) = bVar1; if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c87a; FUN_14002f5c0(lVar5,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined8 *)(lVar4 + 0x18 + uVar3) = *(undefined8 *)(*plVar16 + 0x1c8); if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c874; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); uVar15 = *param_2; uVar6 = (ulonglong)uVar15; lVar5 = *plVar16; *(undefined8 *)(puVar9 + -8) = 0x14004c7f0; uVar18 = FUN_140096240(lVar5,uVar15,lVar13,param_4); *(undefined8 *)(uVar3 + 0x20 + lVar4) = uVar18; if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c86e; FUN_14002f5c0(lVar5,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined8 *)(lVar4 + 0x28 + uVar3) = *(undefined8 *)(*plVar16 + 400); if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c868; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(longlong *)(lVar4 + 0x30 + uVar3) = plVar16[2]; if ((int)param_2[0x1e] <= iVar10) { /* WARNING: Subroutine does not return */ *(undefined **)(puVar9 + -8) = &UNK_14004c862; FUN_14002f5c0(lVar4,uVar6,lVar13,param_4); } lVar4 = *(longlong *)(param_2 + 0x1c); *(undefined8 *)(lVar4 + 0x38 + uVar3) = *(undefined8 *)(*plVar16 + 0x1e0); uVar11 = (ulonglong)(iVar10 + 1); local_a8 = local_a8 + 1; uVar3 = uVar3 + 0x40; plVar16 = plVar16 + 3; } while (local_a8 < (longlong)local_98); } if ((plVar12 != (longlong *)0x0) && ((int)plVar12[-2] == 0xdddd)) { *(undefined8 *)(puVar9 + -8) = 0x14004c8b2; free(plVar12 + -2); } LAB_14004cb4e: *(undefined8 *)(puVar9 + -8) = 0x14004cb5a; return; }