/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401d7b70 FUN_1401d7b70 * Pseudocode, not original source. */ void FUN_1401d7b70(longlong *param_1,int *param_2,byte *param_3,byte *param_4,int *param_5, int *param_6) { char cVar1; byte bVar2; int iVar3; undefined8 uVar4; longlong lVar5; undefined8 uVar6; int *piVar7; longlong *plVar8; int iVar9; undefined4 *puVar10; undefined8 uVar11; undefined4 *puVar12; undefined4 *puVar13; int *piVar14; int iVar15; int iVar16; int iVar17; ulonglong local_res10; byte *local_res18; byte *local_res20; undefined8 in_stack_fffffffffffffdd8; undefined4 uVar18; int *local_218; int *local_210; int local_208; undefined8 local_200; int local_1f8; undefined8 local_1e8; undefined8 local_1e0; undefined8 local_1d8; undefined8 local_1d0; undefined8 local_1c8; undefined8 local_1b0; longlong local_188; undefined1 local_180; int *local_178; undefined8 local_170; undefined1 local_168 [8]; undefined1 local_160 [8]; undefined1 local_158 [8]; undefined **local_150; undefined8 local_148; undefined8 local_140; undefined8 local_138; undefined8 local_130; undefined **local_128; undefined8 local_120; undefined8 local_118; undefined8 local_110; undefined8 local_108; undefined **local_100; undefined8 local_f8; undefined8 local_f0; undefined8 local_e8; undefined8 local_e0; undefined8 local_c8; uVar18 = (undefined4)((ulonglong)in_stack_fffffffffffffdd8 >> 0x20); local_c8 = 0xfffffffffffffffe; iVar15 = *param_2; local_res18 = param_3; local_res20 = param_4; if (iVar15 != 0) { if (iVar15 == 1) { piVar7 = param_2 + 2; local_1f8 = (int)(*piVar7 + (*piVar7 >> 0x1f & 7U)) >> 3; local_res10 = local_res10 & 0xffffffffffffff00; local_218 = piVar7; local_188 = FUN_1401d3b20(param_1,param_2[0xc]); (**(code **)(param_1[0xf] + 0x18))(); iVar15 = 0; local_200 = (int *)((ulonglong)local_200._4_4_ << 0x20); local_178 = piVar7; cVar1 = FUN_14016bd20(piVar7,&local_200); if (cVar1 != '\0') { for (; local_208 = iVar15, iVar15 < (int)param_1[9]; iVar15 = iVar15 + 1) { if ((iVar15 < 0) || ((int)param_1[9] <= iVar15)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } plVar8 = *(longlong **)(param_1[8] + (longlong)iVar15 * 8); FUN_14016b040(local_178,local_1f8); *(undefined2 *)(plVar8 + 1) = 0; bVar2 = (**(code **)(*plVar8 + 0x10))(plVar8,piVar7,local_188); local_res10 = CONCAT71(local_res10._1_7_,(byte)local_res10 | bVar2); *param_3 = *param_3 | *(byte *)(plVar8 + 1); *param_4 = *param_4 | *(byte *)((longlong)plVar8 + 9); if (((bVar2 != 0) && (plVar8 != param_1 + 0x307)) && (plVar8 != param_1 + 0x2fe)) { *param_5 = *param_5 + 1; } } if ((byte)local_res10 != '\0') { return; } } FUN_14016b040(local_178,local_1f8); if (param_1[0x2b0] == 0) { return; } *param_6 = *param_6 + 1; (**(code **)(*(longlong *)param_1[0x2b0] + 0x28)) ((longlong *)param_1[0x2b0],(ulonglong)local_200 & 0xffffffff); return; } if (iVar15 != 2) { return; } piVar7 = param_2 + 2; local_218 = piVar7; uVar4 = FUN_1401d3b20(param_1,param_2[0xc]); (**(code **)(param_1[0xf] + 0x18))(); if (param_1[0x2b0] == 0) { return; } cVar1 = FUN_14016ba10(piVar7,&local_res10); if (cVar1 != '\0') { iVar15 = *piVar7; iVar3 = FUN_14016afd0(piVar7); if ((int)local_res10 == iVar3 - ((int)((iVar15 >> 0x1f & 7U) + iVar15) >> 3)) { *(undefined1 *)(param_1[0x2b0] + 8) = 0; *(undefined1 *)(param_1[0x2b0] + 9) = 0; FUN_14016ec40(&local_1e8); local_1e8 = (undefined **)CONCAT44(param_2[0xc],(undefined4)local_1e8); local_1e8 = (undefined **)CONCAT71(local_1e8._1_7_,(char)param_2[0x12]); iVar15 = *piVar7; local_1b0 = uVar4; lVar5 = FUN_14016b000(piVar7); (**(code **)(*(longlong *)param_1[0x2b0] + 0x30)) ((longlong *)param_1[0x2b0],param_2[0xc],&local_1e8, lVar5 + ((int)(iVar15 + (iVar15 >> 0x1f & 7U)) >> 3), CONCAT44(uVar18,(int)local_res10)); *param_3 = *param_3 | *(byte *)(param_1[0x2b0] + 8); *param_4 = *param_4 | *(byte *)(param_1[0x2b0] + 9); *param_5 = *param_5 + 1; return; } } local_188 = FUN_14016d940(0x60); if (local_188 == 0) { uVar4 = 0; } else { uVar4 = FUN_140198ee0(local_188); } puVar10 = (undefined4 *)0x0; FUN_140154b80(&local_res10,uVar4); puVar12 = puVar10; if (local_res10 != 0) { puVar12 = *(undefined4 **)(local_res10 + 0x38); } *puVar12 = 0x1f; if (local_res10 != 0) { puVar10 = *(undefined4 **)(local_res10 + 0x38); } FUN_14004c050(puVar10 + 4,L"Invalid payload size in User Message!"); local_170 = 0; FUN_140184b90(&local_170,&local_res10); (**(code **)(*param_1 + 0x80))(param_1,&local_170); FUN_140154b00(&local_res10); return; } (**(code **)(param_1[0xf] + 0x18))(); if (param_1[0x2b0] == 0) { return; } local_200 = param_2 + 0x14; *(undefined1 *)(param_1[0x2b0] + 8) = 0; *(undefined1 *)(param_1[0x2b0] + 9) = 0; switch(*local_200) { case 1: iVar15 = FUN_14016af20(param_2 + 0x28); uVar6 = FUN_14016dd50(param_2 + 0x28); local_1e8 = Proud::CFastArray::vftable; uVar4 = 0; local_1e0 = 0; local_1d8 = 0; local_1d0 = 0; local_1c8 = 0; if (iVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_14004f0e0(&local_1e8,iVar15); uVar11 = local_1d8; if ((int)local_1d0 == 0) { uVar11 = uVar4; } FUN_14004f1a0(uVar11,uVar6,(longlong)iVar15); local_1e8 = Proud::ByteArray::vftable; local_res10 = FUN_14016d940(0x60); uVar6 = uVar4; if (local_res10 != 0) { uVar6 = FUN_140198ee0(local_res10); } plVar8 = (longlong *)FUN_140154b80(local_158,uVar6); if (*plVar8 != 0) { uVar4 = *(undefined8 *)(*plVar8 + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],uVar4,&local_1e8); FUN_140154b00(local_158); FUN_14019a9e0(&local_1e8); break; case 2: FUN_14016d8c0(); local_210 = (int *)PTR_DAT_1403440a0; iVar3 = FUN_14016d740(&DAT_1402a4aa0); local_res10 = CONCAT44(local_res10._4_4_,iVar3); puVar10 = (undefined4 *)0x0; iVar16 = 0; iVar15 = iVar16; if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) { iVar15 = local_210[-2]; } iVar17 = 0; iVar9 = iVar3; if (((iVar3 <= iVar15) && (iVar9 = iVar17, local_210 != (int *)0x0)) && (local_210 != (int *)PTR_DAT_1403440a0)) { iVar9 = local_210[-2]; } iVar15 = 1; if (1 < iVar9) { iVar15 = iVar9; } puVar12 = puVar10; if ((local_210 != (int *)0x0) && (puVar12 = (undefined4 *)0x0, local_210 != (int *)PTR_DAT_1403440a0)) { puVar12 = (undefined4 *)(ulonglong)(uint)local_210[-2]; } if ((int)puVar12 < iVar15) { if (local_210 == (int *)0x0) { local_210 = (int *)PTR_DAT_1403440a0; } if (iVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (iVar15 == 0) { FUN_14004eb70(&local_210); } else { iVar9 = iVar17; if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) { iVar9 = local_210[-2]; } if (iVar15 != iVar9) { piVar7 = (int *)FUN_14016d940((longlong)iVar15 * 2 + 10); if (piVar7 != (int *)0x0) { *piVar7 = 0; piVar7[1] = 1; } *piVar7 = iVar15; iVar3 = iVar17; if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) { iVar3 = local_210[-2]; } piVar14 = (int *)PTR_DAT_1403440a0; if (iVar15 < iVar3) { LAB_1401d8164: if (local_210 != (int *)0x0) { piVar14 = local_210; } } else { iVar15 = iVar16; if (local_210 != (int *)0x0) { if (local_210 != (int *)PTR_DAT_1403440a0) { iVar15 = local_210[-2]; } goto LAB_1401d8164; } } FUN_14016d770(piVar7 + 2,piVar14,iVar15); FUN_14004eb70(&local_210); local_210 = piVar7 + 2; iVar3 = (int)local_res10; } } } FUN_14004e850(&local_210); piVar7 = local_210; if (local_210 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } FUN_14016d770(piVar7,&DAT_1402a4aa0,iVar3); piVar7 = local_210; if (local_210 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } iVar3 = FUN_14016d740(piVar7); iVar15 = 0; if (0 < iVar3) { iVar15 = iVar3; } if ((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) { iVar17 = local_210[-2]; } if ((iVar15 < iVar17) || (iVar15 = iVar16, local_210 == (int *)0x0)) { LAB_1401d8208: if (((local_210 != (int *)PTR_DAT_1403440a0) && (local_210 != (int *)0x0)) && (local_210 + -2 != (int *)0x0)) { local_210[-2] = iVar15; *(undefined2 *)((longlong)local_210 + (longlong)iVar15 * 2) = 0; } } else if (local_210 != (int *)PTR_DAT_1403440a0) { iVar15 = local_210[-2]; goto LAB_1401d8208; } local_120 = 0; local_118 = 0; local_110 = 0; local_108 = 0; local_128 = Proud::ByteArray::vftable; puVar12 = puVar10; if (*(longlong *)(param_2 + 0x16) != 0) { puVar12 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38); } FUN_140198f80(&local_218,*puVar12,1,&local_210,&local_128); FUN_14019a9e0(&local_128); piVar7 = local_210; if (((local_210 != (int *)0x0) && (local_210 != (int *)PTR_DAT_1403440a0)) && (piVar14 = local_210 + -2, piVar14 != (int *)0x0)) { uVar4 = FUN_14016d8c0(); local_180 = 0; local_188 = uVar4; FUN_14016db50(uVar4); local_180 = 1; piVar7 = piVar7 + -1; *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14016d970(piVar14); } FUN_14016dbe0(uVar4); param_3 = local_res18; } local_210 = (int *)PTR_DAT_1403440a0; puVar12 = puVar10; if (local_218 != (int *)0x0) { puVar12 = *(undefined4 **)(local_218 + 0xe); } puVar12[8] = param_2[0x40]; *(short *)(puVar12 + 9) = (short)param_2[0x41]; puVar12 = puVar10; if (local_218 != (int *)0x0) { puVar12 = *(undefined4 **)(local_218 + 0xe); } puVar12[2] = param_2[0x42]; local_1e0 = 0; local_1d8 = 0; local_1d0 = 0; local_1c8 = 0; local_1e8 = Proud::ByteArray::vftable; if (*(longlong *)(param_2 + 0x28) != 0) { iVar15 = *(int *)(*(longlong *)(param_2 + 0x28) + 0x18); LAB_1401d83db: if (iVar15 < 1) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } if (*(longlong *)(param_2 + 0x2a) != 0) { if (*(longlong *)(param_2 + 0x2a) == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } iVar15 = param_2[0x2c]; goto LAB_1401d83db; } if (local_218 != (int *)0x0) { puVar10 = *(undefined4 **)(local_218 + 0xe); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x38))((longlong *)param_1[0x2b0],puVar10,&local_1e8) ; FUN_14019a9e0(&local_1e8); FUN_140154b00(&local_218); break; case 3: uVar4 = 0; if (*(longlong *)(param_2 + 0x16) != 0) { uVar4 = *(undefined8 *)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x40))((longlong *)param_1[0x2b0],uVar4); break; default: goto switchD_1401d7f5b_caseD_4; case 8: (**(code **)(*(longlong *)param_1[0x2b0] + 0x48)) ((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c],param_2 + 0x32); break; case 9: (**(code **)(*(longlong *)param_1[0x2b0] + 0x50)) ((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c]); FUN_1401d3910(param_1,param_2[0x2f]); break; case 10: (**(code **)(*(longlong *)param_1[0x2b0] + 0x58))((longlong *)param_1[0x2b0],param_2[0x30],0); break; case 0xb: puVar10 = (undefined4 *)0x0; if (*(longlong *)(param_2 + 0x16) != 0) { puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x58)) ((longlong *)param_1[0x2b0],param_2[0x30],*puVar10); break; case 0xd: if (param_1[0x2b0] != 0) { puVar10 = (undefined4 *)0x0; if (*(longlong *)(param_2 + 0x16) != 0) { puVar10 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x60))((longlong *)param_1[0x2b0],*puVar10); } break; case 0xe: (**(code **)(*(longlong *)param_1[0x2b0] + 0x68))(); break; case 0x14: puVar10 = (undefined4 *)0x0; local_f8 = 0; local_f0 = 0; local_e8 = 0; local_e0 = 0; local_100 = Proud::ByteArray::vftable; lVar5 = *(longlong *)(param_2 + 0x16); puVar13 = puVar10; puVar12 = puVar10; if (lVar5 != 0) { puVar13 = *(undefined4 **)(lVar5 + 0x38); puVar12 = *(undefined4 **)(lVar5 + 0x38); } plVar8 = (longlong *)FUN_140198f80(local_160,*puVar13,param_2[0x30],puVar12 + 4,&local_100); if (*plVar8 != 0) { puVar10 = *(undefined4 **)(*plVar8 + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 8))((longlong *)param_1[0x2b0],puVar10); FUN_140154b00(local_160); FUN_14019a9e0(&local_100); break; case 0x15: puVar10 = (undefined4 *)0x0; local_148 = 0; local_140 = 0; local_138 = 0; local_130 = 0; local_150 = Proud::ByteArray::vftable; lVar5 = *(longlong *)(param_2 + 0x16); puVar13 = puVar10; puVar12 = puVar10; if (lVar5 != 0) { puVar13 = *(undefined4 **)(lVar5 + 0x38); puVar12 = *(undefined4 **)(lVar5 + 0x38); } plVar8 = (longlong *)FUN_140198f80(local_168,*puVar13,param_2[0x30],puVar12 + 4,&local_150); if (*plVar8 != 0) { puVar10 = *(undefined4 **)(*plVar8 + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x10))((longlong *)param_1[0x2b0],puVar10); FUN_140154b00(local_168); FUN_14019a9e0(&local_150); } *param_3 = *(byte *)(param_1[0x2b0] + 8); *param_4 = *(byte *)(param_1[0x2b0] + 9); *param_6 = *param_6 + 1; switchD_1401d7f5b_caseD_4: return; }