/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400c2090 FUN_1400c2090 * Pseudocode, not original source. */ uint FUN_1400c2090(longlong param_1,uint param_2) { char *pcVar1; char *pcVar2; uint uVar3; longlong lVar4; char *pcVar5; uint uVar6; uint uVar7; char *pcVar8; char *pcVar9; int iVar10; uint uVar11; ulonglong uVar12; char cVar13; char cVar14; uint uVar15; uVar7 = *(uint *)(param_1 + 0x94); uVar6 = *(uint *)(param_1 + 0xa4); lVar4 = *(longlong *)(param_1 + 0x50); uVar12 = (ulonglong)(int)*(uint *)(param_1 + 0xa0); pcVar2 = (char *)((ulonglong)uVar7 + lVar4); if (*(int *)(param_1 + 0x44) - 0x106U < uVar7) { uVar7 = (uVar7 - *(int *)(param_1 + 0x44)) + 0x106; } else { uVar7 = 0; } cVar13 = pcVar2[uVar12 - 1]; cVar14 = pcVar2[uVar12]; if (*(uint *)(param_1 + 0xb4) <= *(uint *)(param_1 + 0xa0)) { uVar6 = uVar6 >> 2; } uVar3 = *(uint *)(param_1 + 0x9c); uVar15 = *(uint *)(param_1 + 0xb8); if (uVar3 < *(uint *)(param_1 + 0xb8)) { uVar15 = uVar3; } do { iVar10 = (int)uVar12; pcVar5 = (char *)(lVar4 + (ulonglong)param_2); if ((((pcVar5[iVar10] == cVar14) && (pcVar5[(longlong)iVar10 + -1] == cVar13)) && (*pcVar5 == *pcVar2)) && (pcVar5[1] == pcVar2[1])) { pcVar5 = pcVar5 + 2; pcVar8 = pcVar2 + 2; while (((((pcVar9 = pcVar8 + 1, *pcVar9 == pcVar5[1] && (pcVar9 = pcVar8 + 2, *pcVar9 == pcVar5[2])) && ((pcVar9 = pcVar8 + 3, *pcVar9 == pcVar5[3] && ((pcVar9 = pcVar8 + 4, *pcVar9 == pcVar5[4] && (pcVar9 = pcVar8 + 5, *pcVar9 == pcVar5[5])))))) && (pcVar9 = pcVar8 + 6, *pcVar9 == pcVar5[6])) && (pcVar9 = pcVar8 + 7, *pcVar9 == pcVar5[7]))) { pcVar1 = pcVar5 + 8; pcVar5 = pcVar5 + 8; pcVar9 = pcVar8 + 8; if ((*pcVar9 != *pcVar1) || (pcVar8 = pcVar9, pcVar2 + 0x102 <= pcVar9)) break; } uVar11 = ((int)pcVar9 - (int)(pcVar2 + 0x102)) + 0x102; if (iVar10 < (int)uVar11) { *(uint *)(param_1 + 0x98) = param_2; uVar12 = (ulonglong)uVar11; if ((int)uVar15 <= (int)uVar11) break; cVar13 = pcVar2[(longlong)(int)uVar11 + -1]; cVar14 = pcVar2[(int)uVar11]; } } uVar11 = (uint)uVar12; param_2 = (uint)*(ushort *) (*(longlong *)(param_1 + 0x60) + (ulonglong)(*(uint *)(param_1 + 0x4c) & param_2) * 2); if (param_2 <= uVar7) break; uVar6 = uVar6 - 1; lVar4 = *(longlong *)(param_1 + 0x50); } while (uVar6 != 0); if (uVar11 <= uVar3) { uVar3 = uVar11; } return uVar3; }