/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400c1110 FUN_1400c1110 * Pseudocode, not original source. */ void FUN_1400c1110(longlong *param_1,undefined8 param_2,ulonglong param_3,undefined8 param_4) { longlong *plVar1; undefined8 *puVar2; longlong *plVar3; longlong *plVar4; longlong *plVar5; longlong lVar6; ulonglong uVar7; void *_Dst; ulonglong uVar8; longlong lVar9; int iVar10; longlong *plVar11; ulonglong uVar12; uint uVar13; int iVar14; int iVar15; longlong *local_70; longlong *local_68; undefined8 local_60; longlong local_58; longlong local_50; longlong local_48; longlong *local_40; longlong *local_38; undefined4 local_30; undefined4 local_2c; iVar15 = (int)param_1[6]; do { if (iVar15 < 1) { return; } plVar11 = (longlong *)0x0; local_38 = (longlong *)(**(code **)(**(longlong **)*param_1 + 0x38))(); local_48 = 0; local_50 = 0; local_58 = 0; local_40 = (longlong *)0x0; local_2c = 0; local_60 = 2; plVar4 = (longlong *)(**(code **)(**(longlong **)*param_1 + 0x38))(); plVar5 = FUN_14004ded0((longlong *)&local_70,plVar4,param_3,param_4); plVar1 = local_38; plVar3 = local_40; plVar4 = (longlong *)*plVar5; if (plVar4 != (longlong *)0x0) { plVar4[1] = plVar4[1] + 1; plVar11 = plVar4; } if (local_40 != (longlong *)0x0) { plVar4 = local_40 + 1; *plVar4 = *plVar4 + -1; if (*plVar4 == 0) { puVar2 = (undefined8 *)*local_40; *puVar2 = Proud::CFastArray::vftable; if ((LPVOID)puVar2[2] != (LPVOID)0x0) { if ((longlong *)puVar2[1] == (longlong *)0x0) { FUN_1400302f0((LPVOID)puVar2[2]); } else { (**(code **)(*(longlong *)puVar2[1] + 0x18))(); } } (**(code **)(*plVar1 + 0x18))(plVar1,puVar2); (**(code **)(*local_38 + 0x18))(local_38,plVar3); } } plVar3 = local_68; plVar4 = local_70; uVar12 = 0; local_38 = (longlong *)plVar5[1]; local_40 = plVar11; if (local_70 != (longlong *)0x0) { plVar1 = local_70 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { puVar2 = (undefined8 *)*local_70; *puVar2 = Proud::CFastArray::vftable; if ((LPVOID)puVar2[2] != (LPVOID)0x0) { if ((longlong *)puVar2[1] == (longlong *)0x0) { FUN_1400302f0((LPVOID)puVar2[2]); } else { (**(code **)(*(longlong *)puVar2[1] + 0x18))(); } } (**(code **)(*plVar3 + 0x18))(plVar3,puVar2); (**(code **)(*local_68 + 0x18))(local_68,plVar4); } } iVar15 = 0; uVar13 = *(uint *)(param_1 + 6); uVar8 = (ulonglong)uVar13; uVar7 = uVar12; if (uVar13 != 0) { uVar7 = param_1[5]; } lVar9 = 0; if ((int)uVar13 < 0x7d1) { FUN_140040550(uVar7,uVar8,0); } else { FUN_1400c0a50(uVar7,uVar13,0); } iVar10 = 0; iVar14 = 0; if (0 < (int)param_1[6]) { do { if (((longlong)uVar12 < 0) || ((int)param_1[6] <= iVar10)) { /* WARNING: Subroutine does not return */ FUN_14002f5c0(uVar7,uVar8,lVar9,param_4); } uVar8 = (ulonglong)*(uint *)(param_1[5] + uVar12 * 4); if (local_40 == (longlong *)0x0) { lVar6 = 0; } else { lVar6 = *local_40; } FUN_1400a2fd0(lVar6,uVar8,lVar9,param_4); iVar15 = iVar14 + 1; lVar6 = FUN_140064290((longlong *)&local_40); uVar7 = (ulonglong)*(uint *)(lVar6 + 0x18); if (DAT_1401626dc <= (int)*(uint *)(lVar6 + 0x18)) break; iVar10 = iVar10 + 1; uVar12 = uVar12 + 1; iVar14 = iVar15; } while (iVar10 < (int)param_1[6]); } local_30 = (undefined4)param_1[0x17]; local_2c = (undefined4)param_1[2]; FUN_1400b8c80((undefined8 *)(*param_1 + 8),(int *)&local_60); *(undefined8 *)(*param_1 + 0x18) = 0; if (iVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } iVar14 = (int)param_1[6]; if (iVar14 <= iVar15) { iVar15 = iVar14; } uVar13 = iVar14 - iVar15; param_3 = (ulonglong)uVar13; if (0 < (int)uVar13) { lVar9 = 0; if (iVar14 == 0) { _Dst = (void *)0x0; } else { lVar9 = param_1[5]; _Dst = (void *)param_1[5]; } param_3 = (longlong)(int)uVar13 << 2; memmove(_Dst,(void *)(lVar9 + (longlong)iVar15 * 4),param_3); } FUN_14003ecf0((longlong)(param_1 + 3),(int)param_1[6] - iVar15,param_3); plVar3 = local_38; plVar4 = local_40; if (local_40 != (longlong *)0x0) { plVar1 = local_40 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { puVar2 = (undefined8 *)*local_40; *puVar2 = Proud::CFastArray::vftable; if ((LPVOID)puVar2[2] != (LPVOID)0x0) { if ((longlong *)puVar2[1] == (longlong *)0x0) { FUN_1400302f0((LPVOID)puVar2[2]); } else { (**(code **)(*(longlong *)puVar2[1] + 0x18))(); } } (**(code **)(*plVar3 + 0x18))(plVar3,puVar2); (**(code **)(*local_38 + 0x18))(local_38,plVar4); } } FUN_140095270(&local_58); if ((local_50 != 0) && (local_48 < 0)) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } iVar15 = (int)param_1[6]; } while( true ); }