/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a8d60 FUN_1401a8d60 * Pseudocode, not original source. */ void FUN_1401a8d60(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { undefined8 *puVar1; void *pvVar2; longlong *plVar3; undefined8 uVar4; undefined8 uVar5; int iVar6; longlong lVar7; undefined8 uVar8; uVar8 = 0xfffffffffffffffe; uVar4 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); uVar5 = uVar4; FUN_14016db50(uVar4); if (DAT_14034c86f != '\0') { lVar7 = **(longlong **)(param_1 + 0x148); (**(code **)(lVar7 + 200)) (*(longlong **)(param_1 + 0x148),L"Proud::CNetThreads_S::~CNetThreads_S",lVar7,param_4 ,uVar8,uVar5,1); } *(undefined1 *)(param_1 + 0x140) = 1; FUN_14016dbe0(uVar4); uVar5 = 0; if (*(undefined8 **)(param_1 + 0x88) != (undefined8 *)0x0) { uVar5 = **(undefined8 **)(param_1 + 0x88); } FUN_140199740(uVar5); if (*(undefined8 **)(param_1 + 0x90) == (undefined8 *)0x0) { uVar5 = 0; } else { uVar5 = **(undefined8 **)(param_1 + 0x90); } FUN_140199740(uVar5); FUN_14016db50(param_1); iVar6 = 0; lVar7 = 0; if (0 < *(int *)(param_1 + 0x78)) { do { if ((lVar7 < 0) || (*(int *)(param_1 + 0x78) <= iVar6)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x70) + lVar7 * 8); uVar5 = 0; if (puVar1 != (undefined8 *)0x0) { uVar5 = *puVar1; } FUN_140199740(uVar5); iVar6 = iVar6 + 1; lVar7 = lVar7 + 1; } while (iVar6 < *(int *)(param_1 + 0x78)); } FUN_14016dbe0(param_1); iVar6 = 0; lVar7 = 0; if (0 < *(int *)(param_1 + 0x50)) { do { if ((lVar7 < 0) || (*(int *)(param_1 + 0x50) <= iVar6)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x48) + lVar7 * 8); uVar5 = 0; if (puVar1 != (undefined8 *)0x0) { uVar5 = *puVar1; } FUN_140199740(uVar5); iVar6 = iVar6 + 1; lVar7 = lVar7 + 1; } while (iVar6 < *(int *)(param_1 + 0x50)); } CloseHandle(*(HANDLE *)(param_1 + 0x180)); FUN_1401a3e90(param_1 + 0x168); FUN_140199830(param_1 + 0x158); FUN_1401c38c0(param_1 + 0x150); if ((*(longlong *)(param_1 + 0x90) != 0) && (*(longlong *)(*(longlong *)(param_1 + 0x90) + 8) = *(longlong *)(*(longlong *)(param_1 + 0x90) + 8) + -1, *(longlong *)(*(longlong *)(param_1 + 0x90) + 8) == 0)) { puVar1 = *(undefined8 **)(param_1 + 0x90); pvVar2 = (void *)*puVar1; if (pvVar2 != (void *)0x0) { FUN_1401997c0(pvVar2); operator_delete(pvVar2); } FUN_14016d970(puVar1); } if ((*(longlong *)(param_1 + 0x88) != 0) && (*(longlong *)(*(longlong *)(param_1 + 0x88) + 8) = *(longlong *)(*(longlong *)(param_1 + 0x88) + 8) + -1, *(longlong *)(*(longlong *)(param_1 + 0x88) + 8) == 0)) { puVar1 = *(undefined8 **)(param_1 + 0x88); pvVar2 = (void *)*puVar1; if (pvVar2 != (void *)0x0) { FUN_1401997c0(pvVar2); operator_delete(pvVar2); } FUN_14016d970(puVar1); } *(undefined ***)(param_1 + 0x60) = Proud::CFastArray,0>::vftable; if (0 < *(int *)(param_1 + 0x78)) { FUN_1401a7f40(*(undefined8 *)(param_1 + 0x70),(longlong)*(int *)(param_1 + 0x78)); } if (*(longlong *)(param_1 + 0x70) != 0) { plVar3 = *(longlong **)(param_1 + 0x68); if (plVar3 == (longlong *)0x0) { FUN_14016d970(); } else { (**(code **)(*plVar3 + 0x18))(plVar3,*(longlong *)(param_1 + 0x70)); } } *(undefined ***)(param_1 + 0x38) = Proud::CFastArray,0>::vftable; if (0 < *(int *)(param_1 + 0x50)) { FUN_1401a7f40(*(undefined8 *)(param_1 + 0x48),(longlong)*(int *)(param_1 + 0x50)); } if (*(longlong *)(param_1 + 0x48) != 0) { plVar3 = *(longlong **)(param_1 + 0x40); if (plVar3 == (longlong *)0x0) { FUN_14016d970(); } else { (**(code **)(*plVar3 + 0x18))(plVar3,*(longlong *)(param_1 + 0x48)); } } FUN_14016dc00(param_1); return; }