undefined4 FUN_0047d9c0(uint *param_1,uint param_2,uint *param_3)

{
  char cVar1;
  bool bVar2;
  byte bVar3;
  undefined1 uVar4;
  uint *puVar5;
  undefined4 uVar6;
  undefined4 uVar7;
  int iVar8;
  undefined4 *puVar9;
  uint uVar10;
  uint uVar11;
  uint *puVar12;
  uint uVar13;
  uint *puVar14;
  char *pcVar15;
  uint uVar16;
  int *piVar17;
  int *piVar18;
  int *piVar19;
  uint *puVar20;
  uint uVar21;
  int *piVar22;
  int *piVar23;
  char *pcVar24;
  code *pcVar25;
  undefined4 local_48;
  int local_44;
  char *local_40;
  undefined4 local_3c;
  uint local_38;
  uint local_34;
  undefined4 local_30;
  undefined4 local_2c;
  
  piVar17 = (int *)param_1[2];
  uVar13 = *param_1;
  if ((param_3[5] == 0) || (param_2 < 0x20)) {
    if (param_2 < 0xe) {
      return 0xffffffff;
    }
LAB_0047db8c:
    puVar20 = (uint *)0x0;
    puVar14 = (uint *)0x0;
  }
  else {
    if ((((DAT_004b7600 != param_1[4]) || (DAT_004b7604 != param_1[5])) ||
        (param_1[6] != DAT_004c0050)) || (param_1[7] != DAT_004c0054)) {
      DAT_004c0050 = param_1[6];
      DAT_004c0054 = param_1[7];
      puVar9 = &DAT_004c0078;
      DAT_004b7600 = param_1[4];
      DAT_004b7604 = param_1[5];
      do {
        puVar9[-6] = 0;
        puVar9[-5] = 0;
        puVar9[-1] = puVar9;
        puVar9 = puVar9 + 6;
      } while (puVar9 != (undefined4 *)0x4c0138);
      DAT_004c0120 = &DAT_004c0060;
      param_3[5] = 0;
      DAT_004c011c = 0;
      goto LAB_0047db8c;
    }
    puVar5 = DAT_004c0120;
    puVar14 = (uint *)0x0;
    puVar20 = (uint *)0x0;
    while (puVar12 = puVar5, puVar12 != (uint *)0x0) {
      if ((*puVar12 <= *param_3) && (*param_3 < puVar12[1])) {
        uVar13 = puVar12[2];
        piVar18 = (int *)puVar12[3];
        if (puVar12 != DAT_004c0120) {
          puVar20[5] = puVar12[5];
          puVar12[5] = (uint)DAT_004c0120;
          DAT_004c0120 = puVar12;
        }
        goto LAB_0047dca4;
      }
      puVar14 = puVar12;
      if (*puVar12 == 0 && puVar12[1] == 0) break;
      puVar5 = (uint *)puVar12[5];
      if (puVar5 != (uint *)0x0) {
        puVar20 = puVar12;
      }
    }
  }
  uVar11 = (uint)(ushort)param_1[3];
  bVar2 = false;
  uVar21 = 0;
  uVar16 = 0;
  piVar18 = (int *)0x0;
  piVar23 = (int *)0x0;
  while (uVar11 = uVar11 - 1, uVar11 != 0xffffffff) {
    iVar8 = *piVar17;
    piVar19 = piVar18;
    piVar22 = piVar23;
    if (iVar8 == 1) {
      uVar10 = uVar13 + piVar17[2];
      if (uVar10 <= *param_3) {
        if (uVar10 + piVar17[5] <= *param_3) goto LAB_0047dc30;
        bVar2 = true;
        uVar16 = uVar10 + piVar17[5];
        uVar21 = uVar10;
      }
    }
    else {
      piVar19 = piVar17;
      if ((iVar8 != 0x6474e550) && (piVar19 = piVar18, piVar22 = piVar17, iVar8 != 2)) {
LAB_0047dc30:
        piVar19 = piVar18;
        piVar22 = piVar23;
      }
    }
    piVar17 = piVar17 + 8;
    piVar18 = piVar19;
    piVar23 = piVar22;
  }
  if (!bVar2) {
    return 0;
  }
  if (0x1f < param_2) {
    if ((puVar14 != (uint *)0x0) && (puVar20 != (uint *)0x0)) {
      puVar20[5] = puVar14[5];
      puVar14[5] = (uint)DAT_004c0120;
      DAT_004c0120 = puVar14;
    }
    puVar14 = DAT_004c0120;
    DAT_004c0120[1] = uVar16;
    puVar14[4] = (uint)piVar23;
    *puVar14 = uVar21;
    puVar14[2] = uVar13;
    puVar14[3] = (uint)piVar18;
  }
LAB_0047dca4:
  if (piVar18 == (int *)0x0) {
    return 0;
  }
  pcVar24 = (char *)(uVar13 + piVar18[2]);
  if (*pcVar24 != '\x01') {
    return 1;
  }
  cVar1 = pcVar24[1]   //possible issue identified - semgrep
  uVar6 = FUN_0047d918(cVar1,param_3);
  uVar6 = FUN_0047ce1c(cVar1,uVar6,pcVar24 + 4,&local_48);
  cVar1 = pcVar24[2]   //possible issue identified - semgrep
  if ((cVar1 != -1) && (pcVar24[3] == ';')) {
    uVar7 = FUN_0047d918(cVar1,param_3);
    piVar17 = (int *)FUN_0047ce1c(cVar1,uVar7,uVar6,&local_44);
    if (local_44 == 0) {
      return 1;
    }
    if (((uint)piVar17 & 3) == 0) {
      pcVar15 = (char *)*param_3;
      uVar13 = local_44 - 1;
      if (pcVar15 < pcVar24 + *piVar17) {
        return 1;
      }
      if (pcVar15 < pcVar24 + piVar17[uVar13 * 2]) {
        uVar16 = 0;
        do {
          do {
            uVar21 = uVar13;
            if (uVar21 <= uVar16) {
              pcVar25 = FUN_00485c50;
              FUN_00485c50();
              uVar6 = (**(code **)(pcVar25 + 0x3a32c))(0x18);
                    /* WARNING: Could not recover jumptable at 0x0047dff4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
              uVar6 = (**(code **)(pcVar25 + 0x398d0))(uVar16,uVar6);
              return uVar6;
            }
            uVar13 = uVar21 + uVar16 >> 1;
          } while (pcVar15 < pcVar24 + piVar17[uVar13 * 2]);
          uVar16 = uVar13 + 1;
          iVar8 = uVar13 << 3;
          uVar13 = uVar21;
        } while (pcVar24 + piVar17[uVar16 * 2] <= pcVar15);
      }
      else {
        iVar8 = uVar13 * 8;
      }
      piVar17 = (int *)((int)piVar17 + iVar8);
      pcVar15 = pcVar24 + piVar17[1];
      bVar3 = FUN_0047cfb8(pcVar15 + (4 - *(int *)(pcVar15 + 4)));
      iVar8 = FUN_0047ccf0(bVar3);
      FUN_0047ce1c(bVar3 & 0xf,0,pcVar15 + iVar8 + 8,&local_40);
      if ((char *)*param_3 < local_40 + *piVar17 + (int)pcVar24) {
        param_3[4] = (uint)pcVar15;
      }
      local_40 = pcVar24 + *piVar17;
      goto LAB_0047df64;
    }
  }
  local_38 = param_3[1];
  local_34 = param_3[2];
  local_2c = 4;
  local_3c = 0;
  local_30 = local_48;
  uVar13 = FUN_0047d6f4(&local_3c,local_48,*param_3);
  param_3[4] = uVar13;
  if (uVar13 == 0) {
    return 1;
  }
  uVar4 = FUN_0047cfb8((uVar13 + 4) - *(int *)(uVar13 + 4));
  uVar6 = FUN_0047d918(uVar4,param_3);
  FUN_0047ce1c(uVar4,uVar6,param_3[4] + 8,&local_40);
LAB_0047df64:
  param_3[3] = (uint)local_40;
  return 1;
}