undefined4 * FUN_00475d0c(int param_1)

{
  char cVar1;
  char cVar2;
  undefined4 uVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined4 *puVar7;
  int iVar8;
  char *pcVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  
  cVar1 = **(char **)(param_1 + 0xc)   //possible issue identified - semgrep
  if (cVar1 != '\0') {
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
  }
  iVar11 = (int)**(char **)(param_1 + 0xc);
  if (iVar11 != 0) {
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
  }
  if (cVar1 == 'v') {
    uVar12 = iVar11 - 0x30;
    if ((uVar12 & 0xff) < 10) {
      iVar11 = FUN_00475334(param_1);
      iVar8 = *(int *)(param_1 + 0x14);
      if (*(int *)(param_1 + 0x18) <= iVar8) {
        return (undefined4 *)0x0;
      }
      puVar5 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar8 * 0xc);
      *(int *)(param_1 + 0x14) = iVar8 + 1;
      if (puVar5 == (undefined4 *)0x0) {
        return (undefined4 *)0x0;
      }
      if ((int)uVar12 < 0) {
        return (undefined4 *)0x0;
      }
      if (iVar11 == 0) {
        return (undefined4 *)0x0;
      }
      *puVar5 = 0x2a;
      puVar5[1] = uVar12;
      puVar5[2] = iVar11;
      return puVar5;
    }
  }
  else if ((cVar1 == 'c') && (iVar11 == 0x76)) {
    uVar3 = FUN_004754f4(param_1);
                    /* WARNING: Could not recover jumptable at 0x00475e40. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    puVar5 = (undefined4 *)FUN_00473000(param_1,0x2b,uVar3,0);
    return puVar5;
  }
  iVar10 = 0;
  iVar4 = 0x31;
  iVar8 = 0x31;
  do {
    iVar6 = iVar4 / 2 + iVar10;
    puVar5 = (undefined4 *)(iVar6 * 0x10 + 0x4ae3dc);
    pcVar9 = (char *)*puVar5;
    cVar2 = *pcVar9;
    if (cVar1 == cVar2) {
      iVar4 = (int)pcVar9[1];
      if (iVar11 == iVar4) {
        iVar11 = *(int *)(param_1 + 0x14);
        if (*(int *)(param_1 + 0x18) <= iVar11) {
          return (undefined4 *)0x0;
        }
        puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar11 * 0xc);
        *(int *)(param_1 + 0x14) = iVar11 + 1;
        if (puVar7 != (undefined4 *)0x0) {
          *puVar7 = 0x29;
          puVar7[1] = puVar5;
          return puVar7;
        }
        return (undefined4 *)0x0;
      }
      if (iVar4 <= iVar11) {
        iVar10 = iVar6 + 1;
        iVar6 = iVar8;
      }
    }
    else if (cVar2 <= cVar1) {
      iVar10 = iVar6 + 1;
      iVar6 = iVar8;
    }
    iVar4 = iVar6 - iVar10;
    iVar8 = iVar6;
    if (iVar10 == iVar6) {
      return (undefined4 *)0x0;
    }
  } while( true );
}