/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14018ced0 FUN_14018ced0 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x00014018d230) */ /* WARNING: Removing unreachable block (ram,0x00014018d20f) */ /* WARNING: Removing unreachable block (ram,0x00014018d21e) */ /* WARNING: Removing unreachable block (ram,0x00014018cf88) */ undefined8 * FUN_14018ced0(longlong param_1,longlong param_2,longlong param_3,longlong param_4) { int *piVar1; longlong *plVar2; uint uVar3; longlong lVar4; ulonglong uVar5; undefined4 uVar6; undefined2 uVar7; undefined *puVar8; undefined8 *puVar9; undefined8 *puVar10; undefined8 *puVar11; undefined8 *puVar12; uint *puVar13; undefined8 *puVar14; ulonglong uVar15; undefined *puVar16; uint uVar17; uint uVar18; undefined8 *local_res8; undefined *local_res20; undefined8 *puVar19; undefined8 uVar20; uVar20 = 0xfffffffffffffffe; puVar14 = (undefined8 *)0x0; puVar11 = (undefined8 *)0x0; puVar19 = (undefined8 *)0x0; uVar3 = *(uint *)(param_4 + 0x6f8); uVar18 = *(uint *)(param_3 + 0x6f8); uVar17 = uVar3; if ((int)uVar3 < (int)uVar18) { uVar17 = uVar18; uVar18 = uVar3; } uVar15 = (ulonglong)*(uint *)(param_1 + 0x28); uVar5 = (ulonglong)(uVar18 << 0x10 ^ uVar17); puVar10 = (undefined8 *)(uVar5 / uVar15); uVar5 = uVar5 % uVar15; puVar12 = puVar14; if (*(longlong *)(param_1 + 8) != 0) { puVar13 = *(uint **)(*(longlong *)(param_1 + 8) + uVar5 * 8); while( true ) { puVar12 = puVar11; if ((puVar13 == (uint *)0x0) || (puVar10 = (undefined8 *)(puVar13[8] / uVar15), (uint)uVar5 != puVar13[8] % *(uint *)(param_1 + 0x28))) goto LAB_14018d337; if ((*puVar13 == uVar18) && (puVar13[1] == uVar17)) break; puVar13 = *(uint **)(puVar13 + 4); } if (puVar13 != (uint *)0x0) { puVar11 = puVar14; puVar12 = puVar19; if (*(longlong *)(puVar13 + 2) != 0) { *(longlong *)(*(longlong *)(puVar13 + 2) + 8) = *(longlong *)(*(longlong *)(puVar13 + 2) + 8) + 1; puVar12 = *(undefined8 **)(puVar13 + 2); if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } } *(int *)((longlong)puVar11 + 0x114) = *(int *)((longlong)puVar11 + 0x114) + -1; puVar10 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar10 = (undefined8 *)*puVar12; } puVar19 = puVar12; if (*(int *)((longlong)puVar10 + 0x114) == 0) { puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } lVar4 = puVar11[0x20]; puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } uVar5 = ((ulonglong)puVar11 & 0xffffffff) % (ulonglong)*(uint *)(lVar4 + 0x6c8); if (*(longlong *)(lVar4 + 0x6a8) == 0) goto LAB_14018d07c; puVar11 = *(undefined8 **)(*(longlong *)(lVar4 + 0x6a8) + uVar5 * 8); goto joined_r0x00014018d023; } } } goto LAB_14018d337; joined_r0x00014018d023: if ((puVar11 == (undefined8 *)0x0) || ((uint)uVar5 != *(uint *)(puVar11 + 4) % *(uint *)(lVar4 + 0x6c8))) goto LAB_14018d07c; puVar10 = puVar14; if ((undefined8 *)*puVar11 != (undefined8 *)0x0) { puVar10 = *(undefined8 **)*puVar11; } puVar9 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar9 = (undefined8 *)*puVar12; } if (puVar10 != puVar9) { puVar11 = (undefined8 *)puVar11[2]; goto joined_r0x00014018d023; } FUN_1401877c0(lVar4 + 0x6a0,puVar11,0,lVar4,puVar12,0xfffffffffffffffe); LAB_14018d07c: puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } lVar4 = puVar11[0x21]; puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } uVar5 = ((ulonglong)puVar11 & 0xffffffff) % (ulonglong)*(uint *)(lVar4 + 0x6c8); if (*(longlong *)(lVar4 + 0x6a8) != 0) { puVar11 = *(undefined8 **)(*(longlong *)(lVar4 + 0x6a8) + uVar5 * 8); while( true ) { if ((puVar11 == (undefined8 *)0x0) || ((uint)uVar5 != *(uint *)(puVar11 + 4) % *(uint *)(lVar4 + 0x6c8))) goto LAB_14018d10d; puVar10 = puVar14; if ((undefined8 *)*puVar11 != (undefined8 *)0x0) { puVar10 = *(undefined8 **)*puVar11; } puVar9 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar9 = (undefined8 *)*puVar12; } if (puVar10 == puVar9) break; puVar11 = (undefined8 *)puVar11[2]; } FUN_1401877c0(lVar4 + 0x6a0,puVar11,0,lVar4,puVar19,uVar20); } LAB_14018d10d: puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } if (((((double)puVar11[0x33] != 0.0) && (*(int *)(puVar11 + 0xe) != 0)) && (*(int *)(puVar11 + 0x17) != 0)) && (*(int *)(puVar11 + 0xe) != *(int *)(puVar11 + 0x17))) { puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } uVar20 = (**(code **)(*(longlong *)(param_2 + 0x118) + 8))(); puVar11[0x32] = uVar20; uVar7 = DAT_140344454; uVar6 = DAT_140344450; puVar11 = puVar14; if (puVar12 != (undefined8 *)0x0) { puVar11 = (undefined8 *)*puVar12; } if (*(char *)(puVar11 + 1) != '\x01') { *(undefined4 *)(puVar11 + 2) = 0; *(undefined4 *)(puVar11 + 4) = uVar6; *(undefined2 *)((longlong)puVar11 + 0x24) = uVar7; *(undefined4 *)(puVar11 + 6) = uVar6; *(undefined2 *)((longlong)puVar11 + 0x34) = uVar7; *(undefined1 *)(puVar11 + 7) = 0; uVar7 = DAT_140344454; uVar6 = DAT_140344450; *(undefined4 *)(puVar11 + 8) = 0; *(undefined4 *)(puVar11 + 10) = uVar6; *(undefined2 *)((longlong)puVar11 + 0x54) = uVar7; *(undefined4 *)(puVar11 + 0xc) = uVar6; *(undefined2 *)((longlong)puVar11 + 100) = uVar7; *(undefined1 *)(puVar11 + 0xd) = 0; *(undefined1 *)(puVar11 + 1) = 1; } local_res8 = (undefined8 *)0x0; if (puVar12 != (undefined8 *)0x0) { puVar12[1] = puVar12[1] + 1; puVar14 = (undefined8 *)*puVar19; puVar12 = puVar19; local_res8 = puVar19; } FUN_14018b4c0(param_1,puVar14[0x20],puVar14[0x21],&local_res8); } if (puVar13 == (uint *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } puVar10 = (undefined8 *)FUN_140184ef0(param_1,puVar13,0); if (*(longlong *)(param_2 + 0x17f0) != 0) { FUN_14016d8c0(); local_res20 = PTR_DAT_1403440a0; FUN_14004c020(&local_res20,&DAT_14027c780,*(undefined4 *)(param_3 + 0x6f8), *(undefined4 *)(param_4 + 0x6f8)); puVar8 = local_res20; puVar16 = local_res20; if (local_res20 == (undefined *)0x0) { puVar16 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(param_2 + 0x17f0),1,puVar16); if (((puVar8 != (undefined *)0x0) && (puVar8 != PTR_DAT_1403440a0)) && (puVar8 + -8 != (undefined *)0x0)) { uVar20 = FUN_14016d8c0(); FUN_14016db50(uVar20); piVar1 = (int *)(puVar8 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar8 + -8); } FUN_14016dbe0(uVar20); } local_res20 = PTR_DAT_1403440a0; puVar10 = (undefined8 *)PTR_DAT_1403440a0; } LAB_14018d337: if (puVar12 != (undefined8 *)0x0) { plVar2 = puVar12 + 1; *plVar2 = *plVar2 + -1; puVar10 = (undefined8 *)puVar12[1]; if (*plVar2 == 0) { puVar10 = (undefined8 *)FUN_140175a00(puVar19); } } return puVar10; }