undefined4 * FUN_00473458(int param_1,int param_2)

{
  char cVar1;
  undefined4 *puVar2;
  char *pcVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  uint uVar7;
  uint uVar8;
  undefined4 uVar9;
  
  pcVar3 = *(char **)(param_1 + 0xc);
  if (*pcVar3 != 'S') {
    return (undefined4 *)0x0;
  }
  *(char **)(param_1 + 0xc) = pcVar3 + 1;
  cVar1 = pcVar3[1]   //possible issue identified - semgrep
  uVar7 = (uint)cVar1;
  if (uVar7 != 0) {
    *(char **)(param_1 + 0xc) = pcVar3 + 2;
    iVar4 = 0;
    if (uVar7 == 0x5f) goto LAB_00473548;
  }
  if ((9 < (byte)(cVar1 - 0x30U)) && (0x19 < (byte)(cVar1 + 0xbfU))) {
    uVar8 = *(uint *)(param_1 + 8) >> 3 & 1;
    if ((uVar8 == 0) && (param_2 != 0)) {
      uVar8 = (uint)((byte)(**(char **)(param_1 + 0xc) + 0xbdU) < 2);
    }
    pcVar3 = &DAT_004ae6fc;
    do {
      pcVar6 = pcVar3;
      if (pcVar6 == &DAT_004ae7c0) {
        return (undefined4 *)0x0;
      }
      pcVar3 = pcVar6 + 0x1c;
    } while ((int)*pcVar6 != uVar7);
    iVar4 = *(int *)(pcVar6 + 0x14);
    if (iVar4 != 0) {
      iVar5 = *(int *)(param_1 + 0x14);
      uVar9 = *(undefined4 *)(pcVar6 + 0x18);
      puVar2 = (undefined4 *)0x0;
      if (iVar5 < *(int *)(param_1 + 0x18)) {
        puVar2 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar5 * 0xc);
        *(int *)(param_1 + 0x14) = iVar5 + 1;
        if (puVar2 != (undefined4 *)0x0) {
          *puVar2 = 0x15;
          puVar2[1] = iVar4;
          puVar2[2] = uVar9;
        }
      }
      *(undefined4 **)(param_1 + 0x2c) = puVar2;
    }
    if (uVar8 == 0) {
      iVar4 = *(int *)(pcVar6 + 8);
      uVar9 = *(undefined4 *)(pcVar6 + 4);
    }
    else {
      iVar4 = *(int *)(pcVar6 + 0x10);
      uVar9 = *(undefined4 *)(pcVar6 + 0xc);
    }
    iVar5 = *(int *)(param_1 + 0x14);
    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + iVar4;
    if (*(int *)(param_1 + 0x18) <= iVar5) {
      return (undefined4 *)0x0;
    }
    puVar2 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar5 * 0xc);
    *(int *)(param_1 + 0x14) = iVar5 + 1;
    if (puVar2 != (undefined4 *)0x0) {
      *puVar2 = 0x15;
      puVar2[1] = uVar9;
      puVar2[2] = iVar4;
      return puVar2;
    }
    return (undefined4 *)0x0;
  }
  iVar4 = 0;
  do {
    iVar4 = iVar4 * 0x24 + uVar7;
    if (((uVar7 & 0xff) - 0x30 & 0xff) < 10) {
      iVar4 = iVar4 + -0x30;
    }
    else {
      iVar4 = iVar4 + -0x37;
      if (0x19 < ((uVar7 & 0xff) - 0x41 & 0xff)) {
        return (undefined4 *)0x0;
      }
    }
    if (iVar4 < 0) {
      return (undefined4 *)0x0;
    }
    uVar7 = (uint)**(char **)(param_1 + 0xc);
  } while ((uVar7 == 0) ||
          (*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1, uVar7 != 0x5f));
  iVar4 = iVar4 + 1;
LAB_00473548:
  if (iVar4 < *(int *)(param_1 + 0x20)) {
    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
    return *(undefined4 **)(*(int *)(param_1 + 0x1c) + iVar4 * 4);
  }
  return (undefined4 *)0x0;
}