int FUN_004040e4(int *param_1,undefined4 param_2)
{
undefined1 uVar1;
uint uVar2;
undefined1 *puVar3;
undefined1 *puVar4;
int iVar5;
int iVar6;
int iVar7;
int iVar8;
undefined1 local_78 [15];
undefined1 local_69;
undefined4 local_68;
undefined4 local_64;
undefined1 auStack_60 [16];
int local_50;
undefined1 auStack_4c [12];
int local_40;
undefined1 auStack_3c [24];
iVar6 = *param_1;
if (iVar6 == 0) {
iVar5 = -0x16;
}
else {
iVar7 = *(int *)(iVar6 + 0x18);
iVar5 = -0x16;
if (iVar7 != 0) {
iVar8 = *(int *)(iVar7 + 8);
iVar5 = -0xc;
if (*(int *)(iVar7 + 0x1c) != 0) {
*(int *)(iVar7 + 0x1c) = *(int *)(iVar7 + 0x1c) + -1;
iVar5 = FUN_0040294c(iVar7 + 0x20,*(undefined4 *)(iVar7 + 0x18),0);
FUN_004028c0(iVar7 + 0x20,iVar5,0);
if (-1 < iVar5) {
FUN_00402620(auStack_4c,0,0x80);
local_40 = iVar5 + *(int *)(iVar7 + 0x14);
FUN_00402fec(auStack_3c,auStack_4c,0x20 - *(int *)(iVar7 + 0x10),0x80);
FUN_00402e30(local_78,auStack_3c,*(undefined4 *)(iVar8 + 0x24),0x80);
puVar3 = &local_69;
puVar4 = local_78;
do {
uVar1 = *puVar4;
*puVar4 = *puVar3;
*puVar3 = uVar1;
puVar4 = puVar4 + 1;
puVar3 = puVar3 + -1;
} while (puVar4 < puVar3);
FUN_00402740(auStack_60,iVar8 + 0x14,local_78,0x80);
local_68 = *(undefined4 *)(iVar8 + 0xc);
local_64 = *(undefined4 *)(iVar8 + 0x10);
local_50 = *(int *)(iVar7 + 0x10) + *(int *)(iVar8 + 0x24);
iVar5 = add_prefix(param_2,*(undefined4 *)(*(int *)(iVar6 + 0x18) + 4),5,&local_68);
if ((iVar5 < 0) ||
(iVar5 = add_prefix(iVar6 + 0x10,*(undefined4 *)(*(int *)(iVar6 + 0x18) + 4),5,
&local_68), iVar5 < 0)) {
uVar2 = FUN_00403150(*(undefined4 *)(iVar6 + 0x18),&local_68);
if (-1 < (int)uVar2) {
iVar6 = *(int *)(iVar6 + 0x18);
if (uVar2 < *(uint *)(iVar6 + 0x18)) {
*(int *)(iVar6 + 0x1c) = *(int *)(iVar6 + 0x1c) + 1;
FUN_00402944(iVar6 + 0x20,uVar2,0);
return -1;
}
}
iVar5 = -1;
}
else {
FUN_00402d08(param_1,&local_68);
iVar5 = 0;
}
}
}
}
}
return iVar5;
}