int FUN_004823c0(undefined4 *param_1)

{
  bool bVar1;
  short *psVar2;
  short *psVar3;
  char cVar4;
  char cVar5;
  undefined4 uVar6;
  uint uVar7;
  char *pcVar8;
  short *psVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  int iVar14;
  char *pcVar15;
  char *pcVar16;
  uint uVar17;
  uint local_48 [10];
  
  local_48[4] = 8;
  local_48[3] = 8;
  local_48[0] = 0;
  local_48[1] = 0;
  uVar17 = param_1[6];
  uVar12 = 0;
  iVar14 = 0;
  pcVar16 = (char *)*param_1;
  uVar7 = 0;
LAB_00482458:
  pcVar8 = pcVar16;
  pcVar15 = pcVar8;
  if (*pcVar8 == '*') {
    pcVar15 = pcVar8 + 1;
    local_48[3 - iVar14] = 0;
  }
  uVar10 = 0;
  while( true ) {
    iVar13 = (int)*pcVar15;
    if ((*(ushort *)(PTR_DAT_004b7614 + iVar13 * 2) & 8) == 0) break;
    if ((int)uVar10 < 0xfff) {
      uVar10 = uVar10 * 10 + -0x30 + iVar13;
    }
    pcVar15 = pcVar15 + 1;
  }
  if (pcVar8[-1] == '%') {
    if ((iVar13 == 0x24) && (0 < (int)uVar10)) {
      if (uVar17 == 0) {
        return -1;
      }
      if ((int)uVar17 < (int)uVar10) {
        uVar17 = uVar10;
      }
      local_48[2] = uVar10;
      pcVar16 = pcVar15 + 1;
LAB_0048251c:
      do {
        uVar10 = 1;
        pcVar8 = " +0-#\'I";
        while (cVar4 = *pcVar8, pcVar8 = pcVar8 + 1, *pcVar16 != cVar4) {
          uVar10 = uVar10 << 1;
          if (*pcVar8 == '\0') {
            uVar12 = uVar12 & ~((int)(uVar12 & 10) >> 1);
            uVar10 = 0;
            if (pcVar16[-1] != '%') goto LAB_00482458;
            cVar4 = *pcVar8;
            goto LAB_00482574;
          }
        }
        uVar12 = uVar12 | uVar10;
        pcVar16 = pcVar16 + 1;
      } while( true );
    }
    if ((int)uVar17 < 1) {
      uVar17 = 0;
      pcVar16 = pcVar8;
      if ((pcVar15 <= pcVar8) || (*pcVar8 == '0')) goto LAB_0048251c;
    }
    else if (iVar13 != 0x6d) {
      return -1;
    }
  }
  cVar4 = *pcVar8;
  pcVar16 = pcVar15;
LAB_00482574:
  if (cVar4 == '*') {
    if (uVar17 == 0) {
      if (pcVar8 + 1 != pcVar16) {
        return -1;
      }
    }
    else {
      if (*pcVar16 != '$') {
        return -1;
      }
      if ((int)uVar10 < 1) {
        return -1;
      }
      pcVar16 = pcVar16 + 1;
      local_48[-iVar14] = uVar10;
    }
    uVar10 = 0x80000000;
  }
  if (iVar14 != 0) goto LAB_004825e0;
  uVar7 = uVar10;
  if (*pcVar16 == '.') {
    iVar14 = -1;
    pcVar16 = pcVar16 + 1;
    goto LAB_00482458;
  }
  uVar10 = 0xffffffff;
LAB_004825e0:
  pcVar8 = "hlLjztqZ";
  cVar4 = 'h';
  while (*pcVar16 != cVar4) {
    pcVar8 = pcVar8 + 1;
    if (*pcVar8 == '\0') goto LAB_0048260c;
    cVar4 = *pcVar8;
  }
  pcVar16 = pcVar16 + 1;
LAB_0048260c:
  if ((int)(pcVar8 + -0x4988c0) < 2) {
    cVar4 = *pcVar16;
    if (cVar4 != *pcVar8) {
      cVar5 = pcVar8[9]   //possible issue identified - semgrep
      goto LAB_00482644;
    }
    pcVar16 = pcVar16 + 1;
    cVar5 = pcVar8[0x12]   //possible issue identified - semgrep
  }
  else {
    cVar5 = pcVar8[9]   //possible issue identified - semgrep
  }
  cVar4 = *pcVar16;
LAB_00482644:
  uVar11 = (int)cVar5 << 8;
  if (cVar4 == '\0') {
    return -1;
  }
  pcVar8 = "npxXoudifFeEgGaACScs";
  cVar5 = 'n';
  while (cVar5 != cVar4) {
    pcVar8 = pcVar8 + 1;
    cVar5 = *pcVar8;
    if (cVar5 == '\0') goto LAB_004826f8;
  }
  pcVar15 = pcVar8 + -0x498900;
  if ((0x11 < (int)pcVar15) && ((uVar11 & 0x400) != 0)) {
    pcVar15 = pcVar8 + -0x498902;
  }
  param_1[8] = pcVar15;
  for (pcVar8 = ""; (int)*pcVar8 < (int)pcVar15; pcVar8 = pcVar8 + 1) {
  }
  local_48[5] = ((int)(short)(&DAT_004988e4)[(int)(pcVar8 + -0x4988f4)] | uVar11) &
                (int)(short)(&DAT_004988d4)[(int)(pcVar8 + -0x4988f4)];
  pcVar8 = "npxXoudifFeEgGaACScs";
LAB_004826f8:
  uVar6 = 0x30;
  if ((uVar12 & 4) == 0) {
    uVar6 = 0x20;
  }
  param_1[3] = (int)*pcVar16;
  param_1[1] = uVar10;
  param_1[2] = uVar7;
  param_1[5] = uVar6;
  param_1[4] = uVar11 & 0xf00 | uVar12 & 0xfffffffb;
  param_1[7] = 1;
  if (*pcVar8 == '\0') {
    if (*pcVar16 == 'm') {
      param_1[8] = 0x14;
      param_1[7] = 0;
    }
    else {
      param_1[8] = 0x15;
      cVar4 = *PTR_DAT_004b77b0;
      pcVar8 = PTR_DAT_004b77b0;
      while (cVar4 != *pcVar16) {
        pcVar8 = pcVar8 + 1;
        if (PTR_DAT_004b77b0 + 10 <= pcVar8) {
          return -1;
        }
        cVar4 = *pcVar8;
      }
      iVar14 = (*(code *)(&DAT_004c22fc)[(int)pcVar8 - (int)PTR_DAT_004b77b0])
                         (param_1 + 1,5,local_48 + 5);
      param_1[7] = iVar14;
      if (5 < iVar14) {
        return -1;
      }
    }
  }
  iVar14 = 0;
  if ((int)uVar17 < 1) {
    *(undefined1 *)((int)param_1 + 0x26) = 1;
    FUN_00483c90(param_1 + 10,local_48 + 5,param_1[7] << 2);
    iVar14 = param_1[7];
    goto LAB_00482934;
  }
  bVar1 = true;
  do {
    if (bVar1) {
      uVar7 = (uint)(byte)local_48[iVar14];
      *(byte *)((int)param_1 + iVar14 + 0x24) = (byte)local_48[iVar14];
    }
    else {
      uVar7 = (local_48[2] - 2) + iVar14;
    }
    if (((int)uVar17 < (int)uVar7) && (uVar17 = uVar7, 9 < (int)uVar7)) {
      return -1;
    }
    uVar10 = local_48[iVar14 + 3];
    uVar12 = param_1[uVar7 + 9];
    if (uVar10 == 8) {
LAB_004828ec:
      iVar13 = param_1[7];
    }
    else {
      if ((uVar12 == 8) || (psVar9 = (short *)&UNK_00498938, uVar12 == uVar10)) {
LAB_004828e0:
        param_1[uVar7 + 9] = uVar10;
        goto LAB_004828ec;
      }
      do {
        psVar2 = psVar9;
        psVar9 = psVar2 + -1;
        if ((int)*psVar9 == uVar12) break;
      } while (&UNK_00498921 <= psVar9);
      psVar9 = (short *)&UNK_00498938;
      do {
        psVar3 = psVar9;
        psVar9 = psVar3 + -1;
        if ((int)*psVar9 == uVar10) break;
      } while (&UNK_00498921 <= psVar9);
      if ((byte)(&UNK_00498938)[(int)(psVar2 + -0x24c491) >> 1] <=
          (byte)(&UNK_00498938)[(int)(psVar3 + -0x24c491) >> 1]) goto LAB_004828e0;
      iVar13 = param_1[7];
    }
    iVar14 = iVar14 + 1;
    if (iVar13 + 1 < iVar14) {
      iVar14 = param_1[7];
LAB_00482934:
      *param_1 = pcVar16 + 1;
      param_1[6] = uVar17;
      return iVar14 + 2;
    }
    bVar1 = iVar14 < 3;
  } while( true );
}