/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400bc4c0 FUN_1400bc4c0 * Pseudocode, not original source. */ void FUN_1400bc4c0(wchar_t *param_1,LPVOID param_2,longlong *param_3,undefined8 param_4) { undefined8 *puVar1; LPVOID pvVar2; wchar_t *pwVar3; int iVar4; longlong lVar5; pwVar3 = param_1; FUN_14002e6e0((int *)param_1); if (0 < *(int *)(param_1 + 0x24)) { pwVar3 = L"CHeartbeatWorkThread must be cleaned up only after every work items are unregistered!"; FUN_14002fa10( L"CHeartbeatWorkThread must be cleaned up only after every work items are unregistered!" ); } *(undefined1 *)(param_1 + 0x40) = 0; iVar4 = 0; lVar5 = 0; if (0 < *(int *)(param_1 + 0x34)) { do { if ((lVar5 < 0) || (*(int *)(param_1 + 0x34) <= iVar4)) { /* WARNING: Subroutine does not return */ FUN_14002f5c0(pwVar3,param_2,param_3,param_4); } puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x30) + lVar5 * 8); pwVar3 = (wchar_t *)0x0; if (puVar1 != (undefined8 *)0x0) { pwVar3 = (wchar_t *)*puVar1; } FUN_1400375f0((undefined8 *)pwVar3); iVar4 = iVar4 + 1; lVar5 = lVar5 + 1; } while (iVar4 < *(int *)(param_1 + 0x34)); } FUN_14002e770((longlong)param_1); *(undefined ***)(param_1 + 0x28) = Proud::CFastArray,0>::vftable; pvVar2 = (LPVOID)(longlong)*(int *)(param_1 + 0x34); if (0 < *(int *)(param_1 + 0x34)) { FUN_1400bc420(*(longlong **)(param_1 + 0x30),(longlong)pvVar2); param_2 = pvVar2; } pvVar2 = *(LPVOID *)(param_1 + 0x30); if (pvVar2 != (LPVOID)0x0) { param_3 = *(longlong **)(param_1 + 0x2c); if (param_3 == (longlong *)0x0) { FUN_1400302f0(pvVar2); } else { (**(code **)(*param_3 + 0x18))(param_3); param_2 = pvVar2; } } FUN_1400bc060((longlong *)(param_1 + 0x1c)); FUN_14002e7a0((undefined4 *)param_1,param_2,param_3,param_4); return; }