undefined4 FUN_00406970(undefined4 param_1,int param_2,int param_3,uint param_4)

{
  bool bVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  undefined4 uVar7;
  int iVar8;
  int iVar9;
  undefined4 uVar10;
  undefined4 *puVar11;
  undefined4 *puVar12;
  int iVar13;
  int *piVar14;
  int *piVar15;
  int *piVar16;
  int *piVar17;
  undefined4 local_3c;
  
  iVar2 = sobj_new();
  iVar3 = sobj_new();
  iVar4 = solist_new();
  if (iVar2 == 0) {
    piVar16 = (int *)0x0;
    local_3c = 0xffffffff;
  }
  else {
    if ((iVar3 == 0) || (iVar4 == 0)) {
LAB_004070b8:
      piVar16 = (int *)0x0;
      local_3c = 0xffffffff;
    }
    else {
      local_3c = 0;
      bVar1 = false;
      piVar15 = (int *)0x0;
LAB_0040708c:
      iVar13 = xs_getc(param_1)   //possible issue identified - semgrep
      if (iVar13 != -1) {
        if (iVar13 == 0x3c) {
          solist_free(iVar4,0x3c);
          iVar13 = sobj_xstream_read_tokens(param_1,iVar4,0x3e,&DAT_0042257c);
          if (iVar13 == 0) goto LAB_004070b8;
          solist_get_reset(iVar4);
          iVar13 = solist_get_next(iVar4);
          if ((iVar13 == 0) || (iVar5 = sobj_get_length(iVar13), iVar5 == 0)) goto LAB_004070b8;
          iVar5 = sobj_get_char(iVar13,0);
          if (iVar5 != 0x3f) {
            iVar5 = sobj_get_char(iVar13,0);
            if (iVar5 == 0x2f) {
              iVar13 = solist_get_next(iVar4);
              if ((iVar13 == 0) || (iVar5 = sobj_get_length(iVar13), iVar5 == 0)) goto LAB_004070b8;
              pcVar6 = (char *)sobj_get_string(iVar13);
              iVar13 = strcmp(pcVar6,*(char **)(param_2 + 0x1c));
              if (iVar13 != 0) goto LAB_004070b8;
              piVar16 = (int *)0x0;
              if (bVar1) goto LAB_004070cc;
              sobj_eat_indent(iVar2);
              iVar13 = sobj_get_length(iVar2);
              piVar16 = (int *)0x0;
              if (iVar13 == 0) goto LAB_004070cc;
              iVar13 = sobj_new();
              if (iVar13 == 0) goto LAB_004070b8;
              uVar7 = sobj_get_string(iVar2);
              sobj_unescape_xml_sc(uVar7,iVar13);
              uVar7 = sobj_strdup(iVar13);
              *(undefined4 *)(param_2 + 0x20) = uVar7;
              sobj_del(iVar13);
              piVar16 = (int *)0x0;
              goto LAB_004070cc;
            }
            if (!bVar1) {
              sobj_eat_indent(iVar2);
              iVar5 = sobj_get_length(iVar2);
              if (iVar5 != 0) {
                iVar5 = sobj_new();
                if (iVar5 == 0) {
                  local_3c = 0xffffffff;
                }
                else {
                  uVar7 = sobj_get_string(iVar2);
                  sobj_unescape_xml_sc(uVar7,iVar5);
                  uVar7 = sobj_strdup(iVar5);
                  *(undefined4 *)(param_2 + 0x20) = uVar7;
                  sobj_del(iVar5);
                }
              }
              bVar1 = true;
            }
            pcVar6 = (char *)sobj_get_string(iVar13);
            if (pcVar6 != (char *)0x0) {
              if (piVar15 == (int *)0x0) {
                piVar15 = *(int **)(param_2 + 8);
              }
              else {
                piVar15 = (int *)*piVar15;
              }
              for (; piVar15 != (int *)(param_2 + 8); piVar15 = (int *)*piVar15) {
                iVar5 = strcmp((char *)piVar15[7],pcVar6);
                if (iVar5 == 0) {
                  piVar16 = (int *)0x0;
                  goto LAB_00406dec;
                }
              }
            }
            if ((param_3 != 0) && (iVar5 = sobj_strcmp(iVar13,param_3), iVar5 != 0))
            goto LAB_004070b8;
            piVar16 = (int *)FUN_00404fb0();
            piVar15 = piVar16;
            if (piVar16 != (int *)0x0) {
LAB_00406dec:
              if ((void *)piVar15[8] != (void *)0x0) {
                free((void *)piVar15[8]);
              }
              while (piVar17 = (int *)piVar15[4], piVar17 != piVar15 + 4) {
                piVar14 = (int *)piVar17[1];
                iVar5 = *piVar17;
                *piVar14 = iVar5;
                *(int **)(iVar5 + 4) = piVar14;
                *piVar17 = 0;
                piVar17[1] = 0;
                FUN_0040486c(piVar17);
              }
              piVar15[8] = 0;
              if (piVar16 != (int *)0x0) {
                iVar13 = sobj_strdup(iVar13);
                piVar16[7] = iVar13;
              }
              if ((param_4 & 1) != 0) {
                solist_get_reset(iVar4);
                iVar13 = solist_get_next(iVar4);
                if (iVar13 != 0) {
                  while (((((iVar13 = solist_get_next(iVar4), iVar13 != 0 &&
                            (iVar5 = solist_get_next(iVar4), iVar5 != 0)) &&
                           (iVar8 = solist_get_next(iVar4), iVar8 != 0)) &&
                          ((iVar9 = sobj_get_string(iVar5), iVar9 != 0 &&
                           (iVar9 = sobj_get_string(iVar13), iVar9 != 0)))) &&
                         (iVar9 = sobj_get_string(iVar8), iVar9 != 0))) {
                    pcVar6 = (char *)sobj_get_string(iVar5);
                    iVar5 = strcmp(pcVar6,"=");
                    if (iVar5 != 0) break;
                    uVar7 = sobj_get_string(iVar13);
                    uVar10 = sobj_get_string(iVar8);
                    puVar11 = (undefined4 *)FUN_00404d94(uVar7,uVar10);
                    if (puVar11 == (undefined4 *)0x0) break;
                    puVar12 = (undefined4 *)piVar15[5];
                    *puVar11 = piVar17;
                    piVar15[5] = (int)puVar11;
                    *puVar12 = puVar11;
                    puVar11[1] = puVar12;
                  }
                }
              }
              solist_get_reset(iVar4);
              uVar7 = solist_get_prev(iVar4);
              pcVar6 = (char *)sobj_get_string(uVar7);
              iVar13 = strcmp(pcVar6,"/");
              if ((iVar13 == 0) || (iVar13 = FUN_00406970(param_1,piVar15,0,param_4), -1 < iVar13))
              {
                if (piVar16 != (int *)0x0) {
                  puVar11 = *(undefined4 **)(param_2 + 0xc);
                  *(int **)(param_2 + 0xc) = piVar16;
                  *piVar16 = param_2 + 8;
                  piVar16[1] = (int)puVar11;
                  *puVar11 = piVar16;
                  piVar16[6] = param_2;
                  piVar15 = piVar16;
                }
                goto LAB_0040708c;
              }
            }
            local_3c = 0xffffffff;
            goto LAB_004070cc;
          }
        }
        else {
          sobj_add_char(iVar2);
        }
        goto LAB_0040708c;
      }
      piVar16 = (int *)0x0;
    }
LAB_004070cc:
    sobj_del(iVar2);
  }
  if (iVar3 != 0) {
    sobj_del(iVar3);
  }
  if (piVar16 != (int *)0x0) {
    FUN_00404900(piVar16);
  }
  if (iVar4 != 0) {
    solist_del(iVar4);
  }
  return local_3c;
}