/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14000de70 FUN_14000de70 * Pseudocode, not original source. */ byte * FUN_14000de70(byte *param_1,longlong *param_2,char param_3,char *param_4,int param_5) { ulonglong uVar1; char cVar2; byte bVar3; longlong *plVar4; bool bVar5; int iVar6; undefined8 uVar7; byte *pbVar8; ulonglong uVar9; size_t sVar10; int local_res8 [2]; uint local_res18 [2]; char *local_res20; local_res20 = param_4; FUN_14000af60(param_2,&DAT_14015bf08,0); if ((param_3 == '\0') || (DAT_1401b33e8 == '\0')) { while (param_1 != (byte *)0x0) { if ((*param_1 == 0) || (uVar7 = FUN_14000dda0((char *)param_1,param_4,'\0',param_5), (char)uVar7 != '\0')) goto LAB_14000e172; local_res18[0] = 0; if (param_5 == 1) { local_res8[0] = *(int *)(&DAT_14015b8d0 + (ulonglong)*param_1 * 4); if (local_res8[0] == 1) goto LAB_14000e0ea; if (local_res8[0] == 0) { param_1 = (byte *)0x0; } else { iVar6 = 0; if (*param_1 != 0) { pbVar8 = param_1; do { if (local_res8[0] <= iVar6) break; bVar3 = *pbVar8; pbVar8 = pbVar8 + 1; iVar6 = iVar6 + 1; pbVar8[(longlong)(&stack0x00000017 + -(longlong)param_1)] = bVar3; } while (*pbVar8 != 0); } param_1 = param_1 + local_res8[0]; } } else { local_res8[0] = 1; LAB_14000e0ea: if (*param_1 == 0x26) { param_1 = (byte *)FUN_14000dbb0((char *)param_1,(char *)local_res18,local_res8,param_5); } else { local_res18[0] = (uint)*param_1; param_1 = param_1 + 1; } } plVar4 = (longlong *)*param_2; sVar10 = (size_t)local_res8[0]; uVar9 = sVar10 + *plVar4; if (((ulonglong)plVar4[1] < uVar9) && (uVar1 = plVar4[1] + uVar9, (ulonglong)plVar4[1] < uVar1)) { FUN_14000ae90(param_2,uVar1); } memmove((void *)(*(longlong *)*param_2 + 0x10 + *param_2),local_res18,sVar10); *(ulonglong *)*param_2 = uVar9; *(undefined1 *)(*param_2 + 0x10 + uVar9) = 0; param_4 = local_res20; } } else { bVar5 = false; param_1 = FUN_14000da10(param_1,param_5); if (param_1 == (byte *)0x0) { return (byte *)0x0; } do { if ((*param_1 == 0) || (uVar7 = FUN_14000dda0((char *)param_1,param_4,'\0',param_5), (char)uVar7 != '\0')) goto LAB_14000e172; bVar3 = *param_1; if ((((bVar3 == 0xd) || (bVar3 == 10)) || (iVar6 = isspace((uint)bVar3), iVar6 != 0)) || ((bVar3 == 10 || (bVar3 == 0xd)))) { param_1 = param_1 + 1; bVar5 = true; } else { if (bVar5) { FUN_14000b0e0(param_2,0x20); bVar5 = false; } local_res18[0] = 0; if (param_5 == 1) { local_res8[0] = *(int *)(&DAT_14015b8d0 + (ulonglong)*param_1 * 4); if (local_res8[0] == 1) goto LAB_14000dfad; if (local_res8[0] != 0) { iVar6 = 0; if (*param_1 != 0) { pbVar8 = param_1; do { if (local_res8[0] <= iVar6) break; bVar3 = *pbVar8; pbVar8 = pbVar8 + 1; iVar6 = iVar6 + 1; pbVar8[(longlong)(&stack0x00000017 + -(longlong)param_1)] = bVar3; } while (*pbVar8 != 0); } param_1 = param_1 + local_res8[0]; goto LAB_14000dfcd; } param_1 = (byte *)0x0; LAB_14000dfd2: plVar4 = (longlong *)*param_2; sVar10 = (size_t)local_res8[0]; uVar9 = sVar10 + *plVar4; if (((ulonglong)plVar4[1] < uVar9) && (uVar1 = plVar4[1] + uVar9, (ulonglong)plVar4[1] < uVar1)) { FUN_14000ae90(param_2,uVar1); } memmove((void *)(*(longlong *)*param_2 + 0x10 + *param_2),local_res18,sVar10); *(ulonglong *)*param_2 = uVar9; *(undefined1 *)(*param_2 + 0x10 + uVar9) = 0; param_4 = local_res20; } else { local_res8[0] = 1; LAB_14000dfad: if (*param_1 == 0x26) { param_1 = (byte *)FUN_14000dbb0((char *)param_1,(char *)local_res18,local_res8,param_5); LAB_14000dfcd: if (local_res8[0] != 1) goto LAB_14000dfd2; } else { local_res18[0] = (uint)*param_1; param_1 = param_1 + 1; } FUN_14000b0e0(param_2,(undefined1)local_res18[0]); } } } while (param_1 != (byte *)0x0); } return (byte *)0x0; LAB_14000e172: uVar9 = 0xffffffffffffffff; do { if (uVar9 == 0) break; uVar9 = uVar9 - 1; cVar2 = *param_4; param_4 = param_4 + 1; } while (cVar2 != '\0'); return param_1 + (~uVar9 - 1); }