server-re/decomp/Agent_Release_x64/full/functions/0x1400b8600.c
2026-10-14 16:45:19 -04:00

293 lines
9.6 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400b8600 FUN_1400b8600
* Pseudocode, not original source. */
ulonglong FUN_1400b8600(longlong *param_1,uint *param_2,ulonglong param_3,undefined4 *param_4)
{
undefined8 *puVar1;
longlong *plVar2;
longlong *plVar3;
undefined8 uVar4;
ulonglong uVar5;
longlong *plVar6;
longlong *plVar7;
longlong *plVar8;
uint *puVar9;
uint ***pppuVar10;
int iVar11;
SIZE_T SVar12;
undefined4 *puVar13;
uint **local_res8;
undefined8 local_d8;
uint *local_d0;
longlong *local_c8;
undefined8 local_c0;
longlong *local_b8;
longlong *local_b0;
undefined4 local_a8;
undefined4 local_a4;
longlong *local_a0;
longlong *local_98;
undefined8 local_90;
exception local_88 [80];
local_90 = 0xfffffffffffffffe;
uVar5 = param_3;
puVar13 = param_4;
local_b0 = (longlong *)(**(code **)(*param_1 + 0x38))();
plVar8 = (longlong *)0x0;
local_c0 = 0;
local_c8 = (longlong *)0x0;
local_d0 = (uint *)0x0;
local_b8 = (longlong *)0x0;
local_d8 = 0;
local_a4 = 0;
uVar4 = FUN_140080f30(param_2,(uint *)&local_d8,uVar5,puVar13);
if ((char)uVar4 == '\0') {
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
}
else {
if ((uint)local_d8 != 1) {
if ((uint)local_d8 == 2) {
plVar6 = (longlong *)
(**(code **)(*(longlong *)(*(longlong *)(param_1[2] + 0x670) + 0x88) + 0x18))();
plVar7 = FUN_14004ded0((longlong *)&local_a0,plVar6,uVar5,puVar13);
plVar3 = local_b0;
plVar2 = local_b8;
plVar6 = (longlong *)*plVar7;
if (plVar6 != (longlong *)0x0) {
plVar6[1] = plVar6[1] + 1;
plVar8 = plVar6;
}
if (local_b8 != (longlong *)0x0) {
plVar6 = local_b8 + 1;
*plVar6 = *plVar6 + -1;
if (*plVar6 == 0) {
puVar1 = (undefined8 *)*local_b8;
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
if ((longlong *)puVar1[1] == (longlong *)0x0) {
FUN_1400302f0((LPVOID)puVar1[2]);
}
else {
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
}
}
(**(code **)(*plVar3 + 0x18))(plVar3,puVar1);
(**(code **)(*local_b0 + 0x18))(local_b0,plVar2);
}
}
plVar6 = local_98;
local_b0 = (longlong *)plVar7[1];
local_b8 = plVar8;
if (local_a0 != (longlong *)0x0) {
plVar8 = local_a0 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
puVar1 = (undefined8 *)*local_a0;
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
if ((longlong *)puVar1[1] == (longlong *)0x0) {
FUN_1400302f0((LPVOID)puVar1[2]);
}
else {
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
}
}
(**(code **)(*plVar6 + 0x18))(plVar6,puVar1);
(**(code **)(*local_98 + 0x18))(local_98,local_a0);
}
}
if (local_b8 == (longlong *)0x0) {
puVar9 = (uint *)0x0;
}
else {
puVar9 = (uint *)*local_b8;
}
uVar5 = FUN_1400a2d90(puVar9,param_2,uVar5,puVar13);
if ((char)uVar5 == '\0') {
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
}
else {
uVar4 = FUN_140080600(param_2,&local_res8,4);
if ((char)uVar4 == '\0') {
local_a4 = 0;
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
}
else {
local_a4 = local_res8._0_4_;
uVar5 = 4;
uVar4 = FUN_140080600(param_2,&local_res8,4);
if ((char)uVar4 != '\0') {
local_a8 = local_res8._0_4_;
goto LAB_1400b8a11;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
}
}
goto LAB_1400b8b3d;
}
LAB_1400b8a11:
FUN_1400700b0(param_3,0,uVar5,puVar13);
FUN_1400b7be0(param_1[1],&local_d8,uVar5,puVar13);
plVar8 = (longlong *)FUN_1400b7b50(param_1[1]);
uVar5 = FUN_14009f830(plVar8,param_3,(ulonglong)*(uint *)(param_1[2] + 0x56c),
(ulonglong)*(uint *)(*(longlong *)(param_1[2] + 0x670) + 0x6a4),param_4)
;
if ((int)uVar5 < 0) {
*(undefined1 *)(param_1 + 3) = 1;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar4 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
return CONCAT71((int7)((ulonglong)uVar4 >> 8),1);
}
SVar12 = 4;
pppuVar10 = &local_res8;
puVar9 = param_2;
uVar4 = FUN_140080600(param_2,pppuVar10,4);
if ((char)uVar4 == '\0') {
local_d8 = local_d8 & 0xffffffff;
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
goto LAB_1400b8b3d;
}
local_d8 = CONCAT44(local_res8._0_4_,(uint)local_d8);
if (local_c8 != (longlong *)0x0) {
FUN_14002f1e0(local_88,(wchar_t *)PTR_u_Cannot_use_internal_buffer_becau_140156ba0,SVar12,
puVar13);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_88,(ThrowInfo *)&DAT_140151b88);
}
if (local_d0 == (uint *)0x0) {
local_d0 = (uint *)FUN_1400952b0(puVar9,pppuVar10,SVar12);
local_d0[10] = 1;
local_d0[0xb] = 0;
}
puVar9 = param_2;
uVar5 = FUN_140080ca0(param_2,&local_res8,SVar12,puVar13);
if ((((char)uVar5 != '\0') && (iVar11 = (int)local_res8, -1 < iVar11)) &&
(iVar11 <= DAT_140155140)) {
if (local_c8 == (longlong *)0x0) {
puVar9 = local_d0;
if (iVar11 < 1) {
if (local_d0 == (uint *)0x0) goto LAB_1400b8ab0;
iVar11 = 0;
}
else if (local_d0 == (uint *)0x0) {
/* WARNING: Subroutine does not return */
FUN_140095370(0,0,SVar12,puVar13);
}
FUN_14001bc70((longlong)local_d0,iVar11,SVar12);
}
else {
if (local_c0._4_4_ < iVar11) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
local_c0 = CONCAT44(local_c0._4_4_,iVar11);
}
plVar6 = local_c8;
if (local_c8 == (longlong *)0x0) {
if (local_d0 == (uint *)0x0) {
LAB_1400b8ab0:
/* WARNING: Subroutine does not return */
FUN_140095370(puVar9,0,SVar12,puVar13);
}
plVar6 = plVar8;
if (local_d0[6] != 0) {
plVar6 = *(longlong **)(local_d0 + 4);
}
}
uVar5 = (ulonglong)local_res8 & 0xffffffff;
uVar4 = FUN_140080600(param_2,plVar6,uVar5);
if ((char)uVar4 != '\0') goto LAB_1400b8a11;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140043d50((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_140095270((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14002f590();
}
}
LAB_1400b8b3d:
return uVar5 & 0xffffffffffffff00;
}