/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401fb380 FUN_1401fb380 * Pseudocode, not original source. */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ undefined8 FUN_1401fb380(longlong *param_1) { int *piVar1; longlong lVar2; longlong *plVar3; longlong lVar4; undefined2 uVar5; undefined4 uVar6; undefined8 uVar7; undefined8 uVar8; ulonglong uVar9; ushort uVar10; uint uVar11; ulonglong uVar12; longlong lVar13; undefined4 extraout_XMM0_Da; undefined4 extraout_XMM0_Da_00; undefined4 extraout_XMM0_Db; undefined4 extraout_XMM0_Db_00; double dVar14; undefined4 local_d8; undefined4 uStack_d4; undefined4 uStack_d0; undefined4 uStack_cc; undefined1 local_c8 [8]; undefined1 local_c0 [8]; longlong local_b8; int local_ac; undefined **local_a0; undefined4 local_98; ushort local_94; undefined **local_90; undefined4 local_88; undefined2 local_84; undefined **local_80; undefined4 local_78; undefined2 local_74; undefined4 local_70 [2]; undefined8 local_68; undefined1 local_60; undefined4 local_5c; undefined1 local_58; undefined1 local_57; undefined8 local_50; undefined1 local_48 [32]; local_50 = 0xfffffffffffffffe; dVar14 = (double)FUN_1401c7000(*(undefined8 *)(*param_1 + 0x670)); dVar14 = dVar14 + (double)param_1[1]; param_1[1] = (longlong)dVar14; lVar13 = *(longlong *)(*param_1 + 0x670); if (dVar14 < *(double *)(lVar13 + 0x640) || dVar14 == *(double *)(lVar13 + 0x640)) { lVar2 = param_1[2]; if (*(int *)(lVar2 + 8) == 0) { FUN_1401c7000(lVar13); dVar14 = *(double *)(lVar2 + 0x10) - (double)CONCAT44(extraout_XMM0_Db_00,extraout_XMM0_Da_00) ; *(double *)(lVar2 + 0x10) = dVar14; if (dVar14 < 0.0) { *(undefined8 *)(lVar2 + 0x10) = DAT_140344cb0; FUN_14016b440(local_c8); FUN_14016abe0(local_c8); FUN_14016b5a0(local_c8,0x800); FUN_14016b5a0(local_c8,0); FUN_14004eef0(local_c8,0x10); local_d8 = *(undefined4 *)(lVar2 + 0x1c); uStack_d4 = *(undefined4 *)(lVar2 + 0x20); uStack_d0 = *(undefined4 *)(lVar2 + 0x24); uStack_cc = *(undefined4 *)(lVar2 + 0x28); FUN_140153d20(local_c8,&local_d8); FUN_140153c40(local_c8,*(undefined4 *)(*param_1 + 0x56c)); lVar2 = *param_1; local_70[0] = 5; lVar13 = 0; local_68 = 0; local_60 = 1; local_5c = 0xffffffff; local_58 = 1; local_57 = DAT_140344dfc; if ((*(longlong **)(lVar2 + 0x18) != (longlong *)0x0) && (lVar4 = **(longlong **)(lVar2 + 0x18), lVar4 != 0)) { lVar13 = lVar4 + -0x40; } plVar3 = *(longlong **)(lVar2 + 0x670); uVar7 = (**(code **)(*(longlong *)(*(longlong *)(lVar2 + 0x670) + 0x70) + 0x1c0))(); uVar8 = FUN_1401fa2c0(param_1,local_48); uVar6 = (**(code **)(*plVar3 + 0x30))(plVar3); uVar5 = FUN_1401b5550(uVar6,1); FUN_1401fe430(lVar13,1,uVar5,uVar8,local_c8,uVar7,local_70); FUN_14016d0e0(local_c0); if ((local_b8 != 0) && (local_ac < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } } else if (*(int *)(lVar2 + 8) == 1) { FUN_1401c7000(lVar13); dVar14 = *(double *)(lVar2 + 0x10) - (double)CONCAT44(extraout_XMM0_Db,extraout_XMM0_Da); *(double *)(lVar2 + 0x10) = dVar14; if (dVar14 < 0.0) { *(undefined8 *)(lVar2 + 0x10) = *(undefined8 *)(*(longlong *)(*param_1 + 0x670) + 0x648); *(int *)(lVar2 + 0x18) = *(int *)(lVar2 + 0x18) + 1; lVar13 = *param_1; local_d8 = *(undefined4 *)(lVar13 + 0x30); uStack_d4 = *(undefined4 *)(lVar13 + 0x34); uStack_d0 = *(undefined4 *)(lVar13 + 0x38); uStack_cc = *(undefined4 *)(lVar13 + 0x3c); local_90 = Proud::AddrPort::vftable; local_88 = *(undefined4 *)(lVar13 + 0x578); local_84 = *(undefined2 *)(lVar13 + 0x57c); FUN_1401fab50(param_1,&local_90,&local_d8); lVar13 = *param_1; plVar3 = *(longlong **)(lVar13 + 0x18); uVar12 = 0; if ((plVar3 != (longlong *)0x0) && (*plVar3 != 0)) { uVar9 = uVar12; if ((plVar3 != (longlong *)0x0) && (*plVar3 != 0)) { uVar9 = *plVar3 - 0x40; } if (*(int *)(uVar9 + 0x140) == *(int *)(lVar13 + 0x578)) { uVar9 = uVar12; if ((*(longlong **)(lVar13 + 0x18) != (longlong *)0x0) && (lVar4 = **(longlong **)(lVar13 + 0x18), lVar4 != 0)) { uVar9 = lVar4 - 0x40; } if (((*(char *)(uVar9 + 0x130) == *(char *)(lVar13 + 0x588)) && (*(char *)(uVar9 + 0x131) == *(char *)(lVar13 + 0x589))) && (*(char *)(uVar9 + 0x132) == *(char *)(lVar13 + 0x58a))) { local_d8 = *(undefined4 *)(lVar13 + 0x30); uStack_d4 = *(undefined4 *)(lVar13 + 0x34); uStack_d0 = *(undefined4 *)(lVar13 + 0x38); uStack_cc = *(undefined4 *)(lVar13 + 0x3c); local_80 = Proud::AddrPort::vftable; local_78 = *(undefined4 *)(lVar13 + 0x588); local_74 = *(undefined2 *)(lVar13 + 0x58c); FUN_1401fab50(param_1,&local_80,&local_d8); } } } if (DAT_140344cbc < *(int *)(lVar2 + 0x18)) { piVar1 = (int *)(lVar2 + 0x30); *piVar1 = *piVar1 + -1; if (*piVar1 < 0) { *(undefined4 *)(lVar2 + 0x30) = DAT_140344d18; *(short *)(lVar2 + 0x34) = *(short *)(lVar2 + 0x34) + (short)_DAT_14034c860; uVar10 = *(ushort *)(lVar2 + 0x34); if ((uVar10 < 0x3ff) || (uVar10 == 0xffff)) { uVar10 = 0x3ff; } *(ushort *)(lVar2 + 0x34) = uVar10; } uVar6 = *(undefined4 *)(*param_1 + 0x578); uVar10 = *(ushort *)(lVar2 + 0x34); if (0 < _DAT_14034c860) { do { lVar13 = *param_1; local_d8 = *(undefined4 *)(lVar13 + 0x30); uStack_d4 = *(undefined4 *)(lVar13 + 0x34); uStack_d0 = *(undefined4 *)(lVar13 + 0x38); uStack_cc = *(undefined4 *)(lVar13 + 0x3c); local_a0 = Proud::AddrPort::vftable; local_98 = uVar6; local_94 = uVar10; FUN_1401fab50(param_1,&local_a0,&local_d8); uVar10 = uVar10 + 1; if ((uVar10 < 0x3ff) || (uVar10 == 0xffff)) { uVar10 = 0x3ff; } uVar11 = (int)uVar12 + 1; uVar12 = (ulonglong)uVar11; } while ((int)uVar11 < _DAT_14034c860); } } } } uVar7 = 1; } else { uVar7 = 0; } return uVar7; }