void FUN_00402e30(uint *param_1,int param_2,uint param_3,uint param_4)
{
uint uVar1;
uint uVar2;
uint uVar3;
int iVar4;
int iVar5;
int iVar6;
uint *puVar7;
int iVar8;
uint uVar9;
int iVar10;
uint uVar11;
uint uVar12;
uVar9 = param_4 & 0x8000001f;
uVar3 = param_4 + 0x1f >> 5;
if ((int)uVar9 < 0) {
uVar9 = (uVar9 - 1 | 0xffffffe0) + 1;
}
uVar11 = param_3;
if ((int)param_3 < 0) {
uVar11 = param_3 + 0x1f;
}
param_3 = param_3 & 0x8000001f;
iVar8 = (int)uVar11 >> 5;
if ((int)param_3 < 0) {
param_3 = (param_3 - 1 | 0xffffffe0) + 1;
}
uVar11 = (1 << (uVar9 & 0x1f)) - 1;
if (iVar8 < (int)uVar3) {
uVar12 = 0x20 - param_3;
iVar6 = 0;
iVar10 = uVar3 - 1;
iVar5 = iVar8;
puVar7 = param_1;
do {
if ((param_3 == 0) || (iVar4 = iVar5 + 1, (int)uVar3 <= iVar4)) {
uVar1 = *(uint *)(param_2 + iVar5 * 4);
uVar2 = 0;
iVar4 = iVar10;
if (uVar9 != 0) goto LAB_00402ee8;
LAB_00402f34:
*puVar7 = uVar1 >> (param_3 & 0x1f) | uVar2;
}
else {
uVar2 = *(uint *)(param_2 + iVar4 * 4);
if (iVar4 == iVar10) {
if (uVar9 == 0) {
*puVar7 = *(uint *)(param_2 + iVar5 * 4) >> (param_3 & 0x1f) | uVar2 << (uVar12 & 0x1f);
goto LAB_00402f00;
}
uVar1 = *(uint *)(param_2 + iVar5 * 4);
uVar2 = (uVar2 & uVar11) << (uVar12 & 0x1f);
}
else {
uVar1 = *(uint *)(param_2 + iVar5 * 4);
uVar2 = uVar2 << (uVar12 & 0x1f);
iVar4 = iVar10;
if (uVar9 == 0) goto LAB_00402f34;
}
LAB_00402ee8:
if (iVar4 == iVar5) {
uVar1 = uVar1 & uVar11;
}
uVar2 = uVar1 >> (param_3 & 0x1f) | uVar2;
*puVar7 = uVar2;
if (iVar4 == iVar6) {
*puVar7 = uVar2 & uVar11;
}
}
LAB_00402f00:
iVar6 = iVar6 + 1;
puVar7 = puVar7 + 1;
iVar5 = iVar6 + iVar8;
} while (iVar6 != uVar3 - iVar8);
}
if (iVar8 != 0) {
memset(param_1 + (uVar3 - iVar8),0,iVar8 << 2);
return;
}
return;
}