decomp DBCServer_Release and inspect/document database

This commit is contained in:
Benjamin Palko 2026-10-14 23:22:03 -04:00
parent 4b267cbe05
commit 7834b98bf0
28222 changed files with 843300 additions and 144 deletions

View file

@ -0,0 +1,724 @@
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x140091f40 FUN_140091f40
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
ulonglong FUN_140091f40(longlong param_1,longlong *param_2,undefined ***param_3,ulonglong param_4)
{
int iVar1;
undefined *puVar2;
void *pvVar3;
int iVar4;
DWORD DVar5;
DWORD DVar6;
DWORD DVar7;
byte *pbVar8;
uint *puVar9;
longlong *plVar10;
undefined ***pppuVar11;
byte **ppbVar12;
int *piVar13;
undefined8 *puVar14;
byte *pbVar15;
ulonglong uVar16;
byte *pbVar17;
byte *pbVar18;
uint uVar19;
byte *pbVar20;
uint *puVar21;
wchar_t *pwVar22;
LPCWSTR pWVar23;
longlong *plVar24;
uint uVar25;
longlong lVar26;
undefined *puVar27;
SIZE_T SVar28;
undefined8 uVar29;
undefined ***pppuVar30;
uint **ppuVar31;
uint *puVar32;
uint uVar33;
uint uVar35;
longlong lVar36;
double dVar37;
undefined1 auStackY_488 [32];
uint *local_458;
undefined ***local_450;
byte *local_448;
char *local_440;
byte *local_438;
undefined **local_430;
longlong *local_428;
longlong *local_420;
ulonglong local_418;
undefined8 local_410;
undefined *local_408;
undefined **local_400;
undefined8 local_3f8;
byte *local_3f0;
undefined8 local_3e8;
undefined8 local_3e0;
undefined **local_3d8;
longlong *local_3d0;
byte *local_3c8;
ulonglong local_3c0;
undefined4 local_3b8;
undefined4 local_3b4;
undefined **local_3b0;
undefined8 local_3a8;
byte *local_3a0;
undefined8 local_398;
undefined8 local_390;
undefined **local_388;
longlong local_380;
byte *local_378;
undefined8 local_370;
undefined4 local_368;
undefined4 local_364;
undefined4 *local_360;
char *local_358;
undefined **local_350;
undefined8 local_348;
undefined8 local_340;
undefined8 local_338;
undefined8 local_330;
int *local_328;
undefined1 local_320;
byte **local_318;
undefined1 local_310;
int *local_308;
undefined1 local_300;
undefined ***local_2f8;
undefined1 local_2f0;
undefined8 local_2e8;
int *local_2e0;
undefined1 local_2d8;
exception local_2d0 [24];
exception local_2b8 [24];
exception local_2a0 [72];
exception local_258 [72];
exception local_210 [72];
exception local_1c8 [72];
undefined8 local_180 [3];
char *local_168;
char local_160 [136];
char *local_d8;
char local_d0 [136];
ulonglong local_48;
byte *pbVar34;
pppuVar30 = &local_388;
local_2e8 = 0xfffffffffffffffe;
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStackY_488;
local_2e0 = (int *)(param_1 + 0xb8);
local_450 = param_3;
FUN_14006b350(local_2e0);
local_2d8 = 1;
if ((*(longlong **)(param_1 + 0x6a0) != (longlong *)0x0) &&
(**(longlong **)(param_1 + 0x6a0) != 0)) goto LAB_140092d71;
DVar5 = *(DWORD *)((longlong)param_2 + 0x54);
if (DVar5 == 0) {
DVar5 = FUN_14006c0c0();
*(DWORD *)((longlong)param_2 + 0x54) = DVar5;
}
if ((int)DVar5 < 0) {
FUN_14006ba50(local_210,L"Invalid thread count",param_3,param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_210,(ThrowInfo *)&DAT_1401a93e8);
}
uVar16 = (ulonglong)param_3 & 0xffffffffffffff00;
ppuVar31 = (uint **)(param_4 & 0xffffffffffffff00);
pbVar15 = (byte *)0x0;
uVar25 = 0;
pbVar17 = pbVar15;
pbVar18 = pbVar15;
if (0 < (int)param_2[6]) {
do {
if (((longlong)pbVar17 < 0) || ((int)param_2[6] <= (int)pbVar18)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pbVar17,pbVar18,uVar16,ppuVar31);
}
if (*(int *)(param_2[5] + (longlong)pbVar17 * 4) == 0) {
ppuVar31 = (uint **)CONCAT71((int7)((ulonglong)ppuVar31 >> 8),1);
}
else {
uVar16 = CONCAT71((int7)(uVar16 >> 8),1);
}
uVar19 = (int)pbVar18 + 1;
pbVar18 = (byte *)(ulonglong)uVar19;
pbVar17 = pbVar17 + 1;
} while ((int)uVar19 < (int)param_2[6]);
if (((char)ppuVar31 != '\0') && ((char)uVar16 != '\0')) {
FUN_14006ba50(local_258,
L"Cannot assign non-zero UDP port number with zero UDP port number! All non-zero or all zero must be guaranteed!"
,uVar16,ppuVar31);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_258,(ThrowInfo *)&DAT_1401a93e8);
}
}
iVar1 = *(int *)((longlong)param_2 + 0x5c);
if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) {
FUN_14006ba50(local_1c8,L"Invalid key length!",uVar16,ppuVar31);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_1c8,(ThrowInfo *)&DAT_1401a93e8);
}
local_3d8 = Proud::CFastArray<int,0>::vftable;
if (DAT_1401ac8a0 != 5) {
FUN_140078250();
}
local_3d0 = (longlong *)param_2[4];
local_3b4 = *(undefined4 *)((longlong)param_2 + 0x3c);
local_3c8 = (byte *)0x0;
local_3c0 = 0;
local_3b8 = 0;
iVar1 = (int)param_2[6];
lVar36 = (longlong)iVar1;
if (iVar1 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
FUN_140063f80((longlong)&local_3d8,iVar1,uVar16,(longlong)ppuVar31);
pbVar17 = local_3c8;
iVar4 = (int)local_3c0;
pbVar18 = local_3c8;
if ((int)local_3c0 == 0) {
pbVar18 = pbVar15;
}
pbVar20 = pbVar15;
if ((int)param_2[6] != 0) {
pbVar20 = (byte *)param_2[5];
}
if (0 < iVar1) {
lVar26 = (longlong)pbVar20 - (longlong)pbVar18;
do {
*(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar26);
pbVar18 = pbVar18 + 4;
lVar36 = lVar36 + -1;
} while (lVar36 != 0);
}
pbVar18 = local_3c8;
if ((int)local_3c0 == 0) {
pbVar18 = pbVar15;
}
pbVar20 = (byte *)(local_3c0 & 0xffffffff);
FUN_14008cc20((longlong)pbVar18,(int)local_3c0,0);
uVar19 = iVar4 - 1;
puVar27 = (undefined *)(ulonglong)uVar19;
pbVar8 = pbVar15;
pbVar34 = pbVar15;
if (0 < (int)uVar19) {
do {
if (((longlong)pbVar8 < 0) || (iVar4 <= (int)pbVar34)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31);
}
pbVar20 = pbVar8 + 1;
if ((longlong)pbVar20 < 0) {
LAB_1400921bc:
/* WARNING: Subroutine does not return */
FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31);
}
uVar33 = (int)pbVar34 + 1;
pbVar34 = (byte *)(ulonglong)uVar33;
if (iVar4 <= (int)uVar33) goto LAB_1400921bc;
uVar35 = *(uint *)(pbVar17 + (longlong)pbVar8 * 4);
pbVar18 = (byte *)(ulonglong)uVar35;
if ((uVar35 == *(uint *)(pbVar17 + (longlong)pbVar8 * 4 + 4)) && (uVar35 != 0)) {
FUN_14006ba50(local_2a0,L"Cannot add duplicated UDP port number!",puVar27,ppuVar31);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_2a0,(ThrowInfo *)&DAT_1401a93e8);
}
pbVar8 = pbVar20;
} while ((int)uVar33 < (int)uVar19);
}
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
local_428 = (longlong *)0x0;
local_420 = (longlong *)0x0;
local_418 = 0;
local_410 = 0;
pppuVar11 = &local_430;
FUN_140071210((longlong)pppuVar11,pbVar20,(ulonglong)puVar27,ppuVar31);
DVar5 = 0;
if ((1 < (int)local_418) &&
(((puVar2 = (undefined *)param_2[1], puVar2 == (undefined *)0x0 ||
(puVar2 == PTR_DAT_1401ac010)) || (*(int *)(puVar2 + -8) == 0)))) {
FUN_14006cb70(pppuVar11,pbVar20,puVar27,ppuVar31);
local_458 = (uint *)PTR_DAT_1401ac010;
uVar19 = FUN_14006c9f0(
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
);
pbVar18 = pbVar15;
if ((local_458 != (uint *)0x0) &&
(pbVar18 = (byte *)0x0, local_458 != (uint *)PTR_DAT_1401ac010)) {
pbVar18 = (byte *)(ulonglong)local_458[-2];
}
uVar33 = uVar19;
if ((((int)uVar19 <= (int)pbVar18) && (uVar33 = uVar25, local_458 != (uint *)0x0)) &&
(local_458 != (uint *)PTR_DAT_1401ac010)) {
uVar33 = local_458[-2];
}
uVar35 = 1;
if (1 < (int)uVar33) {
uVar35 = uVar33;
}
uVar33 = uVar25;
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
uVar33 = local_458[-2];
}
if ((int)uVar33 < (int)uVar35) {
if (local_458 == (uint *)0x0) {
local_458 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar35 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar35 == 0) {
FUN_1400031e0((longlong *)&local_458,PTR_DAT_1401ac010,pbVar18,ppuVar31);
}
else {
uVar33 = uVar25;
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
uVar33 = local_458[-2];
}
if (uVar35 != uVar33) {
puVar9 = (uint *)FUN_14006cbf0((longlong)(int)uVar35 * 2 + 10);
if (puVar9 != (uint *)0x0) {
*puVar9 = 0;
puVar9[1] = 1;
}
*puVar9 = uVar35;
DVar7 = DVar5;
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
DVar7 = local_458[-2];
}
puVar21 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar35 < (int)DVar7) {
LAB_140092321:
if (local_458 != (uint *)0x0) {
puVar21 = local_458;
}
}
else {
uVar35 = uVar25;
if (local_458 != (uint *)0x0) {
if (local_458 != (uint *)PTR_DAT_1401ac010) {
uVar35 = local_458[-2];
}
goto LAB_140092321;
}
}
uVar16 = (ulonglong)uVar35;
puVar32 = puVar21;
FUN_14006ca20(puVar9 + 2,puVar21,uVar35);
FUN_1400031e0((longlong *)&local_458,puVar21,uVar16,puVar32);
local_458 = puVar9 + 2;
}
}
}
FUN_140002e40((longlong *)&local_458);
puVar9 = local_458;
if (local_458 == (uint *)0x0) {
puVar9 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar9,
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
,uVar19);
puVar9 = local_458;
if (local_458 == (uint *)0x0) {
puVar9 = (uint *)PTR_DAT_1401ac010;
}
DVar6 = FUN_14006c9f0((short *)puVar9);
DVar7 = 0;
if (0 < (int)DVar6) {
DVar7 = DVar6;
}
DVar6 = DVar5;
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) {
DVar6 = local_458[-2];
}
if (((int)DVar7 < (int)DVar6) || (DVar7 = DVar5, local_458 == (uint *)0x0)) {
LAB_1400923c4:
if (((local_458 != (uint *)PTR_DAT_1401ac010) && (local_458 != (uint *)0x0)) &&
(local_458 + -2 != (DWORD *)0x0)) {
local_458[-2] = DVar7;
*(undefined2 *)((longlong)local_458 + (longlong)(int)DVar7 * 2) = 0;
}
}
else if (local_458 != (uint *)PTR_DAT_1401ac010) {
DVar7 = local_458[-2];
goto LAB_1400923c4;
}
local_348 = 0;
local_340 = 0;
local_338 = 0;
local_330 = 0;
local_350 = Proud::ByteArray::vftable;
ppuVar31 = &local_458;
uVar29 = 0;
plVar10 = FUN_140078c10((longlong *)&local_360,1,0,(longlong *)ppuVar31,(longlong)&local_350);
FUN_14008e530(param_1 + -0xa8,plVar10,uVar29,ppuVar31);
pppuVar11 = &local_350;
FUN_140078360(pppuVar11);
puVar9 = local_458;
if (((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) &&
(puVar21 = local_458 + -2, puVar21 != (uint *)0x0)) {
pppuVar11 = (undefined ***)FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31);
local_2f8 = pppuVar11;
FUN_14006b350((int *)pppuVar11);
local_2f0 = 1;
puVar9 = puVar9 + -1;
*puVar9 = *puVar9 - 1;
if (*puVar9 == 0) {
FUN_14006cc60(puVar21);
}
FUN_14006b3e0((longlong)pppuVar11);
local_2f0 = 0;
}
local_458 = (uint *)PTR_DAT_1401ac010;
FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31);
local_438 = PTR_DAT_1401ac010;
plVar10 = FUN_14006c8a0((longlong *)&local_408,plVar10,uVar29,ppuVar31);
puVar27 = (undefined *)*plVar10;
if ((undefined *)*plVar10 == (undefined *)0x0) {
puVar27 = PTR_DAT_1401ac010;
}
pwVar22 = L"No NIC binding though multiple NIC detected##Process=%s";
ppbVar12 = &local_438;
FUN_140053d20((longlong *)ppbVar12,L"No NIC binding though multiple NIC detected##Process=%s",
puVar27,ppuVar31);
if (((local_408 != (undefined *)0x0) && (local_408 != PTR_DAT_1401ac010)) &&
(local_408 + -8 != (undefined *)0x0)) {
ppbVar12 = (byte **)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
local_318 = ppbVar12;
FUN_14006b350((int *)ppbVar12);
local_310 = 1;
piVar13 = (int *)(local_408 + -4);
*piVar13 = *piVar13 + -1;
if (*piVar13 == 0) {
FUN_14006cc60(local_408 + -8);
}
FUN_14006b3e0((longlong)ppbVar12);
local_310 = 0;
}
local_408 = PTR_DAT_1401ac010;
FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
pbVar18 = local_438;
local_448 = PTR_DAT_1401ac010;
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
local_448 = pbVar15;
}
if (local_438 != PTR_DAT_1401ac010) {
piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
local_308 = piVar13;
FUN_14006b350(piVar13);
local_300 = 1;
FUN_1400031e0((longlong *)&local_448,pwVar22,puVar27,ppuVar31);
local_448 = pbVar18;
if (((pbVar18 != PTR_DAT_1401ac010) && (pbVar18 != (byte *)0x0)) && (pbVar18 != (byte *)0x8))
{
*(int *)(pbVar18 + -4) = *(int *)(pbVar18 + -4) + 1;
}
FUN_14006b3e0((longlong)piVar13);
local_300 = 0;
}
ppbVar12 = &local_448;
FUN_14006fa80((longlong *)ppbVar12,pwVar22,puVar27,ppuVar31);
if (((pbVar18 != (byte *)0x0) && (pbVar18 != PTR_DAT_1401ac010)) &&
(pbVar18 + -8 != (byte *)0x0)) {
piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31);
local_328 = piVar13;
FUN_14006b350(piVar13);
local_320 = 1;
pbVar20 = pbVar18 + -4;
*(int *)pbVar20 = *(int *)pbVar20 + -1;
if (*(int *)pbVar20 == 0) {
FUN_14006cc60(pbVar18 + -8);
}
FUN_14006b3e0((longlong)piVar13);
local_320 = 0;
}
local_438 = PTR_DAT_1401ac010;
}
dVar37 = (double)param_2[0x16];
if ((double)param_2[0x16] <= 0.0) {
dVar37 = DAT_1401ac1a0;
}
*(double *)(param_1 + 0x778) = dVar37;
*(undefined1 *)(param_1 + 0x1a4) = *(undefined1 *)((longlong)param_2 + 0x65);
*(undefined1 *)(param_1 + 0x1a5) = *(undefined1 *)((longlong)param_2 + 100);
*(undefined1 *)(param_1 + 0x1a6) = *(undefined1 *)((longlong)param_2 + 0x67);
*(char *)(param_1 + 0x198) = (char)param_2[0xf];
*(char *)(param_1 + 0x1c0) = (char)param_2[0xd];
iVar1 = *(int *)((longlong)param_2 + 0x5c);
*(int *)(param_1 + 0x19c) = iVar1;
if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) {
local_358 =
"CStartServerParameter::m_encryptedMessageKeyLength Incorrect key length, only 128,192,256";
std::exception::exception(local_2d0,&local_358);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_2d0,(ThrowInfo *)&DAT_1401a9298);
}
iVar1 = (int)param_2[0xc];
*(int *)(param_1 + 0x1a0) = iVar1;
if ((((iVar1 != 0) && (iVar1 != 0x200)) && (iVar1 != 0x400)) && (iVar1 != 0x800)) {
local_440 =
"CStartServerParameter::m_fastEncryptedMessageKeyLength Incorrect key lengt, MaxSize is 2048, MinSize is 8"
;
std::exception::exception(local_2b8,&local_440);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_2b8,(ThrowInfo *)&DAT_1401a9298);
}
*(int *)(param_1 + 0x1a8) = (int)param_2[0x10];
*(undefined1 *)(param_1 + 0x1ac) = *(undefined1 *)((longlong)param_2 + 0x84);
*(undefined1 *)(param_1 + 0x1ad) = *(undefined1 *)((longlong)param_2 + 0x85);
FUN_1400dd700((undefined8 *)(param_1 + 0xba0),param_1 + 0xba8,puVar27,ppuVar31);
local_3a8 = 0;
local_3a0 = (byte *)0x0;
local_398 = 0;
local_390 = 0;
local_3b0 = Proud::ByteArray::vftable;
FUN_1400dd5d0((longlong)&local_3b0,*(int *)(param_1 + 0x19c),(SIZE_T)puVar27,ppuVar31);
pbVar18 = local_3a0;
if ((int)local_398 == 0) {
pbVar18 = pbVar15;
}
SVar28 = (SIZE_T)(*(uint *)(param_1 + 0x19c) >> 3);
lVar36 = 0x10;
FUN_1400cd030((void *)(param_1 + 0x798),pbVar18,SVar28,0x10);
local_3f8 = 0;
local_3f0 = (byte *)0x0;
local_3e8 = 0;
local_3e0 = 0;
local_400 = Proud::ByteArray::vftable;
FUN_1400dd5d0((longlong)&local_400,*(int *)(param_1 + 0x1a0),SVar28,lVar36);
pbVar18 = local_3f0;
if ((int)local_3e8 == 0) {
pbVar18 = pbVar15;
}
uVar16 = (ulonglong)(*(uint *)(param_1 + 0x1a0) >> 3);
FUN_1400dccc0(param_1 + 0xb68,(longlong)pbVar18,uVar16,lVar36);
*(undefined4 *)(param_1 + 0xb98) = 0;
local_440 = operator_new(0xa8);
pbVar18 = pbVar15;
if (local_440 != (char *)0x0) {
pbVar18 = (byte *)(param_1 + -0x40);
if (param_1 == 0xa8) {
pbVar18 = pbVar15;
}
uVar16 = CONCAT71((int7)(uVar16 >> 8),1);
pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,uVar16,lVar36);
}
*(byte **)(param_1 + 0x6e0) = pbVar18;
local_440 = operator_new(0xa8);
pbVar18 = pbVar15;
if (local_440 != (char *)0x0) {
pbVar18 = (byte *)(param_1 + -0x40);
if (param_1 == 0xa8) {
pbVar18 = pbVar15;
}
pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,CONCAT71((int7)(uVar16 >> 8),1),lVar36);
}
*(byte **)(param_1 + 0x6e8) = pbVar18;
FUN_140076ec0((char *)(param_1 + 0x6b8));
dVar37 = FUN_140076f50((char *)(param_1 + 0x6b8));
*(double *)(param_1 + 0x158) = dVar37;
*(undefined8 *)(param_1 + 0x118) = 0;
puVar14 = FUN_140074230(local_180);
*(undefined4 *)(param_1 + 0x1c4) = *(undefined4 *)puVar14;
*(undefined4 *)(param_1 + 0x1c8) = *(undefined4 *)((longlong)puVar14 + 4);
*(undefined4 *)(param_1 + 0x1cc) = *(undefined4 *)(puVar14 + 1);
*(undefined4 *)(param_1 + 0x1d0) = *(undefined4 *)((longlong)puVar14 + 0xc);
*(int *)(param_1 + 0x179c) = (int)param_2[8];
*(undefined4 *)(param_1 + 0x340) = *(undefined4 *)((longlong)param_2 + 0x44);
*(int *)(param_1 + 0x344) = (int)param_2[9];
*(undefined4 *)(param_1 + 0x348) = *(undefined4 *)((longlong)param_2 + 0x4c);
*(int *)(param_1 + 0x34c) = (int)param_2[10];
pWVar23 = (LPCWSTR)*param_2;
if ((LPCWSTR)*param_2 == (LPCWSTR)0x0) {
pWVar23 = (LPCWSTR)PTR_DAT_1401ac010;
}
local_168 = local_160;
FUN_14006b570((longlong *)&local_168,pWVar23,3);
FUN_14006b850((longlong *)(param_1 + 0x168),local_168);
if (local_168 != local_160) {
free(local_168);
}
pWVar23 = (LPCWSTR)param_2[1];
if ((LPCWSTR)param_2[1] == (LPCWSTR)0x0) {
pWVar23 = (LPCWSTR)PTR_DAT_1401ac010;
}
local_d8 = local_d0;
uVar29 = 3;
FUN_14006b570((longlong *)&local_d8,pWVar23,3);
FUN_14006b850((longlong *)(param_1 + 0x170),local_d8);
if (local_d8 != local_d0) {
free(local_d8);
}
*(undefined4 *)(param_1 + 0x1b0) = *(undefined4 *)((longlong)param_2 + 0x6c);
*(longlong *)(param_1 + 0x1b8) = param_2[0xe];
local_388 = Proud::CFastArray<int,0>::vftable;
if (DAT_1401ac8a0 != 5) {
FUN_140078250();
}
local_380 = param_2[4];
local_364 = *(undefined4 *)((longlong)param_2 + 0x3c);
local_378 = (byte *)0x0;
local_370 = 0;
local_368 = 0;
iVar1 = (int)param_2[6];
lVar26 = (longlong)iVar1;
if (iVar1 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
FUN_140063f80((longlong)pppuVar30,iVar1,uVar29,lVar36);
pppuVar11 = local_450;
pbVar18 = local_378;
if ((int)local_370 == 0) {
pbVar18 = pbVar15;
}
pbVar20 = pbVar15;
if ((int)param_2[6] != 0) {
pbVar20 = (byte *)param_2[5];
}
if (0 < iVar1) {
lVar36 = (longlong)pbVar20 - (longlong)pbVar18;
do {
*(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar36);
pbVar18 = pbVar18 + 4;
lVar26 = lVar26 + -1;
} while (lVar26 != 0);
}
plVar10 = param_2 + 0x11;
plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 8);
uVar29 = FUN_14008fb10((longlong *)(param_1 + -0xa8),*(uint *)(param_2 + 8),(longlong **)pppuVar30
,(longlong)plVar10,(ulonglong *)local_450);
if ((char)uVar29 != '\0') {
plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 2);
uVar29 = FUN_14008f270(param_1 + -0xa8,(ulonglong)plVar24,(ulonglong *)pppuVar11,plVar10);
pppuVar30 = pppuVar11;
if ((char)uVar29 != '\0') {
pbVar18 = pbVar15;
if (*(int *)((longlong)param_2 + 0x7c) == 0) {
local_450 = operator_new(0x10);
if (local_450 != (undefined ***)0x0) {
pbVar18 = (byte *)FUN_1400dbf10(local_450);
}
}
else {
local_450 = operator_new(0x90);
if (local_450 != (undefined ***)0x0) {
pbVar18 = (byte *)FUN_1400dc550(local_450,DAT_1401ac1a8);
}
}
*(byte **)(param_1 + 0x3d0) = pbVar18;
*(undefined4 *)(param_1 + 0x175c) = 0;
FUN_140008030((longlong *)(param_1 + 0x1760),&DAT_14015cd00,pppuVar11,plVar10);
*(undefined8 *)(param_1 + 0x1768) = 0;
*(undefined4 *)(param_1 + 0x1798) = 0;
DVar7 = *(DWORD *)(param_2 + 0xb);
DVar6 = FUN_14006c0c0();
if ((int)DVar6 <= (int)DVar7) {
DVar7 = FUN_14006c0c0();
}
if (0 < (int)DVar7) {
DVar5 = DVar7;
}
*(DWORD *)(param_2 + 0xb) = DVar5;
if (DVar5 == 0) {
DVar5 = FUN_14006c0c0();
*(DWORD *)(param_2 + 0xb) = DVar5;
}
local_360 = operator_new(0x280);
if (local_360 != (undefined4 *)0x0) {
pbVar15 = (byte *)FUN_1400c6740(local_360,param_1 + -0xa8,pppuVar11,plVar10);
}
*(byte **)(param_1 + 0x338) = pbVar15;
FUN_1400ca800((int *)pbVar15,*(int *)((longlong)param_2 + 0x54),
(int *)(ulonglong)*(uint *)(param_2 + 0xb));
Sleep(100);
FUN_140078360(&local_400);
FUN_140078360(&local_3b0);
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
if (0 < (int)local_418) {
uVar16 = local_418 & 0xffffffff;
plVar10 = local_420;
do {
FUN_140008440(plVar10);
plVar10 = plVar10 + 1;
uVar16 = uVar16 - 1;
} while (uVar16 != 0);
}
if (local_420 != (longlong *)0x0) {
if (local_428 == (longlong *)0x0) {
FUN_14006cc60(local_420);
}
else {
(**(code **)(*local_428 + 0x18))(local_428,local_420);
}
}
if (pbVar17 != (byte *)0x0) {
if (local_3d0 == (longlong *)0x0) {
FUN_14006cc60(pbVar17);
}
else {
(**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17);
}
}
uVar29 = FUN_14006b3e0(param_1 + 0xb8);
return CONCAT71((int7)((ulonglong)uVar29 >> 8),1);
}
}
FUN_140076f10((char *)(param_1 + 0x6b8));
pvVar3 = *(void **)(param_1 + 0x6e0);
if (pvVar3 != (void *)0x0) {
FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10);
operator_delete(pvVar3);
}
*(undefined8 *)(param_1 + 0x6e0) = 0;
pvVar3 = *(void **)(param_1 + 0x6e8);
if (pvVar3 != (void *)0x0) {
FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10);
operator_delete(pvVar3);
}
*(undefined8 *)(param_1 + 0x6e8) = 0;
*(undefined4 *)(param_1 + 0x1c4) = 0;
*(undefined4 *)(param_1 + 0x1c8) = 0;
*(undefined4 *)(param_1 + 0x1cc) = 0;
*(undefined4 *)(param_1 + 0x1d0) = 0;
FUN_140078360(&local_400);
FUN_140078360(&local_3b0);
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
if (0 < (int)local_418) {
uVar16 = local_418 & 0xffffffff;
plVar10 = local_420;
do {
FUN_140008440(plVar10);
plVar10 = plVar10 + 1;
uVar16 = uVar16 - 1;
} while (uVar16 != 0);
}
if (local_420 != (longlong *)0x0) {
if (local_428 == (longlong *)0x0) {
FUN_14006cc60(local_420);
}
else {
(**(code **)(*local_428 + 0x18))(local_428,local_420);
}
}
if (pbVar17 != (byte *)0x0) {
if (local_3d0 == (longlong *)0x0) {
FUN_14006cc60(pbVar17);
}
else {
(**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17);
}
}
LAB_140092d71:
uVar16 = FUN_14006b3e0(param_1 + 0xb8);
return uVar16 & 0xffffffffffffff00;
}