int * FUN_0047d6f4(int param_1,int *param_2,int param_3)

{
  undefined4 uVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  uint local_38;
  uint local_34;
  uint *local_30;
  
  uVar6 = *(uint *)(param_1 + 0x10) >> 3 & 0xff;
  uVar1 = FUN_0047cd74(uVar6,param_1);
  iVar7 = 0;
  local_30 = &local_38;
  do {
    if (*param_2 == 0) {
      return (int *)0x0;
    }
    if (param_2[1] != 0) {
      if (((*(uint *)(param_1 + 0x10) & 4) != 0) &&
         (iVar5 = (int)param_2 + (4 - param_2[1]), iVar5 != iVar7)) {
        uVar6 = FUN_0047cfb8(iVar5);
        uVar1 = FUN_0047cd74(uVar6 & 0xff,param_1);
        iVar7 = iVar5;
      }
      if (uVar6 == 0) {
        local_38 = param_2[2];
        local_34 = param_2[3];
        uVar3 = local_38;
      }
      else {
        uVar2 = FUN_0047ce1c(uVar6 & 0xff,uVar1,param_2 + 2,local_30);
        FUN_0047ce1c(uVar6 & 0xf,0,uVar2,&local_34);
        uVar3 = FUN_0047ccf0(uVar6 & 0xff);
        uVar4 = 0xffffffff;
        if (uVar3 < 4) {
          uVar4 = (1 << ((uVar3 & 3) << 3)) - 1;
        }
        uVar3 = uVar4 & local_38;
      }
      if ((uVar3 != 0) && (param_3 - local_38 < local_34)) {
        return param_2;
      }
    }
    param_2 = (int *)((int)param_2 + *param_2 + 4);
  } while( true );
}