uint * FUN_004763b0(int param_1,int param_2)

{
  uint *puVar1;
  char cVar2;
  uint *puVar3;
  uint *puVar4;
  uint *puVar5;
  int *piVar6;
  char *pcVar7;
  int iVar8;
  bool bVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  
  if ((**(char **)(param_1 + 0xc) != 'G') && (**(char **)(param_1 + 0xc) != 'T')) {
    puVar5 = (uint *)FUN_0047733c();
    if ((puVar5 != (uint *)0x0) && ((param_2 != 0 && ((*(uint *)(param_1 + 8) & 1) == 0)))) {
      for (; *puVar5 - 0x19 < 3; puVar5 = (uint *)puVar5[1]) {
      }
      if (*puVar5 == 2) {
        for (piVar6 = (int *)puVar5[2]; *piVar6 - 0x19U < 3; piVar6 = (int *)piVar6[1]) {
        }
        puVar5[2] = (uint)piVar6;
        return puVar5;
      }
      return puVar5;
    }
    if (puVar5 == (uint *)0x0) {
      return (uint *)0x0;
    }
    if (**(char **)(param_1 + 0xc) == '\0') {
      return puVar5;
    }
    puVar4 = puVar5;
    if (**(char **)(param_1 + 0xc) == 'E') {
      return puVar5;
    }
    do {
      uVar10 = *puVar4;
      if (uVar10 == 4) {
        puVar4 = (uint *)puVar4[1];
        goto LAB_00476b30;
      }
    } while (((3 < uVar10) && (uVar10 - 0x19 < 3)) &&
            (puVar1 = puVar4 + 1, puVar4 = (uint *)*puVar1, (uint *)*puVar1 != (uint *)0x0));
    bVar9 = false;
    goto LAB_00476ba8;
  }
  iVar12 = *(int *)(param_1 + 0x30);
  pcVar7 = *(char **)(param_1 + 0xc);
  *(int *)(param_1 + 0x30) = iVar12 + 0x14;
  if (*pcVar7 == 'T') {
    *(char **)(param_1 + 0xc) = pcVar7 + 1;
    cVar2 = pcVar7[1]   //possible issue identified - semgrep
    if (cVar2 == '\0') {
      return (uint *)0x0;
    }
    *(char **)(param_1 + 0xc) = pcVar7 + 2;
    if (cVar2 == 'S') {
      puVar5 = (uint *)FUN_004754f4(param_1);
      uVar10 = 0xc;
      goto LAB_00476548;
    }
    if ('S' < cVar2) {
      if (cVar2 == 'c') {
        iVar12 = FUN_0047313c(param_1,0);
        if (iVar12 == 0) {
          return (uint *)0x0;
        }
        iVar12 = FUN_0047313c(param_1,0);
        if (iVar12 == 0) {
          return (uint *)0x0;
        }
        puVar5 = (uint *)FUN_004763b0(param_1,0);
        uVar10 = 0x10;
      }
      else if (cVar2 < 'd') {
        if (cVar2 == 'T') {
          *(int *)(param_1 + 0x30) = iVar12 + 10;
          puVar5 = (uint *)FUN_004754f4(param_1);
          uVar10 = 9;
        }
        else {
          if (cVar2 != 'V') {
            return (uint *)0x0;
          }
          *(int *)(param_1 + 0x30) = iVar12 + 0xf;
          puVar5 = (uint *)FUN_004754f4(param_1);
          uVar10 = 8;
        }
      }
      else if (cVar2 == 'h') {
        iVar12 = FUN_0047313c(param_1,0x68);
        if (iVar12 == 0) {
          return (uint *)0x0;
        }
        puVar5 = (uint *)FUN_004763b0(param_1,0);
        uVar10 = 0xe;
      }
      else {
        if (cVar2 != 'v') {
          return (uint *)0x0;
        }
        iVar12 = FUN_0047313c(param_1,0x76);
        if (iVar12 == 0) {
          return (uint *)0x0;
        }
        puVar5 = (uint *)FUN_004763b0(param_1,0);
        uVar10 = 0xf;
      }
      goto LAB_00476548;
    }
    if (cVar2 == 'F') {
      puVar5 = (uint *)FUN_004754f4(param_1);
      uVar10 = 0xd;
      goto LAB_00476548;
    }
    if ('F' < cVar2) {
      if (cVar2 == 'I') {
        puVar5 = (uint *)FUN_004754f4(param_1);
        uVar10 = 0xb;
      }
      else {
        if (cVar2 != 'J') {
          return (uint *)0x0;
        }
        puVar5 = (uint *)FUN_004754f4(param_1);
        uVar10 = 0x11;
      }
      goto LAB_00476548;
    }
    if (cVar2 != 'C') {
      return (uint *)0x0;
    }
    puVar4 = (uint *)FUN_004754f4(param_1);
    iVar12 = FUN_004730c0(param_1);
    if (iVar12 < 0) {
      return (uint *)0x0;
    }
    if (**(char **)(param_1 + 0xc) != '_') {
      return (uint *)0x0;
    }
    *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
    puVar5 = (uint *)FUN_004754f4(param_1);
    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 5;
    uVar10 = 10;
  }
  else {
    if (*pcVar7 != 'G') {
      return (uint *)0x0;
    }
    *(char **)(param_1 + 0xc) = pcVar7 + 1;
    cVar2 = pcVar7[1]   //possible issue identified - semgrep
    if (cVar2 == '\0') {
      return (uint *)0x0;
    }
    *(char **)(param_1 + 0xc) = pcVar7 + 2;
    if (cVar2 == 'R') {
      puVar5 = (uint *)FUN_0047733c(param_1);
      uVar10 = 0x13;
    }
    else if (cVar2 < 'S') {
      if (cVar2 != 'A') {
        return (uint *)0x0;
      }
      puVar5 = (uint *)FUN_004763b0(param_1,0);
      uVar10 = 0x14;
    }
    else if (cVar2 == 'V') {
      puVar5 = (uint *)FUN_0047733c(param_1);
      uVar10 = 0x12;
    }
    else {
      if (cVar2 != 'r') {
        return (uint *)0x0;
      }
      iVar12 = FUN_004730c0(param_1);
      if (iVar12 < 2) {
        return (uint *)0x0;
      }
      cVar2 = **(char **)(param_1 + 0xc)   //possible issue identified - semgrep
      if (cVar2 == '\0') {
        return (uint *)0x0;
      }
      pcVar7 = *(char **)(param_1 + 0xc) + 1;
      *(char **)(param_1 + 0xc) = pcVar7;
      if (cVar2 != '_') {
        return (uint *)0x0;
      }
      iVar12 = iVar12 + -1;
      puVar4 = (uint *)0x0;
      do {
        if (*pcVar7 == '\0') {
          return (uint *)0x0;
        }
        uVar10 = 0;
        if (*pcVar7 == '$') {
          cVar2 = pcVar7[1]   //possible issue identified - semgrep
          if (cVar2 == 'S') {
            uVar10 = 0x2f;
          }
          else if (cVar2 == '_') {
            uVar10 = 0x2e;
          }
          else {
            if (cVar2 != '$') {
              return (uint *)0x0;
            }
            uVar10 = 0x24;
          }
          iVar8 = *(int *)(param_1 + 0x14);
          puVar5 = (uint *)0x0;
          if (iVar8 < *(int *)(param_1 + 0x18)) {
            puVar5 = (uint *)(*(int *)(param_1 + 0x10) + iVar8 * 0xc);
            *(int *)(param_1 + 0x14) = iVar8 + 1;
            if (puVar5 != (uint *)0x0) {
              puVar5[1] = uVar10;
              *puVar5 = 0x36;
            }
          }
          pcVar7 = (char *)(*(int *)(param_1 + 0xc) + 2);
          *(char **)(param_1 + 0xc) = pcVar7;
          if (puVar5 == (uint *)0x0) {
            return (uint *)0x0;
          }
          iVar12 = iVar12 + -2;
        }
        else {
          do {
            if ((pcVar7[uVar10] == '\0') || (uVar11 = uVar10 + 1, pcVar7[uVar10] == '$')) break;
            uVar10 = uVar11;
          } while ((int)uVar11 < iVar12);
          iVar8 = *(int *)(param_1 + 0x14);
          puVar5 = (uint *)0x0;
          if (iVar8 < *(int *)(param_1 + 0x18)) {
            puVar5 = (uint *)(*(int *)(param_1 + 0x10) + iVar8 * 0xc);
            *(int *)(param_1 + 0x14) = iVar8 + 1;
            if ((puVar5 == (uint *)0x0) || (uVar10 == 0)) {
              puVar5 = (uint *)0x0;
            }
            else {
              puVar5[1] = (uint)pcVar7;
              *puVar5 = 0;
              puVar5[2] = uVar10;
            }
          }
          pcVar7 = (char *)(*(int *)(param_1 + 0xc) + uVar10);
          *(char **)(param_1 + 0xc) = pcVar7;
          if (puVar5 == (uint *)0x0) {
            return (uint *)0x0;
          }
          iVar12 = iVar12 - uVar10;
        }
        if ((puVar4 != (uint *)0x0) &&
           (puVar5 = (uint *)FUN_00473000(param_1,0x35,puVar4,puVar5), puVar5 == (uint *)0x0)) {
          return (uint *)0x0;
        }
        puVar4 = puVar5;
      } while (0 < iVar12);
      uVar10 = 0x34;
    }
LAB_00476548:
    puVar4 = (uint *)0x0;
  }
LAB_00476bd0:
  switch(uVar10) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 10:
  case 0x1c:
  case 0x26:
  case 0x2c:
  case 0x2d:
  case 0x2e:
  case 0x2f:
  case 0x30:
  case 0x31:
  case 0x32:
  case 0x33:
  case 0x35:
    if (puVar5 == (uint *)0x0) {
      return (uint *)0x0;
    }
  case 0x25:
    puVar1 = puVar4;
    break;
  default:
    return (uint *)0x0;
  case 8:
  case 9:
  case 0xb:
  case 0xc:
  case 0xd:
  case 0xe:
  case 0xf:
  case 0x10:
  case 0x11:
  case 0x12:
  case 0x13:
  case 0x14:
  case 0x1d:
  case 0x1e:
  case 0x1f:
  case 0x20:
  case 0x21:
  case 0x23:
  case 0x27:
  case 0x28:
  case 0x2b:
  case 0x34:
    puVar1 = puVar5;
    break;
  case 0x16:
  case 0x17:
  case 0x18:
  case 0x19:
  case 0x1a:
  case 0x1b:
  case 0x24:
    goto switchD_0047303c_caseD_16;
  }
  puVar3 = (uint *)0x0;
  if (puVar1 != (uint *)0x0) {
switchD_0047303c_caseD_16:
    iVar12 = *(int *)(param_1 + 0x14);
    puVar3 = (uint *)0x0;
    if (iVar12 < *(int *)(param_1 + 0x18)) {
      puVar3 = (uint *)(*(int *)(param_1 + 0x10) + iVar12 * 0xc);
      *(int *)(param_1 + 0x14) = iVar12 + 1;
      if (puVar3 != (uint *)0x0) {
        *puVar3 = uVar10;
        puVar3[1] = (uint)puVar5;
        puVar3[2] = (uint)puVar4;
        return puVar3;
      }
    }
  }
  return puVar3;
LAB_00476b30:
  bVar9 = false;
  if (puVar4 == (uint *)0x0) goto LAB_00476b8c;
  uVar10 = *puVar4;
  if (7 < uVar10) {
    if (uVar10 == 0x2b) {
LAB_00476b74:
      bVar9 = true;
    }
    else {
      bVar9 = false;
    }
    goto LAB_00476b8c;
  }
  if (5 < uVar10) goto LAB_00476b74;
  bVar9 = false;
  if (1 < uVar10 - 1) goto LAB_00476b8c;
  puVar4 = (uint *)puVar4[2];
  goto LAB_00476b30;
LAB_00476b8c:
  bVar9 = !bVar9;
LAB_00476ba8:
  puVar4 = (uint *)FUN_00476208(param_1,bVar9);
  uVar10 = 3;
  goto LAB_00476bd0;
}