void FUN_00474e04(uint *param_1,undefined4 *param_2,int param_3)
{
int iVar1;
undefined *puVar2;
undefined4 uVar3;
int *piVar4;
uint uVar5;
uint uVar6;
code *pcVar7;
while( true ) {
if (param_2 == (undefined4 *)0x0) {
return;
}
if (param_1[0x47] != 0) {
return;
}
if ((param_2[2] == 0) && ((param_3 != 0 || (2 < *(int *)param_2[1] - 0x19U)))) break;
LAB_00474fe0:
param_2 = (undefined4 *)*param_2;
}
piVar4 = (int *)param_2[1];
iVar1 = *piVar4;
uVar6 = param_1[0x45];
param_2[2] = 1;
param_1[0x45] = param_2[3];
if (iVar1 == 0x24) {
uVar3 = *param_2;
pcVar7 = FUN_00474bcc;
}
else {
if (iVar1 != 0x25) {
if (iVar1 != 2) {
FUN_00473830(param_1,piVar4);
param_1[0x45] = uVar6;
goto LAB_00474fe0;
}
uVar5 = param_1[0x46];
param_1[0x46] = 0;
FUN_004739e0(param_1,piVar4[1]);
param_1[0x46] = uVar5;
if ((*param_1 & 4) == 0) {
puVar2 = &DAT_00497c50;
pcVar7 = FUN_004737d0;
}
else {
puVar2 = (undefined *)0x2e;
pcVar7 = FUN_004736cc;
}
(*pcVar7)(param_1,puVar2);
for (piVar4 = *(int **)(param_2[1] + 8); *piVar4 - 0x19U < 3; piVar4 = (int *)piVar4[1]) {
}
FUN_004739e0(param_1);
goto LAB_00474fc4;
}
uVar3 = *param_2;
pcVar7 = FUN_0047501c;
}
(*pcVar7)(param_1,piVar4,uVar3);
LAB_00474fc4:
param_1[0x45] = uVar6;
return;
}