int FUN_00409a00(undefined4 *param_1,int param_2,int param_3)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int iVar5;
  undefined4 *puVar6;
  undefined4 uVar7;
  char *pcVar8;
  int *piVar9;
  undefined *puVar10;
  int iVar11;
  undefined4 uVar12;
  int *piVar13;
  int local_58;
  int local_54;
  undefined1 auStack_50 [8];
  undefined4 *local_48;
  undefined4 *local_44;
  undefined4 *local_40;
  undefined4 *local_3c;
  undefined4 *local_38;
  undefined4 *local_34;
  undefined4 *local_30;
  undefined4 *local_2c;
  
  iVar1 = sobj_new();
  iVar11 = 0;
  iVar2 = sobj_new();
  if (iVar1 != 0) {
    FUN_00407458(param_1[1],iVar1,&local_54);
    iVar11 = 0;
    if (iVar2 != 0) {
      local_30 = param_1 + 6;
      local_34 = param_1 + 8;
      local_38 = param_1 + 10;
      local_3c = param_1 + 0xc;
      local_40 = param_1 + 0xe;
      local_44 = param_1 + 0x10;
      local_48 = param_1 + 0x12;
      local_2c = param_1 + 4;
      while (iVar3 = sobj_empty(iVar1), iVar3 == 0) {
        if ((param_3 != 0) && (iVar3 = sobj_strcmp(iVar1,param_3), iVar3 == 0)) goto LAB_0040a9b8;
        if (local_54 != 0) {
          client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
          client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
          uVar7 = *param_1;
          pcVar8 = "should not see quotation mark here !";
          goto LAB_00409bc0;
        }
        iVar11 = sobj_get_char(iVar1,0);
        if (iVar11 == 0x24) {
          pcVar8 = (char *)sobj_get_string(iVar1);
          iVar3 = sobj_new();
          if (iVar3 == 0) goto LAB_0040a514;
          piVar4 = (int *)malloc(0x24)   //possible issue identified - semgrep
          if (piVar4 == (int *)0x0) {
            client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
            client_printf(*param_1,"!! %s: File:[%s]\n","INTERNAL ERROR",param_1[2]);
            client_printf(*param_1,"memory allocation failed !");
            client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
          }
          else {
            memset(piVar4,0,0x24)   //possible issue identified - semgrep
            piVar9 = piVar4 + 6;
            piVar4[2] = 0;
            piVar4[1] = (int)piVar4;
            *piVar4 = (int)piVar4;
            piVar4[7] = (int)piVar9;
            piVar4[6] = (int)piVar9;
            iVar11 = strcmp(pcVar8,"$_GLOBALS");
            puVar6 = local_30;
            if (((((iVar11 == 0) ||
                  (iVar11 = strcmp(pcVar8,"$_SERVER"), puVar6 = local_34, iVar11 == 0)) ||
                 (iVar11 = strcmp(pcVar8,"$_GET"), puVar6 = local_38, iVar11 == 0)) ||
                ((iVar11 = strcmp(pcVar8,"$_POST"), puVar6 = local_3c, iVar11 == 0 ||
                 (iVar11 = strcmp(pcVar8,"$_ENV"), puVar6 = local_40, iVar11 == 0)))) ||
               ((iVar11 = strcmp(pcVar8,"$_FILES"), puVar6 = local_44, iVar11 == 0 ||
                (iVar11 = strcmp(pcVar8,"$_FILETYPES"), puVar6 = local_48, iVar11 == 0)))) {
              sobj_free(iVar3);
              FUN_00407458(param_1[1],iVar3,&local_58);
              if (local_58 == 0) {
                iVar11 = sobj_strcmp(iVar3,&DAT_00422728);
                if (iVar11 == 0) {
                  sobj_free(iVar3);
                  FUN_00407458(param_1[1],iVar3,&local_58);
                  iVar11 = sobj_strdup(iVar3);
                  piVar4[4] = iVar11;
                  sobj_free(iVar3);
                  FUN_00407458(param_1[1],iVar3,&local_58);
                  if (local_58 != 0) goto LAB_0040a040;
                  iVar11 = sobj_strcmp(iVar3,"]");
                  if (iVar11 == 0) {
                    piVar4[5] = (int)puVar6;
                    goto LAB_00409f9c;
                  }
                  client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
                  client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                  uVar7 = *param_1;
                  pcVar8 = "expecting \']\'";
                }
                else {
                  client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
                  client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                  uVar7 = *param_1;
                  pcVar8 = "expecting \'[\'";
                }
              }
              else {
LAB_0040a040:
                client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
                client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                uVar7 = *param_1;
                pcVar8 = "should not see quotation mark here !";
              }
LAB_0040a090:
              client_printf(uVar7,pcVar8);
              uVar7 = *param_1;
            }
            else {
              pcVar8 = strdup(pcVar8 + 1)   //possible issue identified - semgrep
              piVar4[4] = (int)pcVar8;
              piVar4[5] = 0;
LAB_00409f9c:
              sobj_free(iVar3);
              FUN_00407458(param_1[1],iVar3,&local_58);
              iVar11 = sobj_empty(iVar3);
              if (iVar11 != 0) {
                client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
                client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                uVar7 = *param_1;
                pcVar8 = "unable to read token !";
                goto LAB_0040a090;
              }
              if (local_58 != 0) goto LAB_0040a040;
              iVar11 = sobj_strcmp(iVar3,&DAT_004227d0);
              iVar5 = 1;
              if (iVar11 == 0) {
LAB_0040a134:
                piVar4[3] = iVar5;
LAB_0040a160:
                sobj_del(iVar3);
                goto LAB_0040a2cc;
              }
              iVar11 = sobj_strcmp(iVar3,&DAT_004227d4);
              iVar5 = 2;
              if (iVar11 == 0) goto LAB_0040a134;
              iVar11 = sobj_strcmp(iVar3,&DAT_004227d8);
              iVar5 = 3;
              if (iVar11 == 0) goto LAB_0040a134;
              iVar11 = sobj_strcmp(iVar3,&DAT_004227dc);
              iVar5 = 4;
              if (iVar11 == 0) goto LAB_0040a134;
              iVar11 = sobj_strcmp(iVar3,"=");
              if (iVar11 == 0) {
                piVar4[3] = 0;
                goto LAB_0040a160;
              }
LAB_0040a19c:
              client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
              client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
              uVar12 = *param_1;
              uVar7 = sobj_get_string(iVar3);
              client_printf(uVar12,"got an invalid token [%s]",uVar7);
              uVar7 = *param_1;
            }
            client_printf(uVar7,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","SYNTAX ERROR");
LAB_0040aa1c:
            FUN_00409248(piVar4);
          }
          iVar11 = -1;
LAB_0040a360:
          if (iVar3 != 0) {
LAB_0040a77c:
            sobj_del(iVar3);
          }
        }
        else {
          iVar11 = sobj_strcmp(iVar1,"function");
          if (iVar11 == 0) {
            iVar11 = FUN_0040b870(param_1,param_2);
            goto LAB_0040a974;
          }
          iVar11 = sobj_strcmp(iVar1,&DAT_004227ec);
          if (iVar11 == 0) {
            piVar4 = (int *)malloc(0x24)   //possible issue identified - semgrep
            if (piVar4 == (int *)0x0) {
LAB_0040a514:
              client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
              client_printf(*param_1,"!! %s: File:[%s]\n","INTERNAL ERROR",param_1[2]);
              client_printf(*param_1,"memory allocation failed !");
              client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
              iVar11 = -1;
              goto LAB_0040a974;
            }
            memset(piVar4,0,0x24)   //possible issue identified - semgrep
            iVar11 = 5;
LAB_0040a2c0:
            piVar9 = piVar4 + 3;
            piVar4[2] = iVar11;
            piVar4[4] = (int)piVar9;
            piVar4[3] = (int)piVar9;
LAB_0040a2cc:
            iVar3 = FUN_00407f84(param_1,piVar9);
            if (iVar3 == 0) goto LAB_0040aa1c;
            iVar11 = sobj_strcmp(iVar3,&DAT_0042335c);
            if (iVar11 != 0) goto LAB_0040a19c;
            puVar6 = *(undefined4 **)(param_2 + 4);
            *piVar4 = param_2;
            *(int **)(param_2 + 4) = piVar4;
            *puVar6 = piVar4;
            piVar4[1] = (int)puVar6;
            iVar11 = 0;
            goto LAB_0040a360;
          }
          iVar11 = sobj_strcmp(iVar1,"return");
          if (iVar11 == 0) {
            piVar4 = (int *)malloc(0x24)   //possible issue identified - semgrep
            if (piVar4 != (int *)0x0) {
              memset(piVar4,0,0x24)   //possible issue identified - semgrep
              iVar11 = 6;
              goto LAB_0040a2c0;
            }
            goto LAB_0040a514;
          }
          iVar11 = sobj_strcmp(iVar1,"break");
          if (iVar11 == 0) {
            uVar7 = 7;
          }
          else {
            iVar11 = sobj_strcmp(iVar1,&DAT_00422804);
            if (iVar11 == 0) {
              uVar7 = 8;
            }
            else {
              iVar11 = sobj_strcmp(iVar1,"continue");
              if (iVar11 != 0) {
                iVar11 = sobj_strcmp(iVar1,"require");
                if (iVar11 == 0) {
                  uVar7 = 1;
LAB_0040a454:
                  iVar11 = FUN_0040b3ec(param_1,param_2,uVar7);
                  goto LAB_0040a974;
                }
                iVar11 = sobj_strcmp(iVar1,"include");
                if (iVar11 == 0) {
                  uVar7 = 0;
                  goto LAB_0040a454;
                }
                sobj_free(iVar2);
                FUN_00407458(param_1[1],iVar2,auStack_50);
                iVar11 = sobj_strcmp(iVar2,&DAT_0042274c);
                if (iVar11 == 0) {
                  iVar11 = sobj_strcmp(iVar1,&DAT_00422828);
                  if (iVar11 == 0) {
                    iVar11 = FUN_0040c158(param_1,param_2);
                    goto LAB_0040a974;
                  }
                  iVar11 = sobj_strcmp(iVar1,"while");
                  if (iVar11 != 0) {
                    iVar11 = sobj_strcmp(iVar1,"foreach");
                    if (iVar11 == 0) {
                      iVar11 = FUN_0040aa44(param_1,param_2);
                    }
                    else {
                      uVar7 = sobj_get_string(iVar1);
                      iVar11 = FUN_00407c68(uVar7);
                      if (iVar11 == 0) {
                        pcVar8 = (char *)sobj_get_string(iVar1);
                        puVar6 = (undefined4 *)param_1[4];
                        while( true ) {
                          if (puVar6 == local_2c) {
                            client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n",
                                          "SYNTAX ERROR");
                            client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                            uVar12 = *param_1;
                            uVar7 = sobj_get_string(iVar1);
                            pcVar8 = "unknown function name - [%s]";
                            goto LAB_0040a950;
                          }
                          iVar11 = strcmp(pcVar8,(char *)puVar6[2]);
                          if (iVar11 == 0) break;
                          puVar6 = (undefined4 *)*puVar6;
                        }
                        uVar7 = sobj_get_string(iVar1);
                        uVar12 = 0;
                      }
                      else {
                        uVar7 = sobj_get_string(iVar1);
                        uVar12 = *(undefined4 *)(iVar11 + 8);
                      }
                      iVar11 = FUN_004093c8(param_1,param_2,uVar7,uVar12);
                    }
                    goto LAB_0040a974;
                  }
                  iVar3 = sobj_new();
                  if (iVar3 == 0) goto LAB_0040a514;
                  piVar4 = (int *)malloc(0x24)   //possible issue identified - semgrep
                  if (piVar4 == (int *)0x0) {
                    client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
                    client_printf(*param_1,"!! %s: File:[%s]\n","INTERNAL ERROR",param_1[2]);
                    client_printf(*param_1,"memory allocation failed !");
                    client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
LAB_0040aa38:
                    iVar11 = -1;
                  }
                  else {
                    memset(piVar4,0,0x24)   //possible issue identified - semgrep
                    piVar9 = piVar4 + 3;
                    piVar13 = piVar4 + 5;
                    piVar4[2] = 3;
                    piVar4[4] = (int)piVar9;
                    piVar4[3] = (int)piVar9;
                    piVar4[6] = (int)piVar13;
                    piVar4[5] = (int)piVar13;
                    iVar11 = FUN_00408e6c(param_1,piVar9);
                    if (iVar11 < 0) {
LAB_0040aa30:
                      FUN_00409248(piVar4);
                      goto LAB_0040aa38;
                    }
                    sobj_free(iVar3);
                    FUN_00407458(param_1[1],iVar3,&local_58);
                    if ((local_58 == 0) && (iVar11 = sobj_strcmp(iVar3,&DAT_00422834), iVar11 == 0))
                    {
                      puVar10 = &DAT_00422838;
                    }
                    else {
                      if (local_58 != 0) {
                        xs_ungetc(0x22,param_1[1])   //possible issue identified - semgrep
                      }
                      uVar7 = sobj_get_string(iVar3);
                      xs_ungets(uVar7,param_1[1])   //possible issue identified - semgrep
                      if (local_58 != 0) {
                        xs_ungetc(0x22,param_1[1])   //possible issue identified - semgrep
                      }
                      puVar10 = (undefined *)0x0;
                    }
                    iVar11 = FUN_00409a00(param_1,piVar13,puVar10);
                    if (iVar11 < 0) goto LAB_0040aa30;
                    puVar6 = *(undefined4 **)(param_2 + 4);
                    *piVar4 = param_2;
                    *(int **)(param_2 + 4) = piVar4;
                    *puVar6 = piVar4;
                    piVar4[1] = (int)puVar6;
                    iVar11 = 0;
                  }
                  goto LAB_0040a77c;
                }
                client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
                client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
                uVar12 = *param_1;
                uVar7 = sobj_get_string(iVar1);
                pcVar8 = "got an invalid token [%s]";
LAB_0040a950:
                client_printf(uVar12,pcVar8,uVar7);
                uVar7 = *param_1;
                goto LAB_00409be0;
              }
              uVar7 = 9;
            }
          }
          iVar11 = FUN_004078e8(param_1,param_2,uVar7);
        }
LAB_0040a974:
        if ((param_3 == 0) || (iVar11 < 0)) goto LAB_0040a9b8;
        sobj_free(iVar1);
        FUN_00407458(param_1[1],iVar1,&local_54);
      }
      client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","SYNTAX ERROR");
      client_printf(*param_1,"!! %s: File:[%s]\n","SYNTAX ERROR",param_1[2]);
      uVar7 = *param_1;
      pcVar8 = "unable to read token !";
LAB_00409bc0:
      client_printf(uVar7,pcVar8);
      uVar7 = *param_1;
LAB_00409be0:
      iVar11 = -1;
      client_printf(uVar7,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","SYNTAX ERROR");
    }
LAB_0040a9b8:
    sobj_del(iVar1);
  }
  if (iVar2 != 0) {
    sobj_del(iVar2);
  }
  return iVar11;
}