{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "version": {
      "description": "Current version of YML notation.",
      "type": [
        "number",
        "string"
      ],
      "pattern": "^(\\d+)\\.(\\d+)\\.(\\d+)$"
    },
    "profile": {
      "type": "string"
    },
    "profile_version": {
      "description": "Current version of a dedicated profile",
      "type": [
        "number",
        "string"
      ],
      "pattern": "^[A-Za-z0-9\\.\\-_]+$"
    },
    "sowa_version": {
      "description": "The parameter value indicates the minimum distribution version for correct interaction with the application part.",
      "type": [
        "number",
        "string"
      ],
      "pattern": "^[A-Za-z0-9\\.\\-]+$"
    },
    "is_outgoing": {
      "description": "The parameter value indicates that requests are going TO untrusted network (default - false).",
      "type": "boolean"
    },
    "system": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "wrk_count": {
          "description": "Default 1 for container and openshift, auto - for others",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(auto)|(\\d)+$"
        },
        "conn_count": {
          "description": "Specifies needed connection count(not limit). Default 4096",
          "type": "integer"
        },
        "worker_shutdown_timeout": {
          "description": "Specifies a time limit for NGINX\u2019s attempts to gracefully let worker processes terminate. Once the timeout has expired, NGINX will actively try to close the connections necessary for the processes to terminate.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "optional": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "http2_recv_buffer_size": {
              "description": "Specifies the size of the per worker input buffer",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmMG]{1})$"
            },
            "wrk_user": {
              "type": "string"
            },
            "default_type": {
              "type": "string"
            },
            "log_level": {
              "type": "string",
              "enum": [
                "debug",
                "info",
                "notice",
                "warn",
                "error",
                "crit",
                "alert",
                "off"
              ]
            },
            "log_type": {
              "$ref": "#/definitions/log_type"
            },
            "resolver": {
              "description": "dns resolver",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "host": {
                  "description": "one or more IP or domain addresses of DNS servers (when specifying several addresses, the space character must be used as a delimiter)",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "valid": {
                  "description": "parameter to the resolver directive, you can tell SOWA to ignore the TTL and re\u2011resolve names at a specified frequency instead.",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[smhdwMy]{1})$"
                },
                "resolver_timeout": {
                  "description": "resolver_timeout sec",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[smhdwMy]{1})$"
                }
              },
              "required": [
                "host",
                "valid"
              ]
            },
            "pcre_jit": {
              "description": "Enable jit for pcre. Default on.",
              "type": "boolean"
            },
            "log_format": {
              "description": "Specifies log format for access logging.",
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "Specifies format name.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "format": {
                    "description": "Specifies log format in nginx terms.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "escape": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "default",
                      "json",
                      "none"
                    ]
                  }
                }
              }
            },
            "map_hash_bucket_size": {
              "description": "Specifies map_hash_bucket_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "map_hash_max_size": {
              "description": "Specifies map_hash_max_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "server_names_hash_max_size": {
              "description": "Specifies server_names_hash_max_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "server_names_hash_bucket_size": {
              "description": "Specifies server_names_hash_bucket_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "variables_hash_max_size": {
              "description": "Specifies variables_hash_max_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "variables_hash_bucket_size": {
              "description": "Specifies variables_hash_bucket_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "types_hash_bucket_size": {
              "description": "Specifies types_hash_bucket_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "types_hash_max_size": {
              "description": "Specifies types_hash_max_size",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+)$"
            },
            "jvm_options": {
              "description": "Additional JVM options for specified profile. For example - '-XX:+HeapDumpOnOutOfMemoryError'",
              "type": "array",
              "items": {
                "type": [
                  "number",
                  "string"
                ]
              }
            },
            "jvm": {
              "description": "JVM options. The exact meaning and semantics of these values preserved, except the GCType(which is enum of GCollectors)",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "Xmx": {
                  "type": "string",
                  "pattern": "^([0-9]+[kKmMG]{1})$"
                },
                "Xms": {
                  "type": "string",
                  "pattern": "^([0-9]+[kKmMG]{1})$"
                },
                "MaxGCPauseMillis": {
                  "type": "integer"
                },
                "ParallelGCThreads": {
                  "type": "integer"
                },
                "ConcGCThreads": {
                  "type": "integer"
                },
                "InitiatingHeapOccupancyPercent": {
                  "type": "integer"
                },
                "GCType": {
                  "description": "Garbage collector to use. Default is UseG1GC",
                  "type": "string",
                  "enum": [
                    "UseG1GC",
                    "UseSerialGC",
                    "UseParallelGC",
                    "UseParNewGC"
                  ]
                },
                "UseStringDeduplication": {
                  "type": "boolean"
                },
                "UseCompressedStrings": {
                  "type": "boolean"
                },
                "OptimizeStringConcat": {
                  "type": "boolean"
                },
                "UseLWPSynchronization": {
                  "type": "boolean"
                },
                "AggressiveOpts": {
                  "type": "boolean"
                },
                "UseAES": {
                  "type": "boolean"
                },
                "UseAESIntrinsics": {
                  "type": "boolean"
                }
              }
            },
            "ip_blacklist": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "description": "Enabling dynamic ip blacklist",
                  "type": "boolean"
                },
                "optional": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "size": {
                      "description": "Specify IP blacklist size, size is how many IP addresses could be stored in the blacklist. The default value is \"1024\".",
                      "type": "integer"
                    },
                    "timeout": {
                      "description": "Specify IP blacklist entries timeout in seconds. Entries in the 'timeout' period is blocked. The default value is \"60\".",
                      "type": "integer"
                    },
                    "log": {
                      "description": "Enable error log or not. The default value is \"off\".",
                      "type": "string",
                      "enum": [
                        "on",
                        "off"
                      ]
                    },
                    "mode": {
                      "description": "Specifies the blacklist mode. When \"local\" specified, blacklist will be stored inside nginx. Otherwise in the external system specified by \"syscmd\". The default value is \"local\".",
                      "type": "string",
                      "enum": [
                        "sys",
                        "local"
                      ]
                    },
                    "syscmd": {
                      "description": "When \"sys\" mode specified, you must specify external script, which will store ip address in external system (for e.g. Iptables)",
                      "type": "string"
                    }
                  }
                }
              }
            },
            "session_max_size": {
              "type": "integer"
            },
            "session_cache": {
              "description": "specifies cache size for ssl session. The default value evaluates automatically.",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "off",
                    "none",
                    "builtin",
                    "shared"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                }
              },
              "required": [
                "type"
              ]
            },
            "service_status": {
              "description": "This directive enables profile_status service. Default value is \"on\".",
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "underscores_in_headers": {
              "description": "If value is \"True\" then allow use headers with underscores. Otherwise this headers will be handled by \"ignore_invalid_headers\" directive. The default value is \"false\"",
              "type": "boolean"
            },
            "ignore_invalid_headers": {
              "description": "Controls whether header fields with invalid names should be ignored. Default is \"True\".",
              "type": "boolean"
            },
            "autostart": {
              "description": "If \"True\" profile will try to start on boot and in runtime automatically if not stopped properly. The default value is \"True\".",
              "type": "boolean"
            },
            "strict_hostname_check": {
              "description": "If enabled, hostnames not from whitelist will be blocked.",
              "type": "boolean"
            },
            "hostname_error_code": {
              "description": "Error code to return if service hostanme check is failed.",
              "type": "integer"
            },
            "extended_status_zone": {
              "description": "Define shared memory zone using for extended stats gathering(chains, security, SimpleRateLimiter)",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "on",
                    "off"
                  ]
                },
                "space": {
                  "description": "Defines the size of object storage. Default 10m",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})$"
                },
                "entries": {
                  "description": "Defines the count of simultaneously stored objects. Default 32000",
                  "type": "integer"
                }
              },
              "required": [
                "enabled"
              ]
            },
            "shared_task_executors": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "executor_type": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "FIXED",
                      "FORKJOIN",
                      "CACHED",
                      "SCHEDULED",
                      "SINGLE",
                      "SINGLE_SCHEDULED"
                    ]
                  },
                  "params": {
                    "type": "object",
                    "additionalProperties": true,
                    "properties": {
                      "pool_size": {
                        "type": "integer"
                      },
                      "parallelism": {
                        "type": "integer"
                      }
                    },
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "_type"
                          ],
                          "properties": {
                            "_type": {
                              "const": "SCHEDULED"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "pool_size"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "_type"
                          ],
                          "properties": {
                            "_type": {
                              "const": "FIXED"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "pool_size"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "_type"
                          ],
                          "properties": {
                            "_type": {
                              "const": "FORKJOIN"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "parallelism"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "shutdown_strategy": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "IMMEDIATELY",
                      "GRACEFULLY"
                    ]
                  },
                  "shutdown_timeout": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "shutdown_strategy"
                      ],
                      "properties": {
                        "shutdown_strategy": {
                          "const": "GRACEFULLY"
                        }
                      }
                    },
                    "then": {
                      "required": [
                        "shutdown_timeout"
                      ]
                    }
                  }
                ]
              }
            },
            "shared_ldap_connections": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "connection": {}
                }
              }
            },
            "thread_pools": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Defines thread pool unique id.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "threads_num": {
                    "description": "Defines the number of threads in the pool.",
                    "type": "integer"
                  },
                  "max_queue": {
                    "description": "Limits the number of tasks allowed to be waiting in the queue. By default, up to 65536 tasks can wait in the queue.",
                    "type": "integer"
                  }
                },
                "required": [
                  "id",
                  "threads_num"
                ]
              }
            },
            "async_io": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "directio_threshold": {
                  "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                },
                "thread_pool_id": {
                  "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "write": {
                  "description": "Specifies whether async_io is used for writing files.",
                  "type": "boolean"
                }
              },
              "required": [
                "directio_threshold"
              ]
            },
            "maps": {
              "type": "array",
              "items": {
                "description": "Creates a new variable 'dst_var' whose value depends on values of one or more of the source variables specified in the 'src_var'.",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "src_var": {
                    "description": "Specifies a string with one or more of source variables, e.g. \"$var1:$var2\"",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "dst_var": {
                    "description": "Specifies a variable to store result value.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "mapping": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "src_val": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "dst_val": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "src_val",
                        "dst_val"
                      ]
                    }
                  },
                  "default": {
                    "description": "Specifies a default value of the 'res_var'. If not specified then it is empty string.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "volatile": {
                    "description": "Indicates that the variable is not cacheable.",
                    "type": "boolean"
                  },
                  "hostnames": {
                    "description": "Indicates that source values can be hostnames with a prefix or suffix mask.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "src_var",
                  "dst_var",
                  "mapping"
                ]
              }
            },
            "serve_static_file": {
              "type": "array",
              "items": {
                "description": "relative path from custom resources directory",
                "type": [
                  "number",
                  "string"
                ]
              }
            },
            "proxy_temp_tree": {
              "description": "Specifies proxy tmp directory structure. Not actual when use http_version - 2.0",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^(\\d*( \\d*){0,1}( \\d*){0,1})$"
            },
            "body_temp_tree": {
              "description": "Specifies body tmp directory structure",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^(\\d*( \\d*){0,1}( \\d*){0,1})$"
            },
            "storages": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "Defines the name of storage.",
                    "type": "string"
                  },
                  "space": {
                    "description": "Defines the size of object storage. Default 10m",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})$"
                  },
                  "entries": {
                    "description": "Defines the count of simultaneously stored objects. Default 8096",
                    "type": "integer"
                  },
                  "remove_time": {
                    "description": "Defines the time of storing objects. Default dont remove at all",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[mMsS]{1})$"
                  }
                },
                "required": [
                  "name"
                ]
              }
            },
            "init_handlers": {
              "description": "Specifies a list of init handlers.",
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Specifies id for init handler",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "name": {
                    "description": "Specifies a handler",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "HealthCheck",
                      "LdapSearch"
                    ]
                  },
                  "instances": {
                    "description": "Specifies count of handler instances. Single - one handler per profile. Auto - count of nginx workers. Default - single",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "single",
                      "auto"
                    ]
                  },
                  "params": {
                    "description": "Specifies extra parameters for the actions.",
                    "type": "object",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "id",
                  "name",
                  "params"
                ]
              }
            },
            "transformations_debug": {
              "description": "Enables transformation debug logs. False by default.",
              "type": "boolean"
            },
            "get_load": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "description": "Enables or disables putting server load statistics to variables ($stat_cpu_usage, $stat_memory_usage).",
                  "type": "boolean"
                },
                "interval": {
                  "description": "Stats loading interval in seconds.",
                  "type": "integer"
                }
              }
            },
            "vault": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "runtime_update": {
                  "description": "Update secrets recieved from vault during runtime operations.",
                  "type": "boolean"
                },
                "auto_update": {
                  "description": "Update secrets in background.",
                  "type": "boolean"
                },
                "auto_update_expire_delta": {
                  "description": "Expire delta for auto update in seconds. 2678400 by default.",
                  "type": "integer"
                },
                "auto_update_type": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "expire",
                    "always"
                  ]
                },
                "url": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "ssl": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "enabled": {
                      "description": "Enables ssl connection to vault with client certificates. Enabled by default.",
                      "type": "boolean"
                    },
                    "certificate": {
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "certificate_key": {
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "ca": {
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  },
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "certificate_key"
                        ],
                        "properties": {
                          "certificate_key": {
                            "pattern": ".+"
                          }
                        }
                      },
                      "then": {
                        "required": [
                          "certificate"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "certificate"
                        ],
                        "properties": {
                          "certificate": {
                            "pattern": ".+"
                          }
                        }
                      },
                      "then": {
                        "required": [
                          "certificate_key"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "enabled"
                        ],
                        "properties": {
                          "enabled": {
                            "const": false
                          }
                        }
                      },
                      "then": {
                        "required": []
                      },
                      "else": {
                        "required": [
                          "ca"
                        ]
                      }
                    }
                  ]
                },
                "storages": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "url": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "enabled": {
                            "description": "Enables ssl connection to vault with client certificates. Enabled by default.",
                            "type": "boolean"
                          },
                          "certificate": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "certificate_key": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "ca": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "allOf": [
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "certificate_key"
                              ],
                              "properties": {
                                "certificate_key": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "then": {
                              "required": [
                                "certificate"
                              ]
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "certificate"
                              ],
                              "properties": {
                                "certificate": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "then": {
                              "required": [
                                "certificate_key"
                              ]
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "enabled"
                              ],
                              "properties": {
                                "enabled": {
                                  "const": false
                                }
                              }
                            },
                            "then": {
                              "required": []
                            },
                            "else": {
                              "required": [
                                "ca"
                              ]
                            }
                          }
                        ]
                      },
                      "path": {
                        "description": "Specifies storage name to lookup secrets (\"/DEV/SOWA/CF/KV/\" for example).",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "approle_role_id_file": {
                        "description": "Specifies path to file with approle role id",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "approle_wrapped_token_file": {
                        "description": "Specifies path to file with wrapped token which contains secret id",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "approle_wrapped_token_field": {
                        "description": "Specifies which field to use while unwrapping secret. \"secret_id\" by default.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "approle_namespace": {
                        "description": "Specifies approle namespace",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "secrets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "description": "Secret type, KV-secrets as default if not specified.",
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "sberca",
                                "kv"
                              ]
                            },
                            "base64_decode": {
                              "description": "Decode secret form base64. False by default.",
                              "type": "boolean"
                            },
                            "name": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "alias": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "key": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "certificate_alias": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "key_alias": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "ca_alias": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "format": {
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "pem",
                                "pem_bundle",
                                "jks"
                              ]
                            },
                            "email": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "common_name": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "alt_names": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "other_sans": {
                              "type": "array",
                              "items": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              }
                            },
                            "ip_sans": {
                              "type": "array",
                              "items": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              }
                            },
                            "uri_sans": {
                              "type": "array",
                              "items": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              }
                            },
                            "exclude_cn_from_sans": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "allOf": [
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "kv"
                                  }
                                }
                              },
                              "then": {
                                "required": [
                                  "alias"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {}
                                }
                              },
                              "else": {
                                "required": [
                                  "alias"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "kv"
                                  }
                                }
                              },
                              "then": {
                                "required": [
                                  "key"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {}
                                }
                              },
                              "else": {
                                "required": [
                                  "key"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "then": {
                                "required": [
                                  "certificate_alias"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "then": {
                                "required": [
                                  "common_name"
                                ]
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "format"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "email"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "alt_names"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "other_sans"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "ip_sans"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "uri_sans"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "const": "sberca"
                                  }
                                }
                              },
                              "else": {
                                "not": {
                                  "required": [
                                    "exclude_cn_from_sans"
                                  ]
                                }
                              }
                            }
                          ]
                        }
                      }
                    },
                    "required": [
                      "path",
                      "secrets"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "approle_role_id_file"
                          ],
                          "properties": {
                            "approle_role_id_file": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "approle_role_id_file"
                          ]
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "approle_role_id_file"
                          ],
                          "properties": {
                            "approle_role_id_file": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "approle_wrapped_token_file"
                          ]
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "approle_role_id_file"
                          ],
                          "properties": {
                            "approle_role_id_file": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "approle_namespace"
                          ]
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "approle_wrapped_token_file"
                          ],
                          "properties": {
                            "approle_wrapped_token_file": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "approle_wrapped_token_field"
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              },
              "required": [
                "storages"
              ]
            },
            "healthcheck_dynamic": {
              "$ref": "#/definitions/healthcheck_dynamic"
            },
            "healthcheck": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "url": {
                  "description": "Specifies url for healthcheck.",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "content_type": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "content_encoding": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "disable_access_log": {
                  "description": "Disable writing access log, by default -false",
                  "type": "boolean"
                },
                "disable_error_log": {
                  "description": "Disable writing error log, default false",
                  "type": "boolean"
                },
                "disable_gathering_stats": {
                  "description": "Disable gathering stat, default false",
                  "type": "boolean"
                }
              },
              "required": [
                "url"
              ]
            },
            "disable_listen": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "active": {
                  "description": "Enable stop listening port according condtions, default false",
                  "type": "boolean"
                },
                "condition": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "check_type": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "no_live_upstream"
                        ]
                      },
                      "drain_is_up": {
                        "description": "Decode drain state of upstream as \"up\" state. On by default",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "passive_hc_mode": {
                        "description": "-> Set mode for decode state for upstreams with passive health-check. When exclude, listen ports binded to service which has an upstream group with passive HC, will be exluded from automatic stop/start listening. When ignore, state of upstream group with passive hc always up When inlude, state of upstream group with passive hc always calculated and used. By default - exclude",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "exclude",
                          "ignore",
                          "include"
                        ]
                      },
                      "not_binded_mode": {
                        "type": "array",
                        "uniqueItems": true,
                        "items": {
                          "description": "Additionaly close up listening ports on service which not binded to upstream groups - status - profile status service, \"non_upstream\", services which not has http upstream groups",
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "status",
                            "non_upstream"
                          ]
                        }
                      },
                      "custom_binds": {
                        "description": "Allow to manual specify ports - upstream groups for autoclose listen. Used, when service binded to some port not have upstream group (e.g. service_http_kafka_proxy)",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "port": {
                              "description": "Port for autoclose",
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 65535
                            },
                            "service_id": {
                              "description": "id of service which upstream group will be used",
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "service_type": {
                              "description": "type of service which upstream group will be used",
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "service_main_proxy",
                                "service_http_proxy",
                                "service_web_socket_proxy"
                              ]
                            },
                            "upstream_id": {
                              "description": "id  of upstream group",
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          }
                        }
                      },
                      "skip_ports": {
                        "description": "Ports defined in this section will not be closed ever by autoclose listen mechanism",
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        }
                      }
                    },
                    "required": [
                      "check_type"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "check_type"
                          ],
                          "properties": {
                            "check_type": {
                              "const": "no_live_upstream"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "drain_is_up"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "check_type"
                          ],
                          "properties": {
                            "check_type": {
                              "const": "no_live_upstream"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "passive_hc_mode"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "check_type"
                          ],
                          "properties": {
                            "check_type": {
                              "const": "no_live_upstream"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "not_binded_mode"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "check_type"
                          ],
                          "properties": {
                            "check_type": {
                              "const": "no_live_upstream"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "custom_binds"
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              },
              "required": [
                "condition"
              ]
            },
            "opentelemetry": {
              "description": "Common parameters of opentelemetry tracing",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "exporter": {
                  "description": "Define connection param to OTLP/GRPC agent",
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "endpoint": {
                      "description": "the address of OTLP/gRPC endpoint that will accept telemetry data.",
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "interval": {
                      "description": "the maximum interval between two exports, by default is 5 seconds.",
                      "type": [
                        "number",
                        "string"
                      ],
                      "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                    },
                    "batch_size": {
                      "description": "the maximum number of spans to be sent in one batch per worker, by default is 512",
                      "type": "integer"
                    },
                    "batch_count": {
                      "description": "the number of pending batches per worker, spans exceeding the limit are dropped, by default is 4",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "endpoint"
                  ]
                },
                "service_name": {
                  "description": "Sets the \u201cservice.name\u201d attribute of the OTel resource, by default profile_name.sowa",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "chains_tracing": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "enabled": {
                      "description": "Allow tracing in chains",
                      "type": "boolean"
                    },
                    "disableAllChainsByDefault": {
                      "description": "Disable all chains tracing by default. In flag set to true",
                      "type": "boolean"
                    }
                  }
                },
                "tracing": {
                  "$ref": "#/definitions/tracing"
                }
              },
              "required": [
                "exporter"
              ],
              "allOf": [
                {
                  "if": {
                    "type": "object",
                    "required": [
                      ""
                    ],
                    "properties": {
                      "": {
                        "properties": {
                          "system": {
                            "type": "object",
                            "required": [
                              "system"
                            ],
                            "properties": {
                              "system": {},
                              "optional": {
                                "type": "object",
                                "required": [
                                  "opentelemetry"
                                ],
                                "properties": {
                                  "opentelemetry": {
                                    "pattern": ".+"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "tracing"
                      ]
                    }
                  }
                }
              ]
            },
            "client_body_buffer_size": {
              "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "client_body_in_file_only": {
              "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
              "type": "string",
              "enum": [
                "on",
                "off",
                "clean"
              ]
            },
            "client_body_in_single_buffer": {
              "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "client_header_buffer_size": {
              "description": "Sets buffer size for reading client request header. By default is 1k.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "large_client_header_buffers": {
              "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "number": {
                  "type": "integer"
                },
                "size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                }
              },
              "required": [
                "number",
                "size"
              ]
            },
            "output_buffers": {
              "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "number": {
                  "type": "integer"
                },
                "size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                }
              },
              "required": [
                "number",
                "size"
              ]
            },
            "subrequest_output_buffer_size": {
              "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "proxy_buffer_size": {
              "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "proxy_buffering": {
              "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "proxy_buffers": {
              "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "number": {
                  "type": "integer"
                },
                "size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                }
              },
              "required": [
                "number",
                "size"
              ]
            },
            "proxy_busy_buffers_size": {
              "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "proxy_request_buffering": {
              "description": "Enables or disables buffering of a client request body. By default is on.",
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "proxy_max_temp_file_size": {
              "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "proxy_temp_file_write_size": {
              "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "proxy_max_downstream_presend_inmemory_size": {
              "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "worker_clean_cache_on_fail": {
              "description": "Whether to clean worker chache file on failure exit. Default is true (clean).",
              "type": "boolean"
            }
          },
          "allOf": [
            {
              "if": {
                "type": "object",
                "required": [
                  "jvm"
                ],
                "properties": {
                  "jvm": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "jvm_options"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "jvm_options"
                ],
                "properties": {
                  "jvm_options": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "jvm"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "strict_hostname_check"
                ],
                "properties": {
                  "strict_hostname_check": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "hostname_error_code"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  ".."
                ],
                "properties": {
                  "..": {
                    "type": "object",
                    "required": [
                      "listen"
                    ],
                    "properties": {
                      "listen": {
                        "pattern": ".+"
                      }
                    }
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "healthcheck_dynamic"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_buffering"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_buffers"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_busy_buffers_size"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_request_buffering"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_max_temp_file_size"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_temp_file_write_size"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "http_version"
                ],
                "properties": {
                  "http_version": {}
                }
              },
              "then": {
                "not": {
                  "required": [
                    "proxy_max_downstream_presend_inmemory_size"
                  ]
                }
              }
            }
          ]
        }
      }
    },
    "service": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "service_http_proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "use_main_upstream_groups": {
                "description": "Defines whether to use upstream groups from main proxy.",
                "type": "boolean"
              },
              "upstream_group_id": {
                "description": "Specifies ID of the upstream group.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "upstream_bind_variable": {
                "description": "Specifies a variable that is used to bind upstream group along with \"bind_condition\".",
                "type": "string"
              },
              "upstream_groups": {
                "$ref": "#/definitions/upstream_groups"
              },
              "allowed_queries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "method": {
                      "type": "string",
                      "enum": [
                        "get",
                        "head",
                        "post",
                        "put",
                        "options",
                        "trace",
                        "patch",
                        "delete"
                      ]
                    },
                    "decodeUrl": {
                      "description": "By default mds use url-decoded request parameters",
                      "type": "boolean"
                    },
                    "strict_params_check": {
                      "description": "False by default. Allows to block undescribed params and paramless requests.",
                      "type": "boolean"
                    },
                    "undescribed": {
                      "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                      "type": "boolean"
                    },
                    "params": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "pattern": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                          }
                        },
                        "required": [
                          "name",
                          "pattern"
                        ]
                      }
                    }
                  },
                  "required": [
                    "method"
                  ]
                }
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "service_cache": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "phase": {
                        "description": "Defines the phase, on which we need to use cache. Default rewrite. When service is defined not in service_http_proxy use content by default",
                        "type": "string",
                        "enum": [
                          "access_handler",
                          "body_filter",
                          "rewrite_handler"
                        ]
                      },
                      "store_name": {
                        "description": "Defines the name of storage",
                        "type": "string"
                      },
                      "store_key": {
                        "description": "Defines key with which objects will store. Default $request_id",
                        "type": "string"
                      },
                      "default_success_status": {
                        "description": "Defines default success status. Default 200",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "default_empty_queue_status": {
                        "description": "Defines default status in case empty queue. Default 403",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "default_already_exists_status": {
                        "description": "Defines default status in case when object already exists with this key. Default 403",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "default_message_unknown_status": {
                        "description": "Defines default status when in case object with this key doesn't exists. Default 404",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "default_error_status": {
                        "description": "Defines default status for internal errors. Default 500",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "success_result_pattern": {
                        "description": "Defines pattern for success result response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "success_result_pattern_file": {
                        "description": "Defines pattern file for success result response",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      },
                      "empty_queue_pattern": {
                        "description": "Defines pattern for empty queue response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "empty_queue_pattern_file": {
                        "description": "Defines pattern file for empty queue response",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      },
                      "default_error_pattern": {
                        "description": "Defines pattern for internal error response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "default_error_pattern_file": {
                        "description": "Defines pattern file for internal error response",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      },
                      "already_exists_pattern": {
                        "description": "Defines pattern for already exists object response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "already_exists_pattern_file": {
                        "description": "Defines pattern file for already exists object response",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      },
                      "message_unknown_pattern": {
                        "description": "Defines pattern for unknown object response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "message_unknown_pattern_file": {
                        "description": "Defines pattern file for unknown object response",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      },
                      "send_error": {
                        "description": "Defines sending error on non content phase or not. Default true",
                        "type": "boolean"
                      },
                      "response_content_type": {
                        "description": "Defines response content-type. Default \"application/json\"",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "configuration_file": {
                        "description": "Defines path to configuration file with definitions of existing actions",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                      }
                    },
                    "required": [
                      "store_name",
                      "configuration_file"
                    ]
                  },
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "client_header_timeout": {
                    "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_timeout": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"1h\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                    "type": "integer"
                  },
                  "send_timeout_to_client": {
                    "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "session": {
                    "description": "Enables http session support. The default value is \"off\".",
                    "type": "boolean"
                  },
                  "session_timeout": {
                    "description": "Value in seconds. Default value is 60.",
                    "type": "integer"
                  },
                  "session_cookie_name": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "session_redirect_timeout": {
                    "description": "Value in seconds. Must not be larger than session timeout. Default value is 5.",
                    "type": "integer"
                  },
                  "session_show": {
                    "type": "boolean"
                  },
                  "session_cache": {
                    "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "off",
                          "none",
                          "builtin",
                          "shared"
                        ]
                      },
                      "name": {
                        "type": "string"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "next_upstream": {
                    "description": "specifies proxy_next_upstream settings. The default value evaluates automatically.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "codes": {
                        "type": "string"
                      },
                      "codes_seq": {
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "error",
                            "timeout",
                            "invalid_header",
                            "http_500",
                            "http_502",
                            "http_503",
                            "http_504",
                            "http_403",
                            "http_404",
                            "http_429",
                            "non_idempotent",
                            "off"
                          ]
                        }
                      },
                      "timeout": {
                        "type": "integer"
                      },
                      "tries": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "timeout",
                      "tries"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "codes_seq"
                          ],
                          "properties": {
                            "codes_seq": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "codes"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "codes"
                          ],
                          "properties": {
                            "codes": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "codes_seq"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "file_upload_limit": {
                    "description": "Enables file upload limitation by content type header. By default limitation is enabled.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default - on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "upload_size_limit": {
                    "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "enable": {
                        "description": "Enables limit request body. Default \"true\"",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "download_size_limit": {
                    "description": "Specifies maximum size of the response body. The connection will be dropped when size will be exceeded.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "status": {
                        "description": "Specifies the status code when response size was exceeded. By default is 413.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(4|5)[0-9]{2}$"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "http_version": {
                    "description": "Specifies HTTP version of the upstream service. The default value is \"1.0\". Warning - version 2.0 do not allow some functions",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      1.0,
                      1.1,
                      2.0
                    ]
                  },
                  "grpc_error_processing": {
                    "description": "Specifies whether service is a grpc proxy or not, and enables grpc error processing.",
                    "type": "boolean"
                  },
                  "cookie_domain": {
                    "description": "Whether rewrite the \"domain\" cookie in the answer from the upstream. The default value is \"off\".",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "from": {
                        "type": "string"
                      },
                      "to": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "from",
                      "to"
                    ]
                  },
                  "cookie_flags": {
                    "type": "array",
                    "items": {
                      "description": "Stes falgs for the cookie or remove it. Also can be specifide several derectives on same config level. The default value is \"off\".",
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "cookie": {
                          "type": "string"
                        },
                        "flag": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "cookie",
                        "flag"
                      ]
                    }
                  },
                  "cookie_path": {
                    "type": "array",
                    "items": {
                      "description": "Whether rewrite the \"path\" cookie in the answer from the upstream. The default value is \"off\".",
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "from": {
                          "type": "string"
                        },
                        "to": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "from",
                        "to"
                      ]
                    }
                  },
                  "proxy_connect_timeout": {
                    "description": "Specifies the connect timeout with the upstream service. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_read_timeout": {
                    "description": "Specifies read timeout from the upstream. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_send_timeout": {
                    "description": "Specifies send timeout from the upstream. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_set_body": {
                    "description": "Specifies body to set when send request to backend",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "proxy_headers_hash_bucket_size": {
                    "description": "Bucket size for hashtables,  using in proxy_set_headers and proxy_hide_headers directive. The default value is 64",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[0-9]+$"
                  },
                  "proxy_headers_hash_max_size": {
                    "description": "Maximum size of hashtables, using in proxy_set_headers and proxy_hide_headers directive. The default value is 512",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[0-9]+$"
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "kafka_logger_id": {
                    "description": "Specifies service id to handle event.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "security_headers": {
                    "$ref": "#/definitions/security_headers"
                  },
                  "exclude_req_stat": {
                    "description": "Excludes location request stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "exclude_resp_stat": {
                    "description": "Excludes location resp stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "gzip": {
                    "$ref": "#/definitions/gzip"
                  },
                  "event_hook": {
                    "$ref": "#/definitions/event_hook"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "client_body_in_file_only": {
                    "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "clean"
                    ]
                  },
                  "client_body_in_single_buffer": {
                    "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "client_header_buffer_size": {
                    "description": "Sets buffer size for reading client request header. By default is 1k.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "large_client_header_buffers": {
                    "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "output_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "subrequest_output_buffer_size": {
                    "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffer_size": {
                    "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffering": {
                    "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "proxy_busy_buffers_size": {
                    "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_request_buffering": {
                    "description": "Enables or disables buffering of a client request body. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_max_temp_file_size": {
                    "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_temp_file_write_size": {
                    "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_max_downstream_presend_inmemory_size": {
                    "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "async_io": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "directio_threshold": {
                        "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "thread_pool_id": {
                        "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "write": {
                        "description": "Specifies whether async_io is used for writing files.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "directio_threshold"
                    ]
                  },
                  "request_gunzip": {
                    "description": "Gunzip request body if request header 'Content-Encoding: gzip' is present. Default 'off'.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      true,
                      false
                    ]
                  },
                  "request_gunzip_buffer": {
                    "description": "Specifies buffer size for gunzip operation. Default is memory page size.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "response_gunzip": {
                    "description": "Gunzip response body. Default 'false'.",
                    "type": "boolean"
                  },
                  "response_gunzip_buffers": {
                    "description": "Sets the number and size of the buffers used for unzipping a response. 4k/32 or 8k/16 by default.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "log_masking_rules": {
                    "$ref": "#/definitions/log_masking_rules"
                  },
                  "http2": {
                    "$ref": "#/definitions/http2"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  },
                  "cache": {
                    "$ref": "#/definitions/cache"
                  },
                  "healthcheck_dynamic": {
                    "$ref": "#/definitions/healthcheck_dynamic"
                  },
                  "proxy_ssl": {
                    "$ref": "#/definitions/proxy_ssl"
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "pass_request_body": {
                    "description": "Enable/disable passing request body to upstream. Enabled by default.",
                    "type": "boolean"
                  },
                  "redirect": {
                    "description": "Allows return a temporary redirect with the 302 code or a permanent redirect with the 301 code.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "from": {
                          "description": "Request URI regex",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "to": {
                          "description": "Replacement string",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "type": {
                          "description": "Type of redirect. Defaul \"redirect\".",
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "redirect",
                            "permanent",
                            "redirect_temp",
                            "redirect_perm"
                          ]
                        },
                        "condition": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "var": {
                              "description": "Specifies a variable to analyze",
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "operator": {
                              "description": "Specifies an operator to apply",
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "=",
                                "!=",
                                "~",
                                "~*",
                                "!~",
                                "!~*"
                              ]
                            },
                            "val": {
                              "description": "Specifies a value or regex for the operator",
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          },
                          "required": [
                            "var",
                            "operator",
                            "val"
                          ]
                        }
                      },
                      "required": [
                        "from",
                        "to"
                      ]
                    }
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "cookie_domain"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "cookie_flags"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "cookie_path"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_set_body"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_headers_hash_bucket_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_headers_hash_max_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffers"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_busy_buffers_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_request_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_temp_file_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_temp_file_write_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_downstream_presend_inmemory_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        ".."
                      ],
                      "properties": {
                        "..": {
                          "type": "object",
                          "required": [
                            "listen"
                          ],
                          "properties": {
                            "listen": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "healthcheck_dynamic"
                        ]
                      }
                    }
                  }
                ]
              },
              "transformations": {
                "$ref": "#/definitions/transformations"
              },
              "filters": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "filter_mds": {
                    "$ref": "#/definitions/filter_mds"
                  },
                  "filter_icap": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "request": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "icap_url": {
                            "description": "Specifies ICAP service url",
                            "type": "string",
                            "pattern": "(?i)\\b((?:https?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.\\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)/)(?:[^\\s()<>{}\\[\\]]+|\\([^\\s()]*?\\([^\\s()]+\\)[^\\s()]*?\\)|\\([^\\s]+?\\))+(?:\\([^\\s()]*?\\([^\\s()]+\\)[^\\s()]*?\\)|\\([^\\s]+?\\)|[^\\s`!()\\[\\]{};:'\".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019])|(?:(?<!@)[a-z0-9]+(?:[.\\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\\b/?(?!@)))"
                          },
                          "icap_silent": {
                            "description": "If this flag true never block",
                            "type": "string",
                            "enum": [
                              "on",
                              "off"
                            ]
                          },
                          "icap_body_temp_path": {
                            "description": "Specifies path to temp body",
                            "type": "string"
                          },
                          "icap_temp_buffer_size": {
                            "description": "Specifies temp buffer size",
                            "type": "string",
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "icap_max_none_buffered_size": {
                            "description": "Specifies max none buffered size",
                            "type": "string",
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "icap_connect_timeout": {
                            "description": "Specifies connect timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_read_timeout": {
                            "description": "Specifies read timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_write_timeout": {
                            "description": "Specifies write timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_mode": {
                            "description": "Specifies what to check - uploaded content or downloaded content",
                            "type": "string",
                            "enum": [
                              "REQMOD",
                              "RESPMOD"
                            ]
                          },
                          "icap_extensions": {
                            "type": "array",
                            "items": {
                              "description": "Specifies extensions which need send to icap service for checking",
                              "type": "string",
                              "pattern": "^(\\..*)|(\\*)$"
                            }
                          },
                          "icap_internal_error_code": {
                            "description": "Specifies HTTP status code which generated on communication with ICAP service (by default - 500)",
                            "type": "integer"
                          },
                          "icap_check_error_code": {
                            "description": "Specifies HTTP status code which generated when AV block message (by default - 403)",
                            "type": "integer"
                          },
                          "icap_internal_error_message": {
                            "description": "Specifies error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string"
                          },
                          "icap_check_error_message": {
                            "description": "Specifies error message sending to client when AV block message (default - empty string)",
                            "type": "string"
                          },
                          "icap_internal_error_message_file": {
                            "description": "Specifies file, which contains error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string",
                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                          },
                          "icap_check_error_message_file": {
                            "description": "Specifies file, which error message sending to client when AV block message (default - empty string)",
                            "type": "string",
                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                          },
                          "icap_internal_error_content_type": {
                            "description": "Specifies content-type header for error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string"
                          },
                          "icap_check_error_content_type": {
                            "description": "Specifies content-type header for error message sending to client when AV block message (default - empty string)",
                            "type": "string"
                          },
                          "icap_custom_headers": {
                            "type": "array",
                            "items": {
                              "description": "Specifies headers for icap",
                              "type": "string"
                            }
                          },
                          "icap_custom_http_headers": {
                            "type": "array",
                            "items": {
                              "description": "Specifies http headers for icap",
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "icap_url",
                          "icap_mode",
                          "icap_extensions"
                        ],
                        "allOf": [
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message_file"
                              ],
                              "properties": {
                                "_message_file": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_internal_error_message"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message_file"
                              ],
                              "properties": {
                                "_message_file": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_check_error_message"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message"
                              ],
                              "properties": {
                                "_message": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_internal_error_message_file"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message"
                              ],
                              "properties": {
                                "_message": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_check_error_message_file"
                                ]
                              }
                            }
                          }
                        ]
                      },
                      "response": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "icap_url": {
                            "description": "Specifies ICAP service url",
                            "type": "string"
                          },
                          "icap_silent": {
                            "description": "If this flag true never block",
                            "type": "string",
                            "enum": [
                              "on",
                              "off"
                            ]
                          },
                          "icap_body_temp_path": {
                            "description": "Specifies path to temp body",
                            "type": "string"
                          },
                          "icap_temp_buffer_size": {
                            "description": "Specifies temp buffer size",
                            "type": "string",
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "icap_max_none_buffered_size": {
                            "description": "Specifies max none buffered size",
                            "type": "string",
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "icap_connect_timeout": {
                            "description": "Specifies connect timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_read_timeout": {
                            "description": "Specifies read timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_write_timeout": {
                            "description": "Specifies write timeout",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "icap_mode": {
                            "description": "Specifies what to check - uploaded content or downloaded content",
                            "type": "string",
                            "enum": [
                              "REQMOD",
                              "RESPMOD"
                            ]
                          },
                          "icap_extensions": {
                            "type": "array",
                            "items": {
                              "description": "Specifies extensions which need send to icap service for checking",
                              "type": "string",
                              "pattern": "^(\\..*)|(\\*)$"
                            }
                          },
                          "icap_internal_error_code": {
                            "description": "Specifies HTTP status code which generated on communication with ICAP service (by default - 500)",
                            "type": "integer"
                          },
                          "icap_check_error_code": {
                            "description": "Specifies HTTP status code which generated when AV block message (by default - 403)",
                            "type": "integer"
                          },
                          "icap_internal_error_message": {
                            "description": "Specifies error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string"
                          },
                          "icap_check_error_message": {
                            "description": "Specifies error message sending to client when AV block message (default - empty string)",
                            "type": "string"
                          },
                          "icap_internal_error_message_file": {
                            "description": "Specifies file, which contains error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string",
                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                          },
                          "icap_check_error_message_file": {
                            "description": "Specifies file, which error message sending to client when AV block message (default - empty string)",
                            "type": "string",
                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                          },
                          "icap_internal_error_content_type": {
                            "description": "Specifies content-type header for error message sending to client on comunication error with AV service (default - empty string)",
                            "type": "string"
                          },
                          "icap_check_error_content_type": {
                            "description": "Specifies content-type header for error message sending to client when AV block message (default - empty string)",
                            "type": "string"
                          },
                          "icap_custom_headers": {
                            "type": "array",
                            "items": {
                              "description": "Specifies headers for icap",
                              "type": "string"
                            }
                          },
                          "icap_custom_http_headers": {
                            "type": "array",
                            "items": {
                              "description": "Specifies http headers for icap",
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "icap_url",
                          "icap_mode",
                          "icap_extensions"
                        ],
                        "allOf": [
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message_file"
                              ],
                              "properties": {
                                "_message_file": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_internal_error_message"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message_file"
                              ],
                              "properties": {
                                "_message_file": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_check_error_message"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message"
                              ],
                              "properties": {
                                "_message": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_internal_error_message_file"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "_message"
                              ],
                              "properties": {
                                "_message": {}
                              }
                            },
                            "then": {
                              "not": {
                                "required": [
                                  "icap_check_error_message_file"
                                ]
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              },
              "validators": {
                "$ref": "#/definitions/validators"
              },
              "modifiers": {
                "$ref": "#/definitions/modifiers"
              },
              "postprocessors": {
                "$ref": "#/definitions/postprocessors"
              },
              "chains": {
                "description": "The action bus",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "request_chains": {
                    "$ref": "#/definitions/request_chains"
                  },
                  "request_chain_properties": {
                    "$ref": "#/definitions/request_chain_properties"
                  },
                  "response_chains": {
                    "description": "Specifies chain of actions for the response.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "message": {
                          "description": "Text for analysis. May contain variables. E.g. $shared_request_body",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "requiredChildOneOf": {
                          "description": "Specifies unverifed action check",
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "decision": {
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "BLOCK",
                                "WARN"
                              ]
                            },
                            "onlyCheckers": {
                              "type": "boolean"
                            },
                            "include": {
                              "type": "array",
                              "items": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              }
                            },
                            "exclude": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "decision"
                          ],
                          "allOf": [
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "exclude"
                                ],
                                "properties": {
                                  "exclude": {}
                                }
                              },
                              "then": {
                                "not": {
                                  "required": [
                                    "include"
                                  ]
                                }
                              }
                            },
                            {
                              "if": {
                                "type": "object",
                                "required": [
                                  "include"
                                ],
                                "properties": {
                                  "include": {}
                                }
                              },
                              "then": {
                                "not": {
                                  "required": [
                                    "exclude"
                                  ]
                                }
                              }
                            }
                          ]
                        },
                        "actions": {
                          "$ref": "#/definitions/actions"
                        }
                      }
                    }
                  },
                  "response_chain_properties": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "error_state_code": {
                        "type": "integer"
                      },
                      "failed_check_state_code": {
                        "type": "integer"
                      },
                      "max_buffer_size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "max_inmemory_size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "skip_on_error_stage_before": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "use_post_processor": {
                        "type": "boolean"
                      },
                      "resp_gen_modify": {
                        "description": "Add possibility to override backend response",
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "trace_config": {
                        "$ref": "#/definitions/trace_config"
                      },
                      "requiredActionOneOf": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "decisionType": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "enum": [
                              "WARN",
                              "BLOCK"
                            ]
                          },
                          "action": {
                            "type": "array",
                            "items": {
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "request_chains"
                      ],
                      "properties": {
                        "request_chains": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "request_chain_properties"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "response_chains"
                      ],
                      "properties": {
                        "response_chains": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "response_chain_properties"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "required": [
              "id",
              "url"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "optional"
                  ],
                  "properties": {
                    "optional": {
                      "type": "object",
                      "required": [
                        "event_hook"
                      ],
                      "properties": {
                        "event_hook": {
                          "pattern": ".+"
                        }
                      }
                    }
                  }
                },
                "then": {
                  "required": [
                    "name"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "chains"
                  ],
                  "properties": {
                    "chains": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "validators"
                    ]
                  }
                }
              }
            ]
          }
        },
        "service_web_socket_proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "use_main_upstream_groups": {
                "description": "Defines whether to use upstream groups from main proxy.",
                "type": "boolean"
              },
              "upstream_group_id": {
                "description": "Specifies ID of the upstream group.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "upstream_bind_variable": {
                "description": "Specifies a variable that is used to bind upstream group along with \"bind_condition\".",
                "type": "string"
              },
              "upstream_groups": {
                "$ref": "#/definitions/upstream_groups"
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"1h\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of request that can be served through keepalive session. The default value is \"9999999\".",
                    "type": "integer"
                  },
                  "proxy_read_timeout": {
                    "description": "Defines a timeout for reading a response from the proxied server. The default value is \"1d\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_send_timeout": {
                    "description": "Sets a timeout for transmitting a request to the proxied server. The default value is \"1d\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_connect_timeout": {
                    "description": "Sets the timeout to connect to the upstream service. The default value is \"20\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "upstream_rcv_buffer_size": {
                    "description": "Sets receive buffer size from the upstrream service. The default value is \"4k\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "downstream_rcv_buffer_size": {
                    "description": "Sets receive buffer size from the client. The default value is \"4k\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "upstream_send_buffer_size": {
                    "description": "Sets send buffer size from the client to the upstream. The default value is \"4k\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "downstream_send_buffer_size": {
                    "description": "Sets send buffer size from the upstream to the client. The default value is \"4k\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "send_downstream_no_delay": {
                    "description": "Defines whether to wait the end of packet transmission from the upstream service or transmits data to the client as them proceeds. The default value is \"False\".",
                    "type": "boolean"
                  },
                  "send_upstream_no_delay": {
                    "description": "Defines whether to wait the end of packet transmission from the client or transmits data to the upstream service as them proceeds. The default value is \"False\".",
                    "type": "boolean"
                  },
                  "sec_close_mode": {
                    "description": "Sets the closing mode of the connection. The default value is \"hard\".",
                    "type": "string",
                    "enum": [
                      "soft",
                      "hard"
                    ]
                  },
                  "sec_close_code": {
                    "description": "Sets the closing code when sec_close_mode is equal \"soft\". The default value is 1002.",
                    "type": "integer"
                  },
                  "sec_close_reason": {
                    "description": "Sets the closing reason when sec_close_mode is equal \"soft\". The default value is \"\".",
                    "type": "string"
                  },
                  "income_block_message": {
                    "description": "Sets the message sending to client when his message blocked by filter. If not specified, no message sending",
                    "type": "string"
                  },
                  "outgoing_block_message": {
                    "description": "Sets the message sending to client when server message blocked by filter. If not specified, no message sending",
                    "type": "string"
                  },
                  "upload_size_limit": {
                    "description": "Specifies the upload limit size for data transferring session. If limit exceeded, session disconnect will occur.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+)|([0-9]+[km]{1})$"
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default - on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "download_size_limit": {
                    "description": "Specifies the download limit size for data transferring session. If limit exceeded, session disconnect will occur.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+)|([0-9]+[km]{1})$"
                  },
                  "size_limit_decompression": {
                    "description": "Defines whether to decompress the message before the limit check. Default false.",
                    "type": "boolean"
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "exclude_req_stat": {
                    "description": "Excludes location request stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "exclude_resp_stat": {
                    "description": "Excludes location resp stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "gzip": {
                    "$ref": "#/definitions/gzip"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "async_io": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "directio_threshold": {
                        "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "thread_pool_id": {
                        "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "write": {
                        "description": "Specifies whether async_io is used for writing files.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "directio_threshold"
                    ]
                  },
                  "log_masking_rules": {
                    "$ref": "#/definitions/log_masking_rules"
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "client_body_in_file_only": {
                    "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "clean"
                    ]
                  },
                  "client_body_in_single_buffer": {
                    "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "client_header_buffer_size": {
                    "description": "Sets buffer size for reading client request header. By default is 1k.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "large_client_header_buffers": {
                    "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "output_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "subrequest_output_buffer_size": {
                    "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffer_size": {
                    "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffering": {
                    "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "proxy_busy_buffers_size": {
                    "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_request_buffering": {
                    "description": "Enables or disables buffering of a client request body. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_max_temp_file_size": {
                    "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_temp_file_write_size": {
                    "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_max_downstream_presend_inmemory_size": {
                    "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "http2": {
                    "$ref": "#/definitions/http2"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  },
                  "proxy_ssl": {
                    "$ref": "#/definitions/proxy_ssl"
                  },
                  "healthcheck_dynamic": {
                    "$ref": "#/definitions/healthcheck_dynamic"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffers"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_busy_buffers_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_request_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_temp_file_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_temp_file_write_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_downstream_presend_inmemory_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        ".."
                      ],
                      "properties": {
                        "..": {
                          "type": "object",
                          "required": [
                            "listen"
                          ],
                          "properties": {
                            "listen": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "healthcheck_dynamic"
                        ]
                      }
                    }
                  }
                ]
              },
              "modifiers": {
                "$ref": "#/definitions/modifiers"
              },
              "filters": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "filter_web_socket": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "http": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "WsAsynHttpFilter",
                                "WsMultiMsgAsynHttpFilter",
                                "WsAsynHttpFilterWithPartialDecompression"
                              ]
                            },
                            "action": {
                              "type": "string",
                              "enum": [
                                "disconnect",
                                "block",
                                "ignore"
                              ]
                            },
                            "stage": {
                              "type": "string",
                              "enum": [
                                "REQ",
                                "RESP"
                              ]
                            },
                            "apply": {
                              "type": "object",
                              "additionalProperties": false,
                              "properties": {
                                "filter_mds": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "properties": {
                                    "enabled": {
                                      "description": "Specifies to enable or disable MDS. Default is \"True\".",
                                      "type": "boolean"
                                    },
                                    "aio": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "enabled": {
                                          "description": "When specified true, dedicated thread will be used for request/response processing when its possible, value inherited from parent and may be overrite in child",
                                          "type": "boolean"
                                        },
                                        "thread_pool_id": {
                                          "description": "name of thread pool from section system/optional/thread_pools, value inherite from parent and may by override in child. Must be specified when aio is true",
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        }
                                      }
                                    },
                                    "ignore_parent": {
                                      "description": "Specifies ignore parent rules and settings or not",
                                      "type": "boolean"
                                    },
                                    "debug": {
                                      "type": "boolean"
                                    },
                                    "config": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "SecRuleEngine": {
                                          "enum": [
                                            true,
                                            false,
                                            "DetectionOnly"
                                          ]
                                        },
                                        "SecRequestBodyAccess": {
                                          "type": "boolean"
                                        },
                                        "SecRequestBodyLimit": {
                                          "type": "integer"
                                        },
                                        "SecRequestBodyLimitAction": {
                                          "type": "string"
                                        },
                                        "SecPcreMatchLimit": {
                                          "type": "integer"
                                        },
                                        "SecPcreMatchLimitRecursion": {
                                          "type": "integer"
                                        },
                                        "SecResponseBodyAccess": {
                                          "type": "boolean"
                                        },
                                        "SecResponseBodyMimeType": {
                                          "type": "string"
                                        },
                                        "SecResponseBodyLimit": {
                                          "type": "integer"
                                        },
                                        "SecResponseBodyLimitAction": {
                                          "type": "string"
                                        },
                                        "SecStreamOutBodyInspection": {
                                          "type": "boolean"
                                        },
                                        "SecUploadKeepFiles": {
                                          "type": "boolean"
                                        },
                                        "SecAuditEngine": {
                                          "type": "string"
                                        },
                                        "SecAuditLogRelevantStatus": {
                                          "type": "string"
                                        },
                                        "SecAuditLogParts": {
                                          "type": "string"
                                        },
                                        "SecAuditLogType": {
                                          "type": "string",
                                          "enum": [
                                            "Syslog",
                                            "Serial",
                                            "Concurrent",
                                            "Kafka"
                                          ]
                                        },
                                        "SecAuditSyslogHost": {
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditSyslogPort": {
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditSyslogProtocol": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "enum": [
                                            "tcp",
                                            "udp"
                                          ]
                                        },
                                        "SecAuditSyslogConnectTimeout": {
                                          "type": "integer"
                                        },
                                        "SecArgumentSeparator": {
                                          "type": "string"
                                        },
                                        "SecCookieFormat": {
                                          "type": "integer"
                                        },
                                        "SecUnicodeMapFile": {
                                          "type": "object",
                                          "additionalProperties": false,
                                          "properties": {
                                            "file": {
                                              "type": [
                                                "number",
                                                "string"
                                              ]
                                            },
                                            "code": {
                                              "type": [
                                                "number",
                                                "string"
                                              ]
                                            }
                                          },
                                          "required": [
                                            "file",
                                            "code"
                                          ]
                                        },
                                        "SecUseTransformCache": {
                                          "type": "boolean"
                                        },
                                        "SecRequestTimeout": {
                                          "type": "integer"
                                        },
                                        "SecPassSlowRequest": {
                                          "type": "boolean"
                                        },
                                        "SecResponseTimeout": {
                                          "type": "integer"
                                        },
                                        "SecPassSlowResponse": {
                                          "type": "boolean"
                                        },
                                        "SecLogFullBodyOnTimeout": {
                                          "type": "boolean"
                                        },
                                        "SecAuditKafkaBrokers": {
                                          "description": "CSV list of brokers",
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditKafkaTopic": {
                                          "description": "topic to connect to",
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditKafkaProtocol": {
                                          "description": "connection protocol",
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "enum": [
                                            "plaintext",
                                            "ssl"
                                          ]
                                        },
                                        "SecAuditKafkaCertificate": {
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditKafkaKey": {
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "SecAuditKafkaCa": {
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        }
                                      },
                                      "allOf": [
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestBodyLimitAction"
                                            ],
                                            "properties": {
                                              "SecRequestBodyLimitAction": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecRequestBodyLimit"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestBodyLimit"
                                            ],
                                            "properties": {
                                              "SecRequestBodyLimit": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecRequestBodyLimitAction"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseBodyLimitAction"
                                            ],
                                            "properties": {
                                              "SecResponseBodyLimitAction": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecResponseBodyLimit"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseBodyLimit"
                                            ],
                                            "properties": {
                                              "SecResponseBodyLimit": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecResponseBodyLimitAction"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecAuditLogType"
                                            ],
                                            "properties": {
                                              "SecAuditLogType": {
                                                "const": "Kafka"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecAuditKafkaBrokers"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecAuditLogType"
                                            ],
                                            "properties": {
                                              "SecAuditLogType": {
                                                "const": "Kafka"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecAuditKafkaTopic"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecAuditKafkaProtocol"
                                            ],
                                            "properties": {
                                              "SecAuditKafkaProtocol": {
                                                "const": "ssl"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecAuditKafkaCertificate"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecAuditKafkaProtocol"
                                            ],
                                            "properties": {
                                              "SecAuditKafkaProtocol": {
                                                "const": "ssl"
                                              }
                                            }
                                          },
                                          "then": {
                                            "required": [
                                              "SecAuditKafkaKey"
                                            ]
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestBodyLimitAction"
                                            ],
                                            "properties": {
                                              "SecRequestBodyLimitAction": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecRequestBodyLimit"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestBodyLimit"
                                            ],
                                            "properties": {
                                              "SecRequestBodyLimit": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecRequestBodyLimitAction"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseBodyLimitAction"
                                            ],
                                            "properties": {
                                              "SecResponseBodyLimitAction": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecResponseBodyLimit"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseBodyLimit"
                                            ],
                                            "properties": {
                                              "SecResponseBodyLimit": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecResponseBodyLimitAction"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestTimeout"
                                            ],
                                            "properties": {
                                              "SecRequestTimeout": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecPassSlowRequest"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseTimeout"
                                            ],
                                            "properties": {
                                              "SecResponseTimeout": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecPassSlowResponse"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecResponseTimeout"
                                            ],
                                            "properties": {
                                              "SecResponseTimeout": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecLogFullBodyOnTimeout"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecRequestTimeout"
                                            ],
                                            "properties": {
                                              "SecRequestTimeout": {
                                                "pattern": ".+"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecLogFullBodyOnTimeout"
                                              ]
                                            }
                                          }
                                        },
                                        {
                                          "if": {
                                            "type": "object",
                                            "required": [
                                              "SecAuditKafkaProtocol"
                                            ],
                                            "properties": {
                                              "SecAuditKafkaProtocol": {
                                                "const": "ssl"
                                              }
                                            }
                                          },
                                          "else": {
                                            "not": {
                                              "required": [
                                                "SecAuditKafkaCa"
                                              ]
                                            }
                                          }
                                        }
                                      ]
                                    },
                                    "rules": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "enum": [
                                          "base",
                                          "owasp-crs",
                                          "comodo",
                                          "sowa-mq",
                                          "sowa-http",
                                          "sowa-ws",
                                          "sowa-ufs",
                                          "sowa-kafka",
                                          "sowa-http-reversed"
                                        ]
                                      }
                                    },
                                    "custom_rules": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "validator_json": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "properties": {
                                    "request": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "default": {
                                            "description": "Specify the default rule",
                                            "type": "boolean"
                                          },
                                          "url": {
                                            "type": "string"
                                          },
                                          "method": {
                                            "type": "string",
                                            "enum": [
                                              "post",
                                              "put",
                                              "delete",
                                              "patch"
                                            ]
                                          },
                                          "params": {
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "name": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                },
                                                "operator": {
                                                  "type": "string",
                                                  "enum": [
                                                    "=",
                                                    "!=",
                                                    "~",
                                                    "~*",
                                                    "!~",
                                                    "!~*"
                                                  ]
                                                },
                                                "pattern": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "name",
                                                "operator",
                                                "pattern"
                                              ]
                                            }
                                          },
                                          "allow_empty_body": {
                                            "description": "Specifies allow empty bodies or not.",
                                            "type": "boolean"
                                          },
                                          "allow_primitives_in_root": {
                                            "description": "Specifies allow primitives(integer/string/boolean/null) in root of json or allowed only JSONObject/JSONArray in root. Default - false",
                                            "type": "boolean"
                                          },
                                          "transforms": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "PostFormDataToFlateJson"
                                              ]
                                            }
                                          },
                                          "schema": {
                                            "type": "string",
                                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                          }
                                        },
                                        "required": [
                                          "schema"
                                        ],
                                        "allOf": [
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "url"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "method"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "params"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "allow_empty_body"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "allow_primitives_in_root"
                                                ]
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    },
                                    "response": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "default": {
                                            "description": "Specify the default rule",
                                            "type": "boolean"
                                          },
                                          "url": {
                                            "type": "string"
                                          },
                                          "method": {
                                            "type": "string",
                                            "enum": [
                                              "get",
                                              "post",
                                              "put",
                                              "delete",
                                              "patch"
                                            ]
                                          },
                                          "params": {
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "name": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                },
                                                "operator": {
                                                  "type": "string",
                                                  "enum": [
                                                    "=",
                                                    "!=",
                                                    "~",
                                                    "~*",
                                                    "!~",
                                                    "!~*"
                                                  ]
                                                },
                                                "pattern": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "name",
                                                "operator",
                                                "pattern"
                                              ]
                                            }
                                          },
                                          "allow_empty_body": {
                                            "description": "Specifies allow empty bodies or not.",
                                            "type": "boolean"
                                          },
                                          "allow_primitives_in_root": {
                                            "description": "Specifies allow primitives(integer/string/boolean/null) in root of json or allowed only JSONObject/JSONArray in root. Default - false",
                                            "type": "boolean"
                                          },
                                          "transforms": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "PostFormDataToFlateJson"
                                              ]
                                            }
                                          },
                                          "schema": {
                                            "type": "string",
                                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                          },
                                          "response_code": {
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                              "operator": {
                                                "type": "string",
                                                "enum": [
                                                  "=",
                                                  "!=",
                                                  "~",
                                                  "~*",
                                                  "!~",
                                                  "!~*"
                                                ]
                                              },
                                              "pattern": {
                                                "type": [
                                                  "number",
                                                  "string"
                                                ]
                                              }
                                            },
                                            "required": [
                                              "operator",
                                              "pattern"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "schema"
                                        ],
                                        "allOf": [
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "url"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "method"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "params"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "allow_empty_body"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "allow_primitives_in_root"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "response_code"
                                                ]
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    },
                                    "response_proc_options": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "max_inmemory_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "response_generation_type": {
                                          "description": "Defines how validator generate error response, when internal - using direct generation in java call, when external - native redirect to error page, by default internal",
                                          "type": "string",
                                          "enum": [
                                            "internal",
                                            "external"
                                          ]
                                        }
                                      }
                                    },
                                    "request_error_code": {
                                      "type": "integer"
                                    },
                                    "request_error_message": {
                                      "type": [
                                        "number",
                                        "string"
                                      ]
                                    },
                                    "response_error_code": {
                                      "type": "integer"
                                    },
                                    "response_error_message": {
                                      "type": [
                                        "number",
                                        "string"
                                      ]
                                    },
                                    "trailing_garbage_policy": {
                                      "type": "string",
                                      "enum": [
                                        "WEAK",
                                        "STANDARD",
                                        "STRONG"
                                      ]
                                    },
                                    "action_when_no_rule": {
                                      "description": "Defines behavior in case when request or response don't have apropriate rule to validate, if DENY - message blocked, if IGNORE - message processing continue By default - deny",
                                      "type": "string",
                                      "enum": [
                                        "ignore",
                                        "deny"
                                      ]
                                    },
                                    "action": {
                                      "description": "Defines behavior in case when request or response validation is failed, ignore - only log error, but request or response not blocked, deny - request/response blocked, by default - deny",
                                      "type": "string",
                                      "enum": [
                                        "ignore",
                                        "deny"
                                      ]
                                    }
                                  },
                                  "allOf": [
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_proc_options"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request"
                                        ],
                                        "properties": {
                                          "request": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_error_code"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request"
                                        ],
                                        "properties": {
                                          "request": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_error_message"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_error_code"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_error_message"
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                },
                                "validator_xsd": {
                                  "type": "object",
                                  "additionalProperties": false,
                                  "properties": {
                                    "request": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "default": {
                                            "description": "Specify the default rule",
                                            "type": "boolean"
                                          },
                                          "url": {
                                            "type": "string"
                                          },
                                          "method": {
                                            "type": "string",
                                            "enum": [
                                              "post",
                                              "put",
                                              "delete",
                                              "patch"
                                            ]
                                          },
                                          "params": {
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "name": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                },
                                                "operator": {
                                                  "type": "string",
                                                  "enum": [
                                                    "=",
                                                    "!=",
                                                    "~",
                                                    "~*",
                                                    "!~",
                                                    "!~*"
                                                  ]
                                                },
                                                "pattern": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "name",
                                                "operator",
                                                "pattern"
                                              ]
                                            }
                                          },
                                          "transforms": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "Base64Decode",
                                                "ASN1ContentExtractor"
                                              ]
                                            }
                                          },
                                          "schema": {
                                            "type": "string",
                                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                          },
                                          "wsdl": {
                                            "type": "boolean"
                                          },
                                          "default_wsdl_style": {
                                            "type": "string",
                                            "enum": [
                                              "document",
                                              "rpc"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "schema"
                                        ],
                                        "allOf": [
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "url"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "method"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "params"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "wsdl"
                                              ],
                                              "properties": {
                                                "wsdl": {
                                                  "const": false
                                                }
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    },
                                    "request_limits": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "entityExpansionLimit": {
                                          "description": "Limit the number of entity expansions. Default - 64000",
                                          "type": "integer"
                                        },
                                        "elementAttributeLimit": {
                                          "description": "Limit the number of attributes an element can have. Default - 10000",
                                          "type": "integer"
                                        },
                                        "maxOccurLimit": {
                                          "description": "Limit the number of content model nodes that may be created when building a grammar for a W3C XML Schema that contains maxOccurs attributes with values other than \"unbounded\". Default - 5000",
                                          "type": "integer"
                                        },
                                        "totalEntitySizeLimit": {
                                          "description": "Limit the total size of all entities that include general and parameter entities. The size is calculated as an aggregation of all entities. Default - 50000000",
                                          "type": "integer"
                                        },
                                        "maxGeneralEntitySizeLimit": {
                                          "description": "Limit the maximum size of any general entities. Default - 0",
                                          "type": "integer"
                                        },
                                        "maxParameterEntitySizeLimit": {
                                          "description": "Limit the maximum size of any parameter entities, including the result of nesting multiple parameter entities. Default - 1000000",
                                          "type": "integer"
                                        },
                                        "entityReplacementLimit": {
                                          "description": "Limit the total number of nodes in all entity references. Default - 3000000",
                                          "type": "integer"
                                        },
                                        "maxElementDepth": {
                                          "description": "Limit the maximum element depth. Default - 0",
                                          "type": "integer"
                                        },
                                        "maxXMLNameLimit": {
                                          "description": "Limit the maximum size of XML names, including element name, attribute name and namespace prefix and URI. Default - 1000",
                                          "type": "integer"
                                        }
                                      }
                                    },
                                    "response": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "default": {
                                            "description": "Specify the default rule",
                                            "type": "boolean"
                                          },
                                          "url": {
                                            "type": "string"
                                          },
                                          "method": {
                                            "type": "string",
                                            "enum": [
                                              "get",
                                              "post",
                                              "put",
                                              "delete",
                                              "patch"
                                            ]
                                          },
                                          "params": {
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "name": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                },
                                                "operator": {
                                                  "type": "string",
                                                  "enum": [
                                                    "=",
                                                    "!=",
                                                    "~",
                                                    "~*",
                                                    "!~",
                                                    "!~*"
                                                  ]
                                                },
                                                "pattern": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "required": [
                                                "name",
                                                "operator",
                                                "pattern"
                                              ]
                                            }
                                          },
                                          "transforms": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "Base64Decode",
                                                "ASN1ContentExtractor"
                                              ]
                                            }
                                          },
                                          "schema": {
                                            "type": "string",
                                            "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                          },
                                          "wsdl": {
                                            "type": "boolean"
                                          },
                                          "default_wsdl_style": {
                                            "type": "string",
                                            "enum": [
                                              "document",
                                              "rpc"
                                            ]
                                          },
                                          "response_code": {
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                              "operator": {
                                                "type": "string",
                                                "enum": [
                                                  "=",
                                                  "!=",
                                                  "~",
                                                  "~*",
                                                  "!~",
                                                  "!~*"
                                                ]
                                              },
                                              "pattern": {
                                                "type": [
                                                  "number",
                                                  "string"
                                                ]
                                              }
                                            },
                                            "required": [
                                              "operator",
                                              "pattern"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "schema"
                                        ],
                                        "allOf": [
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "url"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "method"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "params"
                                                ]
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "wsdl"
                                              ],
                                              "properties": {
                                                "wsdl": {
                                                  "const": false
                                                }
                                              }
                                            }
                                          },
                                          {
                                            "if": {
                                              "type": "object",
                                              "required": [
                                                "default"
                                              ],
                                              "properties": {
                                                "default": {}
                                              }
                                            },
                                            "then": {
                                              "not": {
                                                "required": [
                                                  "response_code"
                                                ]
                                              }
                                            }
                                          }
                                        ]
                                      }
                                    },
                                    "response_limits": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "entityExpansionLimit": {
                                          "description": "Limit the number of entity expansions. Default - 64000",
                                          "type": "integer"
                                        },
                                        "elementAttributeLimit": {
                                          "description": "Limit the number of attributes an element can have. Default - 10000",
                                          "type": "integer"
                                        },
                                        "maxOccurLimit": {
                                          "description": "Limit the number of content model nodes that may be created when building a grammar for a W3C XML Schema that contains maxOccurs attributes with values other than \"unbounded\". Default - 5000",
                                          "type": "integer"
                                        },
                                        "totalEntitySizeLimit": {
                                          "description": "Limit the total size of all entities that include general and parameter entities. The size is calculated as an aggregation of all entities. Default - 50000000",
                                          "type": "integer"
                                        },
                                        "maxGeneralEntitySizeLimit": {
                                          "description": "Limit the maximum size of any general entities. Default - 0",
                                          "type": "integer"
                                        },
                                        "maxParameterEntitySizeLimit": {
                                          "description": "Limit the maximum size of any parameter entities, including the result of nesting multiple parameter entities. Default - 1000000",
                                          "type": "integer"
                                        },
                                        "entityReplacementLimit": {
                                          "description": "Limit the total number of nodes in all entity references. Default - 3000000",
                                          "type": "integer"
                                        },
                                        "maxElementDepth": {
                                          "description": "Limit the maximum element depth. Default - 0",
                                          "type": "integer"
                                        },
                                        "maxXMLNameLimit": {
                                          "description": "Limit the maximum size of XML names, including element name, attribute name and namespace prefix and URI. Default - 1000",
                                          "type": "integer"
                                        }
                                      }
                                    },
                                    "response_proc_options": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "max_inmemory_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "response_generation_type": {
                                          "description": "Defines how validator generate error response, when internal - using direct generation in java call, when external - native redirect to error page, by default internal",
                                          "type": "string",
                                          "enum": [
                                            "internal",
                                            "external"
                                          ]
                                        }
                                      }
                                    },
                                    "request_error_code": {
                                      "type": "integer"
                                    },
                                    "request_error_message": {
                                      "type": [
                                        "number",
                                        "string"
                                      ]
                                    },
                                    "response_error_code": {
                                      "type": "integer"
                                    },
                                    "response_error_message": {
                                      "type": [
                                        "number",
                                        "string"
                                      ]
                                    },
                                    "action_when_no_rule": {
                                      "description": "Defines behavior in case when request or response don't have apropriate rule to validate, if DENY - message blocked, if IGNORE - message processing continue By default - deny",
                                      "type": "string",
                                      "enum": [
                                        "ignore",
                                        "deny"
                                      ]
                                    },
                                    "action": {
                                      "description": "Defines behavior in case when request or response validation is failed, ignore - only log error, but request or response not blocked, deny - request/response blocked, by default - deny",
                                      "type": "string",
                                      "enum": [
                                        "ignore",
                                        "deny"
                                      ]
                                    }
                                  },
                                  "allOf": [
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request"
                                        ],
                                        "properties": {
                                          "request": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_limits"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_limits"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_proc_options"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request"
                                        ],
                                        "properties": {
                                          "request": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_error_code"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request"
                                        ],
                                        "properties": {
                                          "request": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_error_message"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_error_code"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response"
                                        ],
                                        "properties": {
                                          "response": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_error_message"
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                },
                                "chains": {
                                  "description": "The action bus",
                                  "type": "object",
                                  "additionalProperties": false,
                                  "properties": {
                                    "request_chains": {
                                      "description": "Specifies chain of actions for the request.",
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "message": {
                                            "description": "Text for analysis. May contain variables. E.g. $shared_request_body",
                                            "type": [
                                              "number",
                                              "string"
                                            ]
                                          },
                                          "phase": {
                                            "description": "The phase at which actions form \"action_list\" will be executed. Default is access.",
                                            "type": [
                                              "number",
                                              "string"
                                            ],
                                            "enum": [
                                              "rewrite",
                                              "access"
                                            ]
                                          },
                                          "trace_config": {
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                              "enableAllActions": {
                                                "description": "enable tracing of all actions in chains",
                                                "type": "boolean"
                                              },
                                              "enableAllChains": {
                                                "description": "enable tracing of all actions in child chains",
                                                "type": "boolean"
                                              },
                                              "mode": {
                                                "description": "Enable or disable tracing at this level.",
                                                "type": "object",
                                                "additionalProperties": false,
                                                "properties": {
                                                  "enabled": {
                                                    "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ],
                                                    "enum": [
                                                      "on",
                                                      "off",
                                                      "var_based"
                                                    ]
                                                  },
                                                  "var": {
                                                    "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ]
                                                  }
                                                }
                                              },
                                              "spanAttributes": {
                                                "type": "array",
                                                "items": {
                                                  "type": "object",
                                                  "additionalProperties": false,
                                                  "properties": {
                                                    "name": {
                                                      "description": "name of attribute",
                                                      "type": [
                                                        "number",
                                                        "string"
                                                      ]
                                                    },
                                                    "value": {
                                                      "description": "value of attribute, can contain variables",
                                                      "type": [
                                                        "number",
                                                        "string"
                                                      ]
                                                    }
                                                  }
                                                }
                                              },
                                              "spanName": {
                                                "description": "Specify name of span",
                                                "type": [
                                                  "number",
                                                  "string"
                                                ]
                                              },
                                              "enableSocketsTracing": {
                                                "description": "Enable or disable socket tracing, by default enabled",
                                                "type": "boolean"
                                              }
                                            }
                                          },
                                          "requiredChildOneOf": {
                                            "description": "Specifies unverifed action check",
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                              "decision": {
                                                "type": [
                                                  "number",
                                                  "string"
                                                ],
                                                "enum": [
                                                  "BLOCK",
                                                  "WARN"
                                                ]
                                              },
                                              "onlyCheckers": {
                                                "type": "boolean"
                                              },
                                              "include": {
                                                "type": "array",
                                                "items": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "exclude": {
                                                "type": "array",
                                                "items": {
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            "required": [
                                              "decision"
                                            ],
                                            "allOf": [
                                              {
                                                "if": {
                                                  "type": "object",
                                                  "required": [
                                                    "exclude"
                                                  ],
                                                  "properties": {
                                                    "exclude": {}
                                                  }
                                                },
                                                "then": {
                                                  "not": {
                                                    "required": [
                                                      "include"
                                                    ]
                                                  }
                                                }
                                              },
                                              {
                                                "if": {
                                                  "type": "object",
                                                  "required": [
                                                    "include"
                                                  ],
                                                  "properties": {
                                                    "include": {}
                                                  }
                                                },
                                                "then": {
                                                  "not": {
                                                    "required": [
                                                      "exclude"
                                                    ]
                                                  }
                                                }
                                              }
                                            ]
                                          },
                                          "actions": {
                                            "$ref": "#/definitions/actions"
                                          }
                                        }
                                      }
                                    },
                                    "request_chain_properties": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "error_state_code": {
                                          "type": "integer"
                                        },
                                        "failed_check_state_code": {
                                          "type": "integer"
                                        },
                                        "max_buffer_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "max_inmemory_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "output_buffer_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "input_buffer_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "temp_file_path": {
                                          "description": "Directory to save temp files. Default is /tmp",
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "resp_gen_rules_file": {
                                          "description": "Specifies the YAML rule file which describes how to fill pattern file.",
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                        },
                                        "resp_gen_content_type": {
                                          "description": "Specifies content type for response header. Default - none.",
                                          "type": [
                                            "number",
                                            "string"
                                          ]
                                        },
                                        "resp_gen_pattern_file": {
                                          "description": "Specifies pattern file.",
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                                        },
                                        "trace_config": {
                                          "type": "object",
                                          "additionalProperties": false,
                                          "properties": {
                                            "enableAllActions": {
                                              "description": "enable tracing of all actions in chains",
                                              "type": "boolean"
                                            },
                                            "enableAllChains": {
                                              "description": "enable tracing of all actions in child chains",
                                              "type": "boolean"
                                            },
                                            "mode": {
                                              "description": "Enable or disable tracing at this level.",
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "enabled": {
                                                  "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ],
                                                  "enum": [
                                                    "on",
                                                    "off",
                                                    "var_based"
                                                  ]
                                                },
                                                "var": {
                                                  "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              }
                                            },
                                            "spanAttributes": {
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "additionalProperties": false,
                                                "properties": {
                                                  "name": {
                                                    "description": "name of attribute",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ]
                                                  },
                                                  "value": {
                                                    "description": "value of attribute, can contain variables",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ]
                                                  }
                                                }
                                              }
                                            },
                                            "spanName": {
                                              "description": "Specify name of span",
                                              "type": [
                                                "number",
                                                "string"
                                              ]
                                            },
                                            "enableSocketsTracing": {
                                              "description": "Enable or disable socket tracing, by default enabled",
                                              "type": "boolean"
                                            }
                                          }
                                        },
                                        "requiredActionOneOf": {
                                          "type": "object",
                                          "additionalProperties": false,
                                          "properties": {
                                            "accessPhase": {},
                                            "rewritePhase": {}
                                          }
                                        }
                                      }
                                    },
                                    "response_chains": {
                                      "description": "Specifies chain of actions for the response.",
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                          "message": {
                                            "description": "Text for analysis. May contain variables. E.g. $shared_request_body",
                                            "type": [
                                              "number",
                                              "string"
                                            ]
                                          },
                                          "requiredChildOneOf": {
                                            "description": "Specifies unverifed action check",
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                              "decision": {
                                                "type": [
                                                  "number",
                                                  "string"
                                                ],
                                                "enum": [
                                                  "BLOCK",
                                                  "WARN"
                                                ]
                                              },
                                              "onlyCheckers": {
                                                "type": "boolean"
                                              },
                                              "include": {
                                                "type": "array",
                                                "items": {
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              },
                                              "exclude": {
                                                "type": "array",
                                                "items": {
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            "required": [
                                              "decision"
                                            ],
                                            "allOf": [
                                              {
                                                "if": {
                                                  "type": "object",
                                                  "required": [
                                                    "exclude"
                                                  ],
                                                  "properties": {
                                                    "exclude": {}
                                                  }
                                                },
                                                "then": {
                                                  "not": {
                                                    "required": [
                                                      "include"
                                                    ]
                                                  }
                                                }
                                              },
                                              {
                                                "if": {
                                                  "type": "object",
                                                  "required": [
                                                    "include"
                                                  ],
                                                  "properties": {
                                                    "include": {}
                                                  }
                                                },
                                                "then": {
                                                  "not": {
                                                    "required": [
                                                      "exclude"
                                                    ]
                                                  }
                                                }
                                              }
                                            ]
                                          },
                                          "actions": {
                                            "$ref": "#/definitions/actions"
                                          }
                                        }
                                      }
                                    },
                                    "response_chain_properties": {
                                      "type": "object",
                                      "additionalProperties": false,
                                      "properties": {
                                        "error_state_code": {
                                          "type": "integer"
                                        },
                                        "failed_check_state_code": {
                                          "type": "integer"
                                        },
                                        "max_buffer_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "max_inmemory_size": {
                                          "type": [
                                            "number",
                                            "string"
                                          ],
                                          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                                        },
                                        "skip_on_error_stage_before": {
                                          "type": "string",
                                          "enum": [
                                            "on",
                                            "off"
                                          ]
                                        },
                                        "use_post_processor": {
                                          "type": "boolean"
                                        },
                                        "resp_gen_modify": {
                                          "description": "Add possibility to override backend response",
                                          "type": "string",
                                          "enum": [
                                            "on",
                                            "off"
                                          ]
                                        },
                                        "trace_config": {
                                          "type": "object",
                                          "additionalProperties": false,
                                          "properties": {
                                            "enableAllActions": {
                                              "description": "enable tracing of all actions in chains",
                                              "type": "boolean"
                                            },
                                            "enableAllChains": {
                                              "description": "enable tracing of all actions in child chains",
                                              "type": "boolean"
                                            },
                                            "mode": {
                                              "description": "Enable or disable tracing at this level.",
                                              "type": "object",
                                              "additionalProperties": false,
                                              "properties": {
                                                "enabled": {
                                                  "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ],
                                                  "enum": [
                                                    "on",
                                                    "off",
                                                    "var_based"
                                                  ]
                                                },
                                                "var": {
                                                  "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                                                  "type": [
                                                    "number",
                                                    "string"
                                                  ]
                                                }
                                              }
                                            },
                                            "spanAttributes": {
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "additionalProperties": false,
                                                "properties": {
                                                  "name": {
                                                    "description": "name of attribute",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ]
                                                  },
                                                  "value": {
                                                    "description": "value of attribute, can contain variables",
                                                    "type": [
                                                      "number",
                                                      "string"
                                                    ]
                                                  }
                                                }
                                              }
                                            },
                                            "spanName": {
                                              "description": "Specify name of span",
                                              "type": [
                                                "number",
                                                "string"
                                              ]
                                            },
                                            "enableSocketsTracing": {
                                              "description": "Enable or disable socket tracing, by default enabled",
                                              "type": "boolean"
                                            }
                                          }
                                        },
                                        "requiredActionOneOf": {
                                          "type": "object",
                                          "additionalProperties": false,
                                          "properties": {
                                            "decisionType": {
                                              "type": [
                                                "number",
                                                "string"
                                              ],
                                              "enum": [
                                                "WARN",
                                                "BLOCK"
                                              ]
                                            },
                                            "action": {
                                              "type": "array",
                                              "items": {
                                                "type": [
                                                  "number",
                                                  "string"
                                                ]
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  },
                                  "allOf": [
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "request_chains"
                                        ],
                                        "properties": {
                                          "request_chains": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "request_chain_properties"
                                          ]
                                        }
                                      }
                                    },
                                    {
                                      "if": {
                                        "type": "object",
                                        "required": [
                                          "response_chains"
                                        ],
                                        "properties": {
                                          "response_chains": {
                                            "pattern": ".+"
                                          }
                                        }
                                      },
                                      "else": {
                                        "not": {
                                          "required": [
                                            "response_chain_properties"
                                          ]
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            },
                            "content_type": {
                              "type": "string"
                            },
                            "connect_timeout": {
                              "type": [
                                "number",
                                "string"
                              ],
                              "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                            },
                            "read_timeout": {
                              "type": [
                                "number",
                                "string"
                              ],
                              "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                            },
                            "write_timeout": {
                              "type": [
                                "number",
                                "string"
                              ],
                              "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                            }
                          },
                          "required": [
                            "type",
                            "action",
                            "stage",
                            "content_type"
                          ]
                        }
                      },
                      "nohttp": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "WsFrameTypeFilter",
                                "DataSizeLimitFilter"
                              ]
                            },
                            "action": {
                              "type": "string",
                              "enum": [
                                "disconnect",
                                "block",
                                "ignore"
                              ]
                            },
                            "stage": {
                              "type": "string",
                              "enum": [
                                "REQ",
                                "RESP"
                              ]
                            },
                            "frame_types": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "DATA",
                                  "TEXT",
                                  "BINARY",
                                  "CONTROL",
                                  "PING",
                                  "PONG",
                                  "CLOSE"
                                ]
                              }
                            },
                            "rule": {
                              "type": "string",
                              "enum": [
                                "ALLOWED",
                                "DENIED"
                              ]
                            },
                            "limit": {
                              "description": "Specifies the limit size for message data. If limit exceeded, session disconnect will occur.",
                              "type": [
                                "number",
                                "string"
                              ],
                              "pattern": "^([0-9]+)|([0-9]+[km]{1})$"
                            },
                            "decompression": {
                              "description": "Defines whether to decompress the message before the limit check.",
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "type",
                            "action",
                            "stage"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            },
            "required": [
              "id",
              "url"
            ]
          }
        },
        "service_http_mq_proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string",
                "pattern": "^\\^?\\/.*\\$?$"
              },
              "allowed_queries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "method": {
                      "type": "string",
                      "enum": [
                        "get",
                        "head",
                        "post",
                        "put",
                        "options",
                        "trace",
                        "patch",
                        "delete"
                      ]
                    },
                    "decodeUrl": {
                      "description": "By default mds use url-decoded request parameters",
                      "type": "boolean"
                    },
                    "strict_params_check": {
                      "description": "False by default. Allows to block undescribed params and paramless requests.",
                      "type": "boolean"
                    },
                    "undescribed": {
                      "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                      "type": "boolean"
                    },
                    "params": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "pattern": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                          }
                        },
                        "required": [
                          "name",
                          "pattern"
                        ]
                      }
                    }
                  },
                  "required": [
                    "method"
                  ]
                }
              },
              "ibmmq_qmname_name": {
                "description": "Defines the name of the queue manager.",
                "type": "string"
              },
              "ibmmq_channel_name": {
                "description": "Defines the channel name for connecting to the queue manager.",
                "type": "string"
              },
              "ibmmq_connection_name": {
                "description": "Defines the host ant port for the connection.",
                "type": "string"
              },
              "ibmmq_queue_name": {
                "description": "Defines the name of the local queue.",
                "type": "string"
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "internal": {
                    "description": "Defines if service should be accessible only locally.",
                    "type": "boolean"
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default - on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "keepalive_time": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "session_cache": {
                    "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "off",
                          "none",
                          "builtin",
                          "shared"
                        ]
                      },
                      "name": {
                        "type": "string"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "ibmmq_charset_encoding": {
                    "description": "Coded Character Set IDentifier",
                    "type": "integer"
                  },
                  "ibmmq_max_msg_length": {
                    "description": "Specifies the size of the transfered message. The default value is \"4194304\".",
                    "type": "string"
                  },
                  "ibmmq_persistent": {
                    "description": "Specifies the persistence attribute. The default value is \"off\".",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ibmmq_with_uow": {
                    "description": "Specifies the transactionality attribute. The default value is \"off\".",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ibmmq_work_mode": {
                    "description": "Specifies blocking or non-blocking mode for mq client. 'lock' by default.",
                    "type": "string",
                    "enum": [
                      "lock",
                      "nolock"
                    ]
                  },
                  "ibmmq_tcp_check_enabled": {
                    "description": "Specifies TCP checking before making connection to MQ manager. 'on' by default.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ibmmq_tcp_check_timeout": {
                    "description": "Defines TCP checking timeout.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "ibmmq_mca_username": {
                    "description": "Specifies the user name.",
                    "type": "string"
                  },
                  "ibmmq_mca_password": {
                    "description": "Specifies the user password.",
                    "type": "string"
                  },
                  "ibmmq_sslcertificate": {
                    "description": "Specifies the certificate.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ibmmq_sslcertificate_key": {
                    "description": "Specifies the label of the SSL certificate.",
                    "type": "string"
                  },
                  "ibmmq_credential_file": {
                    "description": "Specifies path to file with user credentials",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ibmmq_cipher_spec": {
                    "description": "Specifies the cipher.",
                    "type": "string",
                    "enum": [
                      "ECDHE_ECDSA_3DES_EDE_CBC_SHA256",
                      "ECDHE_RSA_AES_128_CBC_SHA256",
                      "ECDHE_RSA_AES_128_GCM_SHA256",
                      "ECDHE_RSA_AES_256_CBC_SHA384",
                      "ECDHE_RSA_AES_256_GCM_SHA384",
                      "ECDHE_ECDSA_NULL_SHA256",
                      "ECDHE_ECDSA_RC4_128_SHA256",
                      "ECDHE_RSA_3DES_EDE_CBC_SHA256",
                      "ECDHE_ECDSA_AES_128_GCM_SHA256",
                      "ECDHE_ECDSA_AES_256_CBC_SHA384",
                      "ECDHE_RSA_NULL_SHA256",
                      "ECDHE_RSA_RC4_128_SHA256",
                      "FIPS_WITH_DES_CBC_SHA",
                      "NULL_MD5",
                      "NULL_SHA",
                      "RC4_MD5_EXPORT",
                      "RC4_MD5_US",
                      "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
                      "TLS_RSA_WITH_AES_128_CBC_SHA",
                      "TLS_RSA_WITH_AES_128_CBC_SHA256",
                      "TLS_RSA_WITH_AES_128_GCM_SHA256",
                      "TLS_RSA_WITH_AES_256_CBC_SHA",
                      "TLS_RSA_WITH_AES_256_CBC_SHA256",
                      "TLS_RSA_WITH_AES_256_CBC_SHA384",
                      "TLS_RSA_WITH_DES_CBC_SHA",
                      "TLS_RSA_WITH_NULL_SHA256",
                      "TLS_RSA_WITH_RC4_128_SHA256"
                    ]
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "exclude_req_stat": {
                    "description": "Excludes location request stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "exclude_resp_stat": {
                    "description": "Excludes location resp stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "gzip": {
                    "$ref": "#/definitions/gzip"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "async_io": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "directio_threshold": {
                        "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "thread_pool_id": {
                        "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "write": {
                        "description": "Specifies whether async_io is used for writing files.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "directio_threshold"
                    ]
                  },
                  "log_masking_rules": {
                    "$ref": "#/definitions/log_masking_rules"
                  },
                  "http2": {
                    "$ref": "#/definitions/http2"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  },
                  "healthcheck_dynamic": {
                    "$ref": "#/definitions/healthcheck_dynamic"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        ".."
                      ],
                      "properties": {
                        "..": {
                          "type": "object",
                          "required": [
                            "listen"
                          ],
                          "properties": {
                            "listen": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "healthcheck_dynamic"
                        ]
                      }
                    }
                  }
                ]
              },
              "filters": {
                "$ref": "#/definitions/filters"
              },
              "validators": {
                "$ref": "#/definitions/validators"
              },
              "postprocessors": {
                "$ref": "#/definitions/postprocessors"
              }
            },
            "required": [
              "id",
              "url",
              "ibmmq_qmname_name",
              "ibmmq_channel_name",
              "ibmmq_connection_name",
              "ibmmq_queue_name"
            ]
          }
        },
        "service_http_kafka_proxy": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "settings": {
              "$ref": "#/definitions/settings"
            },
            "instances": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Specifies the unique id for the service.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[^.\\/\\\\()]+$"
                  },
                  "name": {
                    "description": "Human readable Service identifier printed in log messages",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "profile_version": {
                    "description": "Specifies profile version of this service",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "description": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "listen": {
                    "$ref": "#/definitions/listen"
                  },
                  "hostname": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "url": {
                    "description": "Defines the relative URL by which the service will work.",
                    "type": "string"
                  },
                  "allowed_queries": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "method": {
                          "type": "string",
                          "enum": [
                            "get",
                            "head",
                            "post",
                            "put",
                            "options",
                            "trace",
                            "patch",
                            "delete"
                          ]
                        },
                        "decodeUrl": {
                          "description": "By default mds use url-decoded request parameters",
                          "type": "boolean"
                        },
                        "strict_params_check": {
                          "description": "False by default. Allows to block undescribed params and paramless requests.",
                          "type": "boolean"
                        },
                        "undescribed": {
                          "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                          "type": "boolean"
                        },
                        "params": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "pattern": {
                                "type": [
                                  "number",
                                  "string"
                                ],
                                "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                              }
                            },
                            "required": [
                              "name",
                              "pattern"
                            ]
                          }
                        }
                      },
                      "required": [
                        "method"
                      ]
                    }
                  },
                  "topic": {
                    "description": "Specifies kafka topic.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\S*$"
                  },
                  "optional": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "allow_empty_message": {
                        "description": "When set to On, empty message allowed to send to kafka broker. By default, this option set to Off",
                        "type": "boolean"
                      },
                      "pass_request_headers": {
                        "description": "When set to On, http request headers will be translated to kafka message headers. Off by default.",
                        "type": "boolean"
                      },
                      "headers_blacklist": {
                        "description": "Specifies which http request headers to block from delivering to kafka.",
                        "type": "array",
                        "items": {
                          "description": "Specifies header name (case insensitive).",
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "block_mode": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "enabled": {
                            "description": "If block mode is active, request will not be delivered to kafka with error status code. Off by default.",
                            "type": "boolean"
                          },
                          "wait_remote_result": {
                            "description": "If false, client waits for result of message delivery. If active, client waits for result or timeout.",
                            "type": "boolean"
                          },
                          "remote_timeout": {
                            "description": "Specifies timeout for result of message delivery to kafka.",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                          },
                          "check_interval": {
                            "description": "Specifies message delivery check interval. 100 ms by default.",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                          },
                          "error_code": {
                            "description": "Specifies error code for client when message delivery to kafka fails.",
                            "type": "integer"
                          }
                        },
                        "allOf": [
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "enabled"
                              ],
                              "properties": {
                                "enabled": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "else": {
                              "not": {
                                "required": [
                                  "wait_remote_result"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "wait_remote_result"
                              ],
                              "properties": {
                                "wait_remote_result": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "else": {
                              "not": {
                                "required": [
                                  "remote_timeout"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "wait_remote_result"
                              ],
                              "properties": {
                                "wait_remote_result": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "else": {
                              "not": {
                                "required": [
                                  "check_interval"
                                ]
                              }
                            }
                          },
                          {
                            "if": {
                              "type": "object",
                              "required": [
                                "enabled"
                              ],
                              "properties": {
                                "enabled": {
                                  "pattern": ".+"
                                }
                              }
                            },
                            "else": {
                              "not": {
                                "required": [
                                  "error_code"
                                ]
                              }
                            }
                          }
                        ]
                      },
                      "settings": {
                        "$ref": "#/definitions/settings"
                      },
                      "log_level": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "debug",
                          "info",
                          "notice",
                          "warn",
                          "error",
                          "crit",
                          "alert",
                          "off"
                        ]
                      },
                      "group_access_log": {
                        "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                        "type": "boolean"
                      },
                      "log_format": {
                        "description": "Specifies which format to use.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "internal": {
                        "description": "Defines if service should be accessible only locally.",
                        "type": "boolean"
                      },
                      "session_cache": {
                        "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "off",
                              "none",
                              "builtin",
                              "shared"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "size": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          }
                        },
                        "required": [
                          "type"
                        ]
                      },
                      "body": {
                        "description": "Specifies body to send to kafka.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "message_id": {
                        "description": "Specifies message id to send to kafka.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "set_variable": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "name": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "value": {
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          },
                          "required": [
                            "name",
                            "value"
                          ]
                        }
                      },
                      "http2_only": {
                        "description": "Allow to pass only http2 protocol connection. Default - off",
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "keepalive_time": {
                        "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "opentelemetry": {
                        "$ref": "#/definitions/opentelemetry"
                      },
                      "event_hook": {
                        "$ref": "#/definitions/event_hook"
                      },
                      "exclude_req_stat": {
                        "description": "Excludes location request stats monitoring",
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "exclude_resp_stat": {
                        "description": "Excludes location resp stats monitoring",
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limit_req": {
                        "$ref": "#/definitions/limit_req"
                      },
                      "limit_requests": {
                        "$ref": "#/definitions/limit_requests"
                      },
                      "robot_mitigation": {
                        "$ref": "#/definitions/robot_mitigation"
                      },
                      "ip_behavior": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "sample_base": {
                            "description": "Specifies the number of the request for a valid sample",
                            "type": "number"
                          },
                          "size": {
                            "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})$"
                          },
                          "sample_cycle": {
                            "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                            "type": "string",
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "sensitive": {
                            "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "sample_base",
                          "size",
                          "sample_cycle"
                        ]
                      },
                      "cookie_poisoning": {
                        "$ref": "#/definitions/cookie_poisoning"
                      },
                      "gzip": {
                        "$ref": "#/definitions/gzip"
                      },
                      "limit_conn": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "enabled": {
                            "description": "Enable limit conn module",
                            "type": "boolean"
                          },
                          "count": {
                            "description": "The count of connections which will be handled.",
                            "type": "number"
                          },
                          "size": {
                            "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})$"
                          },
                          "target": {
                            "description": "Specifies a target for check.",
                            "type": "string"
                          },
                          "status_code": {
                            "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^\\d{3}$"
                          },
                          "dry_run": {
                            "description": "Enables dry run mode. Default is off.",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "enabled",
                          "count",
                          "target"
                        ]
                      },
                      "async_io": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "directio_threshold": {
                            "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "thread_pool_id": {
                            "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "write": {
                            "description": "Specifies whether async_io is used for writing files.",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "directio_threshold"
                        ]
                      },
                      "log_masking_rules": {
                        "$ref": "#/definitions/log_masking_rules"
                      },
                      "http2": {
                        "$ref": "#/definitions/http2"
                      },
                      "log_type": {
                        "$ref": "#/definitions/log_type"
                      },
                      "pipelined_requests": {
                        "description": "Enables/disable pipelined requests, by default - on",
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "upload_size_limit": {
                        "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "size": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "drop": {
                            "type": "string",
                            "enum": [
                              "on",
                              "off"
                            ]
                          },
                          "enable": {
                            "description": "Enables limit request body. Default \"true\"",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "size"
                        ]
                      },
                      "healthcheck_dynamic": {
                        "$ref": "#/definitions/healthcheck_dynamic"
                      }
                    },
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "limit_requests"
                          ],
                          "properties": {
                            "limit_requests": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "limit_req"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "limit_req"
                          ],
                          "properties": {
                            "limit_req": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "limit_requests"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            ".."
                          ],
                          "properties": {
                            "..": {
                              "type": "object",
                              "required": [
                                "listen"
                              ],
                              "properties": {
                                "listen": {
                                  "pattern": ".+"
                                }
                              }
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "healthcheck_dynamic"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "filters": {
                    "$ref": "#/definitions/filters"
                  },
                  "transformations": {
                    "$ref": "#/definitions/transformations"
                  },
                  "validators": {
                    "$ref": "#/definitions/validators"
                  },
                  "modifiers": {
                    "$ref": "#/definitions/modifiers"
                  },
                  "postprocessors": {
                    "$ref": "#/definitions/postprocessors"
                  }
                },
                "required": [
                  "id",
                  "url",
                  "topic"
                ]
              }
            }
          },
          "required": [
            "instances"
          ]
        },
        "service_stub_file_receiver": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string",
                "pattern": "^\\^?\\/.*\\$?$"
              },
              "response_headers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "Defines response header name.",
                      "type": "string",
                      "pattern": "^.+$"
                    },
                    "value": {
                      "description": "Defines response header value.",
                      "type": "string"
                    },
                    "value_from_header": {
                      "description": "Specifies request header name for setting it's value to the response header.",
                      "type": "string",
                      "pattern": "^.+$"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value_from_header"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value"
                          ]
                        }
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value_from_header"
                          ]
                        }
                      }
                    }
                  ]
                }
              },
              "download_file_folder": {
                "description": "The folder for saving file.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^(/[^/ ]*)+/?$"
              },
              "file_write_buffer_size": {
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
              },
              "drop_connection_emulator": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "drop_by_timeout": {
                    "description": "Sets timeout after wich connection will be dropped.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "drop_by_req_bytes": {
                    "description": "Sets connection dropping trigger by request bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "drop_by_resp_bytes": {
                    "description": "Sets connection dropping trigger by response bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "drop_by_total_bytes": {
                    "description": "Sets connection dropping trigger by total bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  }
                }
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"1d\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"1h\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. The default value is \"1m\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  }
                }
              }
            },
            "required": [
              "id",
              "url",
              "download_file_folder",
              "file_write_buffer_size"
            ]
          }
        },
        "service_stub_web_socket": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string",
                "pattern": "^\\^?\\/.*\\$?$"
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"1d\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  }
                }
              }
            },
            "required": [
              "id",
              "url"
            ]
          }
        },
        "service_stub_http": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "content_type": {
                "type": "string"
              },
              "content_encoding": {
                "type": "string"
              },
              "response_code": {
                "type": "integer"
              },
              "response_body_data": {
                "description": "Raw body data.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "response_file_body_data": {
                "description": "Relative path from profile_storage to the file with body data.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "chunked": {
                "description": "Do generate chunked response",
                "type": "boolean"
              },
              "chunk_size": {
                "description": "size of chunk (default - 4096 bytes\"",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
              },
              "generate_error_chunk": {
                "description": "generate invalide chunked body (only for tests) - by default false",
                "type": "boolean"
              },
              "response_headers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "Defines response header name.",
                      "type": "string",
                      "pattern": "^.+$"
                    },
                    "value": {
                      "description": "Defines response header value.",
                      "type": "string"
                    },
                    "value_from_header": {
                      "description": "Specifies request header name for setting it's value to the response header.",
                      "type": "string",
                      "pattern": "^.+$"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value_from_header"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value"
                          ]
                        }
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value_from_header"
                          ]
                        }
                      }
                    }
                  ]
                }
              },
              "response_timeout": {
                "description": "Specifies the waiting time before the response to the client.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
              },
              "drop_connection_emulator": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "drop_by_timeout": {
                    "description": "Sets timeout after wich connection will be dropped.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "drop_by_req_bytes": {
                    "description": "Sets connection dropping trigger by request bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "drop_by_resp_bytes": {
                    "description": "Sets connection dropping trigger by response bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "drop_by_total_bytes": {
                    "description": "Sets connection dropping trigger by total bytes limit.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  }
                }
              }
            },
            "required": [
              "id",
              "url",
              "content_type",
              "response_code"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "response_file_body_data"
                  ],
                  "properties": {
                    "response_file_body_data": {}
                  }
                },
                "else": {
                  "required": [
                    "response_body_data"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "response_body_data"
                  ],
                  "properties": {
                    "response_body_data": {}
                  }
                },
                "else": {
                  "required": [
                    "response_file_body_data"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "response_file_body_data"
                  ],
                  "properties": {
                    "response_file_body_data": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "response_body_data"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "response_body_data"
                  ],
                  "properties": {
                    "response_body_data": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "response_file_body_data"
                    ]
                  }
                }
              }
            ]
          }
        },
        "service_healthcheck": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "healthcheck_dynamic": {
                "$ref": "#/definitions/healthcheck_dynamic"
              },
              "filters": {
                "$ref": "#/definitions/filters"
              },
              "allowed_queries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "method": {
                      "type": "string",
                      "enum": [
                        "get",
                        "head",
                        "post",
                        "put",
                        "options",
                        "trace",
                        "patch",
                        "delete"
                      ]
                    },
                    "decodeUrl": {
                      "description": "By default mds use url-decoded request parameters",
                      "type": "boolean"
                    },
                    "strict_params_check": {
                      "description": "False by default. Allows to block undescribed params and paramless requests.",
                      "type": "boolean"
                    },
                    "undescribed": {
                      "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                      "type": "boolean"
                    },
                    "params": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "pattern": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                          }
                        },
                        "required": [
                          "name",
                          "pattern"
                        ]
                      }
                    }
                  },
                  "required": [
                    "method"
                  ]
                }
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "client_header_timeout": {
                    "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"75s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                    "type": "integer"
                  },
                  "send_timeout_to_client": {
                    "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default -on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "upload_size_limit": {
                    "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "enable": {
                        "description": "Enables limit request body. Default \"true\"",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "client_body_in_file_only": {
                    "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "clean"
                    ]
                  },
                  "client_body_in_single_buffer": {
                    "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "client_header_buffer_size": {
                    "description": "Sets buffer size for reading client request header. By default is 1k.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "large_client_header_buffers": {
                    "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "output_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "subrequest_output_buffer_size": {
                    "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffer_size": {
                    "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffering": {
                    "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "proxy_busy_buffers_size": {
                    "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_request_buffering": {
                    "description": "Enables or disables buffering of a client request body. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_max_temp_file_size": {
                    "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_temp_file_write_size": {
                    "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_max_downstream_presend_inmemory_size": {
                    "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffers"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_busy_buffers_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_request_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_temp_file_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_temp_file_write_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_downstream_presend_inmemory_size"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    ".."
                  ],
                  "properties": {
                    "..": {
                      "type": "object",
                      "required": [
                        "listen"
                      ],
                      "properties": {
                        "listen": {
                          "pattern": ".+"
                        }
                      }
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "healthcheck_dynamic"
                    ]
                  }
                }
              }
            ]
          }
        },
        "service_main_proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "use_upstream_groups": {
                "description": "Enables balancing on the main service level itself. The default value is \"False\".",
                "type": "boolean"
              },
              "use_main_upstream_groups": {
                "description": "Defines whether to use upstream groups from main proxy.",
                "type": "boolean"
              },
              "upstream_group_id": {
                "description": "Specifies ID of the upstream group.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "upstream_bind_variable": {
                "description": "Specifies a variable that is used to bind upstream group along with \"bind_condition\".",
                "type": "string"
              },
              "upstream_groups": {
                "$ref": "#/definitions/upstream_groups"
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "client_header_timeout": {
                    "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"75s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                    "type": "integer"
                  },
                  "send_timeout_to_client": {
                    "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "session": {
                    "description": "Enables http session support. The default value is \"off\".",
                    "type": "boolean"
                  },
                  "session_timeout": {
                    "description": "Value in seconds. Default value is 60.",
                    "type": "integer"
                  },
                  "session_cookie_name": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "session_redirect_timeout": {
                    "description": "Value in seconds. Must not be larger than session timeout. Default value is 5.",
                    "type": "integer"
                  },
                  "session_show": {
                    "type": "boolean"
                  },
                  "file_upload_limit": {
                    "description": "Enables file upload limitation by content type header. By default limitation is enabled.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default - on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "upload_size_limit": {
                    "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "enable": {
                        "description": "Enables limit request body. Default \"true\"",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "download_size_limit": {
                    "description": "Specifies maximum size of the response body. The connection will be dropped when size will be exceeded.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "status": {
                        "description": "Specifies the status code when response size was exceeded. By default is 413.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(4|5)[0-9]{2}$"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "http_version": {
                    "description": "Specifies HTTP version of the upstream service. The default value is \"1.1\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      1.0,
                      1.1
                    ]
                  },
                  "cookie_domain": {
                    "description": "Whether rewrite the \"domain\" cookie in the answer from the upstream. The default value is \"off\".",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "from": {
                        "type": "string"
                      },
                      "to": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "from",
                      "to"
                    ]
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_connect_timeout": {
                    "description": "Specifies the connect timeout with the upstream service. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_read_timeout": {
                    "description": "Specifies read timeout from the upstream. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_send_timeout": {
                    "description": "Specifies send timeout from the upstream. The default vaue is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "proxy_headers_hash_bucket_size": {
                    "description": "Bucket size for hashtables,  using in proxy_set_headers and proxy_hide_headers directive. The default value is 64",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[0-9]+$"
                  },
                  "proxy_headers_hash_max_size": {
                    "description": "Maximum size of hashtables, using in proxy_set_headers and proxy_hide_headers directive. The default value is 512",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[0-9]+$"
                  },
                  "proxy_ssl_protocols": {
                    "description": "Specifies SSL protocols. Default values are \"TLSv1 TLSv1.1 TLSv1.2 TLSv1.3\"",
                    "type": "array",
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "enum": [
                        "SSLv2",
                        "SSLv3",
                        "TLSv1",
                        "TLSv1.1",
                        "TLSv1.2",
                        "TLSv1.3"
                      ]
                    }
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "event_hook": {
                    "$ref": "#/definitions/event_hook"
                  },
                  "security_headers": {
                    "$ref": "#/definitions/security_headers"
                  },
                  "exclude_req_stat": {
                    "description": "Excludes location request stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "exclude_resp_stat": {
                    "description": "Excludes location resp stats monitoring",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "gzip": {
                    "$ref": "#/definitions/gzip"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "client_body_in_file_only": {
                    "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "clean"
                    ]
                  },
                  "client_body_in_single_buffer": {
                    "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "client_header_buffer_size": {
                    "description": "Sets buffer size for reading client request header. By default is 1k.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "large_client_header_buffers": {
                    "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "output_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "subrequest_output_buffer_size": {
                    "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffer_size": {
                    "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffering": {
                    "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "proxy_busy_buffers_size": {
                    "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_request_buffering": {
                    "description": "Enables or disables buffering of a client request body. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_max_temp_file_size": {
                    "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_temp_file_write_size": {
                    "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_max_downstream_presend_inmemory_size": {
                    "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "async_io": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "directio_threshold": {
                        "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "thread_pool_id": {
                        "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "write": {
                        "description": "Specifies whether async_io is used for writing files.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "directio_threshold"
                    ]
                  },
                  "request_gunzip": {
                    "description": "Gunzip request body if request header 'Content-Encoding: gzip' is present. Default 'off'.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      true,
                      false
                    ]
                  },
                  "request_gunzip_buffer": {
                    "description": "Specifies buffer size for gunzip operation. Default is memory page size.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "log_masking_rules": {
                    "$ref": "#/definitions/log_masking_rules"
                  },
                  "http2": {
                    "$ref": "#/definitions/http2"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  },
                  "redirect": {
                    "description": "Allows return a temporary redirect with the 302 code or a permanent redirect with the 301 code.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "from": {
                          "description": "Request URI regex",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "to": {
                          "description": "Replacement string",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "type": {
                          "description": "Type of redirect. Defaul \"redirect\".",
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "redirect",
                            "permanent",
                            "redirect_temp",
                            "redirect_perm"
                          ]
                        },
                        "condition": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "var": {
                              "description": "Specifies a variable to analyze",
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "operator": {
                              "description": "Specifies an operator to apply",
                              "type": [
                                "number",
                                "string"
                              ],
                              "enum": [
                                "=",
                                "!=",
                                "~",
                                "~*",
                                "!~",
                                "!~*"
                              ]
                            },
                            "val": {
                              "description": "Specifies a value or regex for the operator",
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          },
                          "required": [
                            "var",
                            "operator",
                            "val"
                          ]
                        }
                      },
                      "required": [
                        "from",
                        "to"
                      ]
                    }
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffers"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_busy_buffers_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_request_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_temp_file_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_temp_file_write_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_downstream_presend_inmemory_size"
                        ]
                      }
                    }
                  }
                ]
              },
              "filters": {
                "$ref": "#/definitions/filters"
              },
              "validators": {
                "$ref": "#/definitions/validators"
              },
              "modifiers": {
                "$ref": "#/definitions/modifiers"
              },
              "postprocessors": {
                "$ref": "#/definitions/postprocessors"
              }
            },
            "required": [
              "id",
              "url"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "upstream_groups"
                  ],
                  "properties": {
                    "upstream_groups": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "use_upstream_groups"
                    ]
                  }
                }
              }
            ]
          }
        },
        "service_static": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "response_headers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "Defines response header name.",
                      "type": "string",
                      "pattern": "^.+$"
                    },
                    "value": {
                      "description": "Defines response header value.",
                      "type": "string"
                    },
                    "value_from_header": {
                      "description": "Specifies request header name for setting it's value to the response header.",
                      "type": "string",
                      "pattern": "^.+$"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "else": {
                        "required": [
                          "value_from_header"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value_from_header"
                        ],
                        "properties": {
                          "value_from_header": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value"
                          ]
                        }
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "value"
                        ],
                        "properties": {
                          "value": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "value_from_header"
                          ]
                        }
                      }
                    }
                  ]
                }
              },
              "chains": {
                "description": "The action bus",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "request_chains": {
                    "$ref": "#/definitions/request_chains"
                  },
                  "request_chain_properties": {
                    "$ref": "#/definitions/request_chain_properties"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "request_chains"
                      ],
                      "properties": {
                        "request_chains": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "request_chain_properties"
                        ]
                      }
                    }
                  }
                ]
              },
              "response_generator": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "pattern_file": {
                    "description": "Specifies rule file which describes how to fill pattern file.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "rules_file": {
                    "description": "Specifies rule file which describes how to fill pattern file. Default - rules file from system resources.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "content_type": {
                    "description": "Specifies content type for response header. Default - none.",
                    "type": "string"
                  }
                },
                "required": [
                  "pattern_file",
                  "rules_file"
                ]
              },
              "allowed_queries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "method": {
                      "type": "string",
                      "enum": [
                        "get",
                        "head",
                        "post",
                        "put",
                        "options",
                        "trace",
                        "patch",
                        "delete"
                      ]
                    },
                    "decodeUrl": {
                      "description": "By default mds use url-decoded request parameters",
                      "type": "boolean"
                    },
                    "strict_params_check": {
                      "description": "False by default. Allows to block undescribed params and paramless requests.",
                      "type": "boolean"
                    },
                    "undescribed": {
                      "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                      "type": "boolean"
                    },
                    "params": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "pattern": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                          }
                        },
                        "required": [
                          "name",
                          "pattern"
                        ]
                      }
                    }
                  },
                  "required": [
                    "method"
                  ]
                }
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "root": {
                    "description": "Root folder. Value must be a relative path from custom resources",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "alias": {
                    "description": "Alias. Value must be a relative path from custom resources",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "absolute_alias_path": {
                    "description": "Aliasing will be done to any directory by absolute path. False by default",
                    "type": "boolean"
                  },
                  "index": {
                    "description": "Index page/file",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "rewrite": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "from": {
                        "description": "Rewrite from",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "to": {
                        "description": "Rewrite to",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "flag": {
                        "description": "Rewrite flag",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "last",
                          "break",
                          "redirect",
                          "permanent"
                        ]
                      }
                    },
                    "required": [
                      "from",
                      "to"
                    ]
                  },
                  "response_code": {
                    "type": "integer"
                  },
                  "response_body": {
                    "description": "Raw body data.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "response_file": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "client_header_timeout": {
                    "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_timeout": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"75s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                    "type": "integer"
                  },
                  "send_timeout_to_client": {
                    "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "session": {
                    "description": "Enables http session support. The default value is \"off\".",
                    "type": "boolean"
                  },
                  "session_timeout": {
                    "description": "Value in seconds. Default value is 60.",
                    "type": "integer"
                  },
                  "session_cookie_name": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "session_redirect_timeout": {
                    "description": "Value in seconds. Must not be larger than session timeout. Default value is 5.",
                    "type": "integer"
                  },
                  "session_show": {
                    "type": "boolean"
                  },
                  "session_cache": {
                    "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "type": "string",
                        "enum": [
                          "off",
                          "none",
                          "builtin",
                          "shared"
                        ]
                      },
                      "name": {
                        "type": "string"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "type"
                    ]
                  },
                  "pipelined_requests": {
                    "description": "Enables/disable pipelined requests, by default -on",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "http2_only": {
                    "description": "Allow to pass only http2 protocol connection. Default - off",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "upload_size_limit": {
                    "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "enable": {
                        "description": "Enables limit request body. Default \"true\"",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "download_size_limit": {
                    "description": "Specifies maximum size of the response body. The connection will be dropped when size will be exceeded.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "drop": {
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "status": {
                        "description": "Specifies the status code when response size was exceeded. By default is 413.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(4|5)[0-9]{2}$"
                      }
                    },
                    "required": [
                      "size"
                    ]
                  },
                  "set_variable": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "value": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "value"
                      ]
                    }
                  },
                  "etag": {
                    "description": "Enables/disables etag response header. Enabled by default.",
                    "type": "boolean"
                  },
                  "uri_match_type": {
                    "description": "Specifies location match type (~/=/prefix). Regex (~) by default.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "prefix",
                      "regex",
                      "exact"
                    ]
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  },
                  "limit_req": {
                    "$ref": "#/definitions/limit_req"
                  },
                  "limit_requests": {
                    "$ref": "#/definitions/limit_requests"
                  },
                  "robot_mitigation": {
                    "$ref": "#/definitions/robot_mitigation"
                  },
                  "ip_behavior": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "sample_base": {
                        "description": "Specifies the number of the request for a valid sample",
                        "type": "number"
                      },
                      "size": {
                        "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "sample_cycle": {
                        "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                        "type": "string",
                        "pattern": "^([0-9]+[mMsS]{1})$"
                      },
                      "sensitive": {
                        "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sample_base",
                      "size",
                      "sample_cycle"
                    ]
                  },
                  "cookie_poisoning": {
                    "$ref": "#/definitions/cookie_poisoning"
                  },
                  "gzip": {
                    "$ref": "#/definitions/gzip"
                  },
                  "limit_conn": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "description": "Enable limit conn module",
                        "type": "boolean"
                      },
                      "count": {
                        "description": "The count of connections which will be handled.",
                        "type": "number"
                      },
                      "size": {
                        "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})$"
                      },
                      "target": {
                        "description": "Specifies a target for check.",
                        "type": "string"
                      },
                      "status_code": {
                        "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^\\d{3}$"
                      },
                      "dry_run": {
                        "description": "Enables dry run mode. Default is off.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled",
                      "count",
                      "target"
                    ]
                  },
                  "async_io": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "directio_threshold": {
                        "description": "Enables the use of the O_DIRECT flag (FreeBSD, Linux), the F_NOCACHE flag (macOS), or the directio() function (Solaris), when reading files that are larger than or equal to the specified size.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "thread_pool_id": {
                        "description": "Defines thread pool to use by id. If the thread_pool_id is omitted, the pool with the name default is used.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "write": {
                        "description": "Specifies whether async_io is used for writing files.",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "directio_threshold"
                    ]
                  },
                  "log_masking_rules": {
                    "$ref": "#/definitions/log_masking_rules"
                  },
                  "client_body_buffer_size": {
                    "description": "Sets buffer size for reading client request body. Default By default, buffer size is equal to two memory pages. For x86 it is usually 8K.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "client_body_in_file_only": {
                    "description": "Determines whether nginx should save the entire client request body into a file. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "clean"
                    ]
                  },
                  "client_body_in_single_buffer": {
                    "description": "Determines whether nginx should save the entire client request body in a single buffer. By default is off.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "client_header_buffer_size": {
                    "description": "Sets buffer size for reading client request header. By default is 1k.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "large_client_header_buffers": {
                    "description": "Sets the maximum number and size of buffers used for reading large client request header. By default the number is 4, the size is 4k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "output_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from a disk. By default the number is 2, the size is 32k.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "subrequest_output_buffer_size": {
                    "description": "Sets the size of the buffer used for storing the response body of a subrequest. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffer_size": {
                    "description": "Sets the size of the buffer used for reading the first part of the response received from the proxied server. By default, the buffer size is equal to one memory page.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_buffering": {
                    "description": "Enables or disables buffering of responses from the proxied server. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_buffers": {
                    "description": "Sets the number and size of the buffers used for reading a response from the proxied server, for a single connection. By default the number is 8, the size is equal to one memory page.",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "number": {
                        "type": "integer"
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      }
                    },
                    "required": [
                      "number",
                      "size"
                    ]
                  },
                  "proxy_busy_buffers_size": {
                    "description": "When buffering of responses from the proxied server is enabled, limits the total size of buffers that can be busy sending a response to the client while the response is not yet fully read. By default, size is limited by the size of two buffers set by the proxy_buffer_size and proxy_buffers directives.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_request_buffering": {
                    "description": "Enables or disables buffering of a client request body. By default is on.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "proxy_max_temp_file_size": {
                    "description": "When buffering of responses from the proxied server is enabled, and the whole response does not fit into the buffers set by the proxy_buffer_size and proxy_buffers directives, a part of the response can be saved to a temporary file. This directive sets the maximum size of the temporary file. The size of data written to the temporary file at a time is set by the proxy_temp_file_write_size directive. The zero value disables buffering of responses to temporary files.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_temp_file_write_size": {
                    "description": "Limits the size of data written to a temporary file at a time, when buffering of responses from the proxied server to temporary files is enabled. By default, size is limited by two buffers set by the proxy_buffer_size and proxy_buffers directives. The maximum size of a temporary file is set by the proxy_max_temp_file_size directive.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "proxy_max_downstream_presend_inmemory_size": {
                    "description": "When used body filters such Modsecurity or Response size body filter, we always read all upstream data before sending client. Setting this parameter adjust maximum data in memory size, if 0 specified limit is not setted",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  },
                  "log_type": {
                    "$ref": "#/definitions/log_type"
                  },
                  "cache": {
                    "$ref": "#/definitions/cache"
                  },
                  "healthcheck_dynamic": {
                    "$ref": "#/definitions/healthcheck_dynamic"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "alias"
                      ],
                      "properties": {
                        "alias": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "root"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "root"
                      ],
                      "properties": {
                        "root": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "alias"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "alias"
                      ],
                      "properties": {
                        "alias": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "absolute_alias_path"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "index"
                      ],
                      "properties": {
                        "index": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "response_code"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_requests"
                      ],
                      "properties": {
                        "limit_requests": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_req"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "limit_req"
                      ],
                      "properties": {
                        "limit_req": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "limit_requests"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_buffers"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_busy_buffers_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_request_buffering"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_temp_file_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_temp_file_write_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "http_version"
                      ],
                      "properties": {
                        "http_version": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "proxy_max_downstream_presend_inmemory_size"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        ".."
                      ],
                      "properties": {
                        "..": {
                          "type": "object",
                          "required": [
                            "listen"
                          ],
                          "properties": {
                            "listen": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "healthcheck_dynamic"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "required": [
              "id",
              "url"
            ]
          }
        },
        "service_cache": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "storages": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "Defines the name of storage.",
                    "type": "string"
                  },
                  "space": {
                    "description": "Defines the size of object storage. Default 10m",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})$"
                  },
                  "entries": {
                    "description": "Defines the count of simultaneously stored objects. Default 8096",
                    "type": "integer"
                  },
                  "remove_time": {
                    "description": "Defines the time of storing objects. Default dont remove at all",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[mMsS]{1})$"
                  }
                },
                "required": [
                  "name"
                ]
              }
            },
            "instances": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "description": "Specifies the unique id for the service.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^[^.\\/\\\\()]+$"
                  },
                  "name": {
                    "description": "Human readable Service identifier printed in log messages",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "profile_version": {
                    "description": "Specifies profile version of this service",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "description": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "listen": {
                    "$ref": "#/definitions/listen"
                  },
                  "hostname": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "url": {
                    "description": "Defines the relative URL by which the service will allow reading from queue.",
                    "type": "string"
                  },
                  "phase": {
                    "description": "Defines the phase, on which we need to use cache. Default rewrite. When service is defined not in service_http_proxy use content by default",
                    "type": "string",
                    "enum": [
                      "access_handler",
                      "body_filter",
                      "rewrite_handler"
                    ]
                  },
                  "store_name": {
                    "description": "Defines the name of storage",
                    "type": "string"
                  },
                  "store_key": {
                    "description": "Defines key with which objects will store. Default $request_id",
                    "type": "string"
                  },
                  "default_success_status": {
                    "description": "Defines default success status. Default 200",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\d{3}$"
                  },
                  "default_empty_queue_status": {
                    "description": "Defines default status in case empty queue. Default 403",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\d{3}$"
                  },
                  "default_already_exists_status": {
                    "description": "Defines default status in case when object already exists with this key. Default 403",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\d{3}$"
                  },
                  "default_message_unknown_status": {
                    "description": "Defines default status when in case object with this key doesn't exists. Default 404",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\d{3}$"
                  },
                  "default_error_status": {
                    "description": "Defines default status for internal errors. Default 500",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^\\d{3}$"
                  },
                  "success_result_pattern": {
                    "description": "Defines pattern for success result response",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "success_result_pattern_file": {
                    "description": "Defines pattern file for success result response",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "empty_queue_pattern": {
                    "description": "Defines pattern for empty queue response",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "empty_queue_pattern_file": {
                    "description": "Defines pattern file for empty queue response",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "default_error_pattern": {
                    "description": "Defines pattern for internal error response",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "default_error_pattern_file": {
                    "description": "Defines pattern file for internal error response",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "already_exists_pattern": {
                    "description": "Defines pattern for already exists object response",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "already_exists_pattern_file": {
                    "description": "Defines pattern file for already exists object response",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "message_unknown_pattern": {
                    "description": "Defines pattern for unknown object response",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "message_unknown_pattern_file": {
                    "description": "Defines pattern file for unknown object response",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "send_error": {
                    "description": "Defines sending error on non content phase or not. Default true",
                    "type": "boolean"
                  },
                  "response_content_type": {
                    "description": "Defines response content-type. Default \"application/json\"",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "configuration_file": {
                    "description": "Defines path to configuration file with definitions of existing actions",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "allowed_queries": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "method": {
                          "type": "string",
                          "enum": [
                            "get",
                            "head",
                            "post",
                            "put",
                            "options",
                            "trace",
                            "patch",
                            "delete"
                          ]
                        },
                        "decodeUrl": {
                          "description": "By default mds use url-decoded request parameters",
                          "type": "boolean"
                        },
                        "strict_params_check": {
                          "description": "False by default. Allows to block undescribed params and paramless requests.",
                          "type": "boolean"
                        },
                        "undescribed": {
                          "description": "False by default when no params, true when params present. Deny or pass request with undescribed request query params",
                          "type": "boolean"
                        },
                        "params": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "pattern": {
                                "type": [
                                  "number",
                                  "string"
                                ],
                                "pattern": "^((?!\\(\\?i\\)|\\(\\?-i\\)).)*$"
                              }
                            },
                            "required": [
                              "name",
                              "pattern"
                            ]
                          }
                        }
                      },
                      "required": [
                        "method"
                      ]
                    }
                  },
                  "optional": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "log_level": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "debug",
                          "info",
                          "notice",
                          "warn",
                          "error",
                          "crit",
                          "alert",
                          "off"
                        ]
                      },
                      "group_access_log": {
                        "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                        "type": "boolean"
                      },
                      "log_format": {
                        "description": "Specifies which format to use.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "client_header_timeout": {
                        "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "client_body_timeout": {
                        "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "keepalive_timeout": {
                        "description": "Defines a timeout duaring which a connection will stay open. The default value is \"75s\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "keepalive_time": {
                        "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "keepalive_requests": {
                        "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                        "type": "integer"
                      },
                      "send_timeout_to_client": {
                        "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      },
                      "session": {
                        "description": "Enables http session support. The default value is \"off\".",
                        "type": "boolean"
                      },
                      "session_timeout": {
                        "description": "Value in seconds. Default value is 60.",
                        "type": "integer"
                      },
                      "session_cookie_name": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "session_redirect_timeout": {
                        "description": "Value in seconds. Must not be larger than session timeout. Default value is 5.",
                        "type": "integer"
                      },
                      "session_show": {
                        "type": "boolean"
                      },
                      "session_cache": {
                        "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "off",
                              "none",
                              "builtin",
                              "shared"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "size": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          }
                        },
                        "required": [
                          "type"
                        ]
                      },
                      "pipelined_requests": {
                        "description": "Enables/disable pipelined requests, by default - on",
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "http2_only": {
                        "description": "Allow to pass only http2 protocol connection. Default - off",
                        "type": "string",
                        "enum": [
                          "on",
                          "off"
                        ]
                      },
                      "upload_size_limit": {
                        "description": "Specifies maximum size of the request body. Parameter \"drop\" specifies whether drop connection or not.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "size": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "drop": {
                            "type": "string",
                            "enum": [
                              "on",
                              "off"
                            ]
                          },
                          "enable": {
                            "description": "Enables limit request body. Default \"true\"",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "size"
                        ]
                      },
                      "download_size_limit": {
                        "description": "Specifies maximum size of the response body. The connection will be dropped when size will be exceeded.",
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "size": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                          },
                          "drop": {
                            "type": "string",
                            "enum": [
                              "on",
                              "off"
                            ]
                          },
                          "status": {
                            "description": "Specifies the status code when response size was exceeded. By default is 413.",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^(4|5)[0-9]{2}$"
                          }
                        },
                        "required": [
                          "size"
                        ]
                      },
                      "kafka_logger_id": {
                        "description": "Specifies service id to handle event.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "set_variable": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "name": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "value": {
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          },
                          "required": [
                            "name",
                            "value"
                          ]
                        }
                      },
                      "limit_req": {
                        "$ref": "#/definitions/limit_req"
                      },
                      "limit_requests": {
                        "$ref": "#/definitions/limit_requests"
                      },
                      "robot_mitigation": {
                        "$ref": "#/definitions/robot_mitigation"
                      },
                      "ip_behavior": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "sample_base": {
                            "description": "Specifies the number of the request for a valid sample",
                            "type": "number"
                          },
                          "size": {
                            "description": "Size means how much memory will use by zone. The default value is \"10m\"",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})$"
                          },
                          "sample_cycle": {
                            "description": "Specifies the cyclog of the sampling, unit could be s (for second) and m (for minute).",
                            "type": "string",
                            "pattern": "^([0-9]+[mMsS]{1})$"
                          },
                          "sensitive": {
                            "description": "Specifies sensitive locations. If a location is defined as a sensitive location, all the resources under this location will be treated as sensitive. Default false",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "sample_base",
                          "size",
                          "sample_cycle"
                        ]
                      },
                      "cookie_poisoning": {
                        "$ref": "#/definitions/cookie_poisoning"
                      },
                      "gzip": {
                        "$ref": "#/definitions/gzip"
                      },
                      "event_hook": {
                        "$ref": "#/definitions/event_hook"
                      },
                      "limit_conn": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "enabled": {
                            "description": "Enable limit conn module",
                            "type": "boolean"
                          },
                          "count": {
                            "description": "The count of connections which will be handled.",
                            "type": "number"
                          },
                          "size": {
                            "description": "Shared memory zone used to store the state of each target and how often it has create connection. The default value is \"10m\"",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^([0-9]+[kKmM]{1})$"
                          },
                          "target": {
                            "description": "Specifies a target for check.",
                            "type": "string"
                          },
                          "status_code": {
                            "description": "Defines the response code if the limit is exceeded. Default value is \"503\".",
                            "type": [
                              "number",
                              "string"
                            ],
                            "pattern": "^\\d{3}$"
                          },
                          "dry_run": {
                            "description": "Enables dry run mode. Default is off.",
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "enabled",
                          "count",
                          "target"
                        ]
                      },
                      "log_masking_rules": {
                        "$ref": "#/definitions/log_masking_rules"
                      },
                      "http2": {
                        "$ref": "#/definitions/http2"
                      },
                      "log_type": {
                        "$ref": "#/definitions/log_type"
                      },
                      "cache": {
                        "$ref": "#/definitions/cache"
                      },
                      "healthcheck_dynamic": {
                        "$ref": "#/definitions/healthcheck_dynamic"
                      }
                    },
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "limit_requests"
                          ],
                          "properties": {
                            "limit_requests": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "limit_req"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "limit_req"
                          ],
                          "properties": {
                            "limit_req": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "limit_requests"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            ".."
                          ],
                          "properties": {
                            "..": {
                              "type": "object",
                              "required": [
                                "listen"
                              ],
                              "properties": {
                                "listen": {
                                  "pattern": ".+"
                                }
                              }
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "healthcheck_dynamic"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "filters": {
                    "$ref": "#/definitions/filters"
                  },
                  "modifiers": {
                    "$ref": "#/definitions/modifiers"
                  },
                  "validators": {
                    "$ref": "#/definitions/validators"
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  }
                },
                "required": [
                  "id",
                  "url",
                  "store_name",
                  "configuration_file"
                ],
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "optional"
                      ],
                      "properties": {
                        "optional": {
                          "type": "object",
                          "required": [
                            "event_hook"
                          ],
                          "properties": {
                            "event_hook": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "then": {
                      "required": [
                        "name"
                      ]
                    }
                  }
                ]
              }
            }
          },
          "required": [
            "storages"
          ]
        },
        "service_profile_status_prometheus": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "listen": {
                "$ref": "#/definitions/listen"
              },
              "hostname": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "url": {
                "description": "Defines the relative URL by which the service will work.",
                "type": "string"
              },
              "auth_basic": {
                "description": "Name to the username/password protected area.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "auth_basic_user_file": {
                "description": "Directive with a path to the .htpasswd file that contain user/password pairs.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "log_level": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "debug",
                      "info",
                      "notice",
                      "warn",
                      "error",
                      "crit",
                      "alert",
                      "off"
                    ]
                  },
                  "group_access_log": {
                    "description": "Specifies whether group or not the access log by status codes (2xx, 3xx, 4xx, 5xx, 404, 413, 429, 499, 500). Default is false.",
                    "type": "boolean"
                  },
                  "log_format": {
                    "description": "Specifies which format to use.",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "client_header_timeout": {
                    "description": "Sets the timeout for reading headers from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "client_body_timeout": {
                    "description": "Sets the timeout for reading body from the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_timeout": {
                    "description": "Limits the maximum time during which requests can be processed through one keep-alive connection. After this time is reached, the connection is closed following the subsequent request processing. By default -  timeout 1h",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_time": {
                    "description": "Defines a timeout duaring which a connection will stay open. The default value is \"1h\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "keepalive_requests": {
                    "description": "Sets the maximum number of the request duaring keep-alive timeiut. The default value is \"10000\".",
                    "type": "integer"
                  },
                  "send_timeout_to_client": {
                    "description": "Sets the timeout for sending answer to the client. The default value is \"60s\".",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "opentelemetry": {
                    "$ref": "#/definitions/opentelemetry"
                  }
                }
              }
            },
            "required": [
              "id",
              "url",
              "auth_basic",
              "auth_basic_user_file"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "optional"
                  ],
                  "properties": {
                    "optional": {
                      "type": "object",
                      "required": [
                        "event_hook"
                      ],
                      "properties": {
                        "event_hook": {
                          "pattern": ".+"
                        }
                      }
                    }
                  }
                },
                "then": {
                  "required": [
                    "name"
                  ]
                }
              }
            ]
          }
        },
        "service_artemis_proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "trust_store": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "key_store": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "secrets": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "artemis_sowa": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "ssl_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "trust_all": {
                            "type": "boolean"
                          },
                          "verify_host": {
                            "type": "boolean"
                          },
                          "enabled_cipher_suites": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "enabled_protocols": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "enum": [
                              "TLSv1.3",
                              "TLSv1.2",
                              "TLSv1.1",
                              "TLSv1",
                              "SSLv3",
                              "SSLv2Hello"
                            ]
                          }
                        },
                        "required": [
                          "enabled_cipher_suites",
                          "enabled_protocols"
                        ]
                      },
                      "failover_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "initial_connect_attempts": {
                            "description": "The number of reconnect attempts allowed before the first successful connection and before the client discovers the broker topology. The default is 0, meaning only one attempt is allowed",
                            "type": "integer"
                          },
                          "failover_on_initial_connection": {
                            "type": "boolean"
                          },
                          "reconnect_attempts": {
                            "type": "integer"
                          },
                          "retry_interval": {
                            "type": "integer"
                          },
                          "retry_interval_multiplier": {
                            "description": "The multiplier used to grow the retry interval. The default is 1.0, meaning equal intervals",
                            "type": "number"
                          },
                          "max_retry_interval": {
                            "type": "integer"
                          }
                        }
                      },
                      "core_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "connection_ttl": {
                            "description": "The time in milliseconds after which the connection is failed if the server sends no ping packets. The default is 60000 (1 minute). -1 disables the timeout",
                            "type": "integer"
                          },
                          "confirmation_window_size": {
                            "description": "The size in bytes of the command replay buffer. This is used for automatic session re-attachment on reconnect. The default is -1, meaning no automatic re-attachment.",
                            "type": "integer"
                          },
                          "client_failure_check_period": {
                            "description": "The time in milliseconds between checks for dead connections. The default is 30000 (30 seconds). -1 disables checking",
                            "type": "integer"
                          }
                        }
                      },
                      "discovery_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "ha": {
                            "description": "If enabled, track changes in the topology of HA brokers. The host and port from the URI is used only for the initial connection. After initial connection, the client receives the current failover endpoints and any updates resulting from topology changes. It is disabled by default",
                            "type": "boolean"
                          },
                          "use_topology_for_load_balancing": {
                            "description": "If enabled, use the cluster topology for connection load balancing. It is disabled by default",
                            "type": "boolean"
                          }
                        }
                      },
                      "ssl_enabled": {
                        "type": "boolean"
                      },
                      "brokers": {
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "queue": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "consumers_amount": {
                        "type": "integer"
                      },
                      "jms_type": {
                        "description": "Auto detected by default",
                        "enum": [
                          "Text",
                          "Bytes"
                        ]
                      },
                      "reply": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "queue": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "restricted_return_codes": {
                            "type": "array",
                            "items": {
                              "type": [
                                "number",
                                "string"
                              ]
                            }
                          },
                          "remove_headers_pattern": {
                            "description": "Specifies regex for headers removing BEFORE sending to reply queue",
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "jms_type": {
                            "enum": [
                              "Text",
                              "Bytes"
                            ]
                          }
                        },
                        "required": [
                          "queue"
                        ]
                      }
                    },
                    "required": [
                      "brokers",
                      "queue"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "ssl_enabled"
                          ],
                          "properties": {
                            "ssl_enabled": {
                              "const": false
                            }
                          }
                        },
                        "then": {
                          "required": []
                        },
                        "else": {
                          "required": [
                            "ssl_options"
                          ]
                        }
                      }
                    ]
                  },
                  "to": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "remove_headers_pattern": {
                        "description": "Specifies regex for headers removing BEFORE sending to sowa",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "service_id": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "service_type": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "service_url": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "timeout": {
                        "description": "Timeout in millisecond. Default is 10000",
                        "type": "integer"
                      },
                      "content_type": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "service_id",
                      "service_type"
                    ]
                  }
                },
                "required": [
                  "from",
                  "to"
                ]
              },
              "sowa_artemis": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "remove_headers_pattern": {
                        "description": "Specifies regex for headers removing BEFORE sending response to sowa",
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    }
                  },
                  "to": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "ssl_enabled": {
                        "type": "boolean"
                      },
                      "ssl_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "trust_all": {
                            "type": "boolean"
                          },
                          "verify_host": {
                            "type": "boolean"
                          },
                          "enabled_cipher_suites": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "enabled_protocols": {
                            "type": [
                              "number",
                              "string"
                            ],
                            "enum": [
                              "TLSv1.3",
                              "TLSv1.2",
                              "TLSv1.1",
                              "TLSv1",
                              "SSLv3",
                              "SSLv2Hello"
                            ]
                          }
                        },
                        "required": [
                          "enabled_cipher_suites",
                          "enabled_protocols"
                        ]
                      },
                      "failover_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "initial_connect_attempts": {
                            "description": "The number of reconnect attempts allowed before the first successful connection and before the client discovers the broker topology. The default is 0, meaning only one attempt is allowed",
                            "type": "integer"
                          },
                          "failover_on_initial_connection": {
                            "type": "boolean"
                          },
                          "reconnect_attempts": {
                            "type": "integer"
                          },
                          "retry_interval": {
                            "type": "integer"
                          },
                          "retry_interval_multiplier": {
                            "description": "The multiplier used to grow the retry interval. The default is 1.0, meaning equal intervals",
                            "type": "number"
                          },
                          "max_retry_interval": {
                            "type": "integer"
                          }
                        }
                      },
                      "core_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "connection_ttl": {
                            "description": "The time in milliseconds after which the connection is failed if the server sends no ping packets. The default is 60000 (1 minute). -1 disables the timeout",
                            "type": "integer"
                          },
                          "confirmation_window_size": {
                            "description": "The size in bytes of the command replay buffer. This is used for automatic session re-attachment on reconnect. The default is -1, meaning no automatic re-attachment.",
                            "type": "integer"
                          },
                          "client_failure_check_period": {
                            "description": "The time in milliseconds between checks for dead connections. The default is 30000 (30 seconds). -1 disables checking",
                            "type": "integer"
                          }
                        }
                      },
                      "discovery_options": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "ha": {
                            "description": "If enabled, track changes in the topology of HA brokers. The host and port from the URI is used only for the initial connection. After initial connection, the client receives the current failover endpoints and any updates resulting from topology changes. It is disabled by default",
                            "type": "boolean"
                          },
                          "use_topology_for_load_balancing": {
                            "description": "If enabled, use the cluster topology for connection load balancing. It is disabled by default",
                            "type": "boolean"
                          }
                        }
                      },
                      "brokers": {
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "queue": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "jms_type": {
                        "description": "Auto detected by default",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "Text",
                          "Bytes"
                        ]
                      },
                      "remove_headers_pattern": {
                        "description": "Specifies regex for headers removing BEFORE sending to queue",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "reply": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "queue": {
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "timeout": {
                            "type": "integer"
                          }
                        },
                        "required": [
                          "queue",
                          "timeout"
                        ]
                      }
                    },
                    "required": [
                      "brokers",
                      "queue"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "ssl_enabled"
                          ],
                          "properties": {
                            "ssl_enabled": {
                              "const": false
                            }
                          }
                        },
                        "then": {
                          "required": []
                        },
                        "else": {
                          "required": [
                            "ssl_options"
                          ]
                        }
                      }
                    ]
                  }
                },
                "required": [
                  "to"
                ]
              },
              "optional": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "jvm_options": {
                    "description": "Additional JVM options for specified profile",
                    "type": "array",
                    "items": {
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  },
                  "input_charset": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "output_charset": {
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "log_level": {
                    "description": "Specifies log level. Default is ALL",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "ALL",
                      "DEBUG",
                      "INFO",
                      "WARN",
                      "ERROR",
                      "FATAL",
                      "OFF",
                      "TRACE"
                    ]
                  },
                  "event_hook": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "stage": {
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "client_request",
                            "client_response",
                            "upstream_request",
                            "upstream_response"
                          ]
                        }
                      },
                      "log_body": {
                        "type": "boolean"
                      },
                      "log_headers": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "stage",
                      "log_body",
                      "log_headers"
                    ]
                  },
                  "access_log": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "max_file_size": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "max_history": {
                        "type": "integer"
                      },
                      "total_size_cap": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    }
                  },
                  "error_log": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "max_file_size": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "max_history": {
                        "type": "integer"
                      },
                      "total_size_cap": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    }
                  },
                  "connection_pool": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "max_connections": {
                        "type": "integer"
                      },
                      "max_sessions_per_connection": {
                        "type": "integer"
                      },
                      "connection_idle_timeout": {
                        "type": "integer"
                      }
                    }
                  },
                  "thread_pool": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "scheduled_thread_pool_max_size": {
                        "type": "integer"
                      }
                    }
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        ".."
                      ],
                      "properties": {
                        "..": {
                          "type": "object",
                          "required": [
                            "sowa_artemis"
                          ],
                          "properties": {
                            "sowa_artemis": {
                              "pattern": ".+"
                            }
                          }
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "connection_pool"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "e"
                  ],
                  "properties": {
                    "e": {
                      "pattern": ".+"
                    }
                  }
                },
                "then": {
                  "required": [
                    "secrets"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "sowa_artemis"
                  ],
                  "properties": {
                    "sowa_artemis": {}
                  }
                },
                "else": {
                  "required": [
                    "artemis_sowa"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "artemis_sowa"
                  ],
                  "properties": {
                    "artemis_sowa": {}
                  }
                },
                "else": {
                  "required": [
                    "sowa_artemis"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "sowa_artemis"
                  ],
                  "properties": {
                    "sowa_artemis": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "artemis_sowa"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "artemis_sowa"
                  ],
                  "properties": {
                    "artemis_sowa": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "sowa_artemis"
                    ]
                  }
                }
              }
            ]
          }
        },
        "service_sowa_ipa": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "id": {
                "description": "Specifies the unique id for the service.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^[^.\\/\\\\()]+$"
              },
              "name": {
                "description": "Human readable Service identifier printed in log messages",
                "type": [
                  "number",
                  "string"
                ]
              },
              "profile_version": {
                "description": "Specifies profile version of this service",
                "type": [
                  "number",
                  "string"
                ]
              },
              "description": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "common": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "logging_path": {
                    "description": "Path to the directory where the log file will appear",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_appender_console_level": {
                    "description": "Logging level of console appender, default OFF",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_max_file_size": {
                    "description": "Max size of each log file, default 100MB",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_max_history": {
                    "description": "The optional maxHistory property controls the maximum number of archive files to keep, asynchronously deleting older files, default 30",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_total_size_cap": {
                    "description": "The optional totalSizeCap property controls the total size of all archive files, default 2GB",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_appender_async_file_queue_size": {
                    "description": "The queueSize property takes an integer (greater than zero) representing the number of logging events to retain for delivery to the remote receiver, default 500",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_package_org_springframework": {
                    "description": "Logging category of package, default INFO",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_package_com_ibm_mq": {
                    "description": "Logging category of package, default INFO",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_package_org_apache_camel": {
                    "description": "Logging category of package, default INFO",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_package_org_apache_kafka": {
                    "description": "Logging category for package org.apache.kafka, default INFO",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "logging_package_ru_sbt": {
                    "description": "Logging category of package, default INFO",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "passwords_path": {
                    "description": "Path to the password file",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "jvm_options": {
                    "description": "Additional JVM options for specified profile",
                    "type": "array",
                    "items": {
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  },
                  "threadpool_pool_size": {
                    "description": "Sets the core pool size (threads to keep minimum in pool)",
                    "type": "integer"
                  },
                  "threadpool_max_pool_size": {
                    "description": "Sets the maximum pool size",
                    "type": "integer"
                  },
                  "threadpool_max_queue_size": {
                    "description": "Sets the maximum number of tasks in the work queue. Use -1 or an unbounded queue",
                    "type": "integer"
                  },
                  "threadpool_max_keepalive_time": {
                    "description": "Sets the keep alive time for inactive threads in seconds",
                    "type": "integer"
                  },
                  "threadpool_rejected_policy": {
                    "description": "Sets the handler for tasks which cannot be executed by the thread pool",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "threadpool_allow_core_thread_timeout": {
                    "description": "Sets whether to allow core threads to timeout",
                    "type": "boolean"
                  }
                }
              },
              "http_mq": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "schema": {
                        "description": "Connection protocol",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "https",
                          "http"
                        ]
                      },
                      "port": {
                        "description": "Service port for input",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 65535
                      },
                      "ssl_keystore_path": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "max_content_length": {
                        "type": "integer"
                      }
                    },
                    "required": [
                      "schema",
                      "port"
                    ]
                  },
                  "to": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rq_jms_type": {
                          "description": "type of jms message",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_expiry": {
                          "description": "expiration time of mq message,ms",
                          "type": "integer"
                        },
                        "headers_whitelist": {
                          "description": "list of allowed headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "headers_blacklist": {
                          "description": "list of forbidden headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "route_id": {
                          "description": "Unique route id (also URN)",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_topic": {
                          "description": "Topic name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_topic_string": {
                          "description": "Topic string for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_queue": {
                          "description": "Queue name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_name": {
                          "description": "Manager name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_hostname": {
                          "description": "MQ connection host",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_port": {
                          "description": "MQ connection port",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "rq_channel": {
                          "description": "Connection channel",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_user_id": {
                          "description": "User name",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_ssl_cert_store": {
                          "description": "Path to SSL certificate store",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_ssl_cipher_suite": {
                          "description": "SSL cipher algorithm",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_queue": {
                          "description": "Queue name to get response",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_name": {
                          "description": "Manager name to get response",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_hostname": {
                          "description": "MQ connection host",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_port": {
                          "description": "MQ connection port",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "rs_channel": {
                          "description": "MQ connection channel",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_user_id": {
                          "description": "User name",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_ssl_cert_store": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_ssl_cipher_suite": {
                          "description": "SSL cipher algorithm",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_timeout": {
                          "description": "Response timeout",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9999999
                        }
                      },
                      "required": [
                        "route_id",
                        "rq_name",
                        "rq_hostname",
                        "rq_port",
                        "rq_channel"
                      ],
                      "allOf": [
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_queue"
                            ],
                            "properties": {
                              "rq_queue": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_topic"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_queue"
                            ],
                            "properties": {
                              "rq_queue": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_topic_string"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_topic"
                            ],
                            "properties": {
                              "rq_topic": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_queue"
                              ]
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              },
              "mq_http": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "queue": {
                        "description": "Queue name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "topic": {
                        "description": "Topic name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "topic_string": {
                        "description": "Topic string WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "subscription_name": {
                        "description": "Subscription name WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "alternate_user_id": {
                        "description": "Alternate used id WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "name": {
                        "description": "Manager name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "hostname": {
                        "description": "MQ connection host",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "port": {
                        "description": "MQ connection port",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 65535
                      },
                      "channel": {
                        "description": "MQ connection channel",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "qm_poll_delay": {
                        "description": "queue polling interval",
                        "type": "integer"
                      },
                      "user_id": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_cert_store": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "name",
                      "hostname",
                      "port",
                      "channel"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "topic"
                          ],
                          "properties": {
                            "topic": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "queue"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "queue"
                          ],
                          "properties": {
                            "queue": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "topic"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "to": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "route_id": {
                          "description": "Unique route id (also URN)",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "headers_whitelist": {
                          "description": "list of allowed headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "headers_blacklist": {
                          "description": "list of forbidden headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "schema": {
                          "description": "Connection protocol",
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "https",
                            "http"
                          ]
                        },
                        "host": {
                          "description": "Connection host for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "port": {
                          "description": "Connection port for output",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "urn": {
                          "description": "Host URN for output, begins with no /",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "ssl_keystore_path": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "route_id",
                        "schema",
                        "host",
                        "port",
                        "urn"
                      ]
                    }
                  }
                }
              },
              "usock_kafka": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "usock_socket_timeout": {
                        "description": "usocket timeout value",
                        "type": "integer"
                      },
                      "usock_busy_timeout": {
                        "description": "usocket timeout",
                        "type": "integer"
                      },
                      "usock_max_concurrent_connections": {
                        "description": "usocket max concurrent connections value",
                        "type": "integer"
                      },
                      "usock_send_response": {
                        "description": "confirm delivery by sending response to http request. True by default",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "usock_socket_timeout",
                      "usock_busy_timeout",
                      "usock_max_concurrent_connections"
                    ]
                  },
                  "to": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "headers_whitelist": {
                        "description": "list of allowed headers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "headers_blacklist": {
                        "description": "list of forbidden headers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "brokers": {
                        "description": "list of kafka brokers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "request_required_acks": {
                        "description": "acknowledgment parameter",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "-1",
                          "0",
                          "1",
                          "all"
                        ]
                      },
                      "batch_size": {
                        "description": "batch size in bytes",
                        "type": "integer"
                      },
                      "buffer_memory_size": {
                        "description": "batch buffer size in bytes",
                        "type": "integer"
                      },
                      "partition_key": {
                        "description": "partition to which the record will be sent",
                        "type": "integer"
                      },
                      "linger_ms": {
                        "description": "delay in message grouping before sending request",
                        "type": "integer"
                      },
                      "request_timeout_ms": {
                        "description": "timeout on getting request.required.acks in ms",
                        "type": "integer"
                      },
                      "enable_idempotence": {
                        "description": "enable idempotence",
                        "type": "boolean"
                      },
                      "max_request_size": {
                        "description": "maximum size of a request",
                        "type": "integer"
                      },
                      "max_block_ms": {
                        "description": "limit on the total time spent in fetching metadata in ms",
                        "type": "integer"
                      },
                      "retries": {
                        "description": "number of retries to resend message after getting an error",
                        "type": "integer"
                      },
                      "client_id": {
                        "description": "client id (tracking records, logging, setting quotas)",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "topic": {
                        "description": "topic to be recorded",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "key_serializer": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "String",
                          "ByteArray"
                        ]
                      },
                      "value_serializer": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "String",
                          "ByteArray"
                        ]
                      },
                      "ssl_keystore_path": {
                        "description": "Path to SSL certificate stores",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_truststore_path": {
                        "description": "Path to SSL truststore",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_endpoint_algorithm": {
                        "description": "Endpoint identification algorithm for SSL connection",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_brokers": {
                        "description": "(response) list of kafka brokers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "rs_client_id": {
                        "description": "(response) client id (tracking records, logging, setting quotas)",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_group_id": {
                        "description": "(response) consumer group id",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_fetch_max_bytes": {
                        "description": "(response) max fetch response in bytes",
                        "type": "integer"
                      },
                      "rs_fetch_min_bytes": {
                        "description": "(response) min fetch response in bytes",
                        "type": "integer"
                      },
                      "rs_fetch_wait_max_ms": {
                        "description": "(response) timeout on fetch request in ms (if there isn\u2019t sufficient data to immediately satisfy fetch_min_bytes)",
                        "type": "integer"
                      },
                      "rs_max_poll_records": {
                        "description": "(response) maximum number of records returned in a single call to poll()",
                        "type": "integer"
                      },
                      "rs_session_timeout_ms": {
                        "description": "(response) timeout used to detect failures when using Kafka\u2019s group management facilities.",
                        "type": "integer"
                      },
                      "rs_topic": {
                        "description": "(response) topic to subscribe to",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_timeout": {
                        "description": "(response) timeout",
                        "type": "integer"
                      },
                      "rs_ssl_keystore_path": {
                        "description": "(response) Path to SSL certificate store",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_truststore_path": {
                        "description": "(response) Path to SSL truststore",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_endpoint_algorithm": {
                        "description": "(response) Endpoint identification algorithm for SSL connection",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_provide_partition_index": {
                        "description": "(response) Expose kafka partition index from where message was consumed or not",
                        "type": "boolean"
                      },
                      "rs_create_consumer_backoff_max_attempts": {
                        "description": "(response) maximum number of attempts to create consumer before camel context is stopped. Default - 10",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "brokers",
                      "topic"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_client_id"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_group_id"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_fetch_max_bytes"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_fetch_min_bytes"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_fetch_wait_max_ms"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_max_poll_records"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_session_timeout_ms"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_topic"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_timeout"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_keystore_path"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_truststore_path"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_endpoint_algorithm"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_provide_partition_index"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_create_consumer_backoff_max_attempts"
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              },
              "kafka_usock": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "brokers": {
                        "description": "list of kafka brokers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "client_id": {
                        "description": "client id (tracking records, logging, setting quotas)",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "group_id": {
                        "description": "consumer group id",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "auto_commit": {
                        "description": "enables auto commit",
                        "type": "boolean"
                      },
                      "auto_commit_interval": {
                        "description": "interval of auto offset commit",
                        "type": "integer"
                      },
                      "auto_offset_reset": {
                        "description": "initial offset policy",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "latest",
                          "earliest",
                          "none"
                        ]
                      },
                      "fetch_max_bytes": {
                        "description": "max fetch response in bytes",
                        "type": "integer"
                      },
                      "fetch_min_bytes": {
                        "description": "min fetch response in bytes",
                        "type": "integer"
                      },
                      "fetch_wait_max_ms": {
                        "description": "timeout on fetch request in ms (if there isn\u2019t sufficient data to immediately satisfy fetch_min_bytes)",
                        "type": "integer"
                      },
                      "max_poll_records": {
                        "description": "maximum number of records returned in a single call to poll()",
                        "type": "integer"
                      },
                      "session_timeout_ms": {
                        "description": "timeout used to detect failures when using Kafka\u2019s group management facilities.",
                        "type": "integer"
                      },
                      "consumers_count": {
                        "description": "number of consumers that connect to kafka server",
                        "type": "integer"
                      },
                      "consumer_streams": {
                        "description": "consumers thread pool size",
                        "type": "integer"
                      },
                      "topics": {
                        "description": "list of topics to subscribe",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "key_deserializer": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "String",
                          "ByteArray"
                        ]
                      },
                      "value_deserializer": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "String",
                          "ByteArray"
                        ]
                      },
                      "ssl_keystore_path": {
                        "description": "Path to SSL certificate store",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_truststore_path": {
                        "description": "Path to SSL truststore",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_endpoint_algorithm": {
                        "description": "Endpoint identification algorithm for SSL connection",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "provide_partition_index": {
                        "description": "Expose kafka partition index from where message was consumed or not",
                        "type": "boolean"
                      },
                      "create_consumer_backoff_max_attempts": {
                        "description": "Maximum number of attempts to create consumer before camel context is stopped. Default - 10",
                        "type": "integer"
                      },
                      "rs_brokers": {
                        "description": "(response) list of kafka brokers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "rs_request_required_acks": {
                        "description": "(response) acknowledgment parameter",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "-1",
                          "0",
                          "1",
                          "all"
                        ]
                      },
                      "rs_batch_size": {
                        "description": "(response) batch size in bytes",
                        "type": "integer"
                      },
                      "rs_buffer_memory_size": {
                        "description": "(response) batch buffer size in bytes",
                        "type": "integer"
                      },
                      "rs_partition_key": {
                        "description": "(response) partition to which the record will be sent",
                        "type": "integer"
                      },
                      "rs_linger_ms": {
                        "description": "(response) delay in message grouping before sending request",
                        "type": "integer"
                      },
                      "rs_request_timeout_ms": {
                        "description": "(response) timeout on getting request.required.acks in ms",
                        "type": "integer"
                      },
                      "rs_enable_idempotence": {
                        "description": "(response) enable idempotence",
                        "type": "boolean"
                      },
                      "rs_max_request_size": {
                        "description": "(response) maximum size of a request",
                        "type": "integer"
                      },
                      "rs_max_block_ms": {
                        "description": "(response) limit on the total time spent in fetching metadata in ms",
                        "type": "integer"
                      },
                      "rs_retries": {
                        "description": "(response) number of retries to resend message after getting an error",
                        "type": "integer"
                      },
                      "rs_client_id": {
                        "description": "(response) client id (tracking records, logging, setting quotas)",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_topic": {
                        "description": "(response) topic to be recorded",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_keystore_path": {
                        "description": "(response) Path to SSL certificate stores",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_truststore_path": {
                        "description": "(response) Path to SSL truststore",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_endpoint_algorithm": {
                        "description": "(response) Endpoint identification algorithm for SSL connection",
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "brokers",
                      "group_id",
                      "auto_commit",
                      "topics"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "rs_topic"
                          ]
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_request_required_acks"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_batch_size"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_buffer_memory_size"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_partition_key"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_linger_ms"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_request_timeout_ms"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_enable_idempotence"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_max_request_size"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_max_block_ms"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_retries"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_client_id"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_topic"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_keystore_path"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_truststore_path"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rs_brokers"
                          ],
                          "properties": {
                            "rs_brokers": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rs_ssl_endpoint_algorithm"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "to": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "headers_whitelist": {
                        "description": "list of allowed headers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "headers_blacklist": {
                        "description": "list of forbidden headers",
                        "type": "array",
                        "items": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "service_id": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "service_type": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "content_type": {
                        "description": "Content-Type header value",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "wait_response": {
                        "description": "Wait for http response to confirm delivery. True by default",
                        "type": "boolean"
                      },
                      "url": {
                        "description": "Request url. Default is /",
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "service_id",
                      "service_type"
                    ]
                  }
                }
              },
              "usock_mq": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "usock_socket_timeout": {
                        "description": "usocket timeout value",
                        "type": "integer"
                      },
                      "usock_busy_timeout": {
                        "description": "usocket timeout",
                        "type": "integer"
                      },
                      "usock_max_concurrent_connections": {
                        "description": "usocket max concurrent connections value",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "usock_socket_timeout",
                      "usock_busy_timeout",
                      "usock_max_concurrent_connections"
                    ]
                  },
                  "to": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rq_queue_access_count": {
                          "description": "rq_queue_access_count",
                          "type": "integer"
                        },
                        "rq_managers_count": {
                          "description": "rq_managers_count",
                          "type": "integer"
                        },
                        "main_configuration_reconnect_period": {
                          "description": "main_configuration_reconnect_period",
                          "type": "integer"
                        },
                        "queue_access_timeout": {
                          "description": "queue_access_timeout",
                          "type": "integer"
                        },
                        "rq_jms_type": {
                          "description": "type of jms message",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_expiry": {
                          "description": "expiration time of mq message,ms",
                          "type": "integer"
                        },
                        "headers_whitelist": {
                          "description": "list of allowed headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "headers_blacklist": {
                          "description": "list of forbidden headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "route_id": {
                          "description": "Unique route id (also URN)",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_topic": {
                          "description": "Topic name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_topic_string": {
                          "description": "Topic string for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_queue": {
                          "description": "Queue name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_name": {
                          "description": "Manager name for output",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_hostname": {
                          "description": "MQ connection host",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_port": {
                          "description": "MQ connection port",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "rq_channel": {
                          "description": "Connection channel",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_user_id": {
                          "description": "User name",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_payload_charset": {
                          "description": "Payload Charset",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_ssl_cert_store": {
                          "description": "Path to SSL certificate store",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_ssl_cipher_suite": {
                          "description": "SSL cipher algorithm",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rq_pass_http_headers": {
                          "description": "Enable writing headers into rfh2 usr",
                          "type": "boolean"
                        },
                        "proxy_rfh2_folders": {
                          "description": "list of proxied mq folders, default - usr",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "rq_use_string_format_for_rfh2": {
                          "description": "Set string format for rfh2",
                          "type": "boolean"
                        },
                        "rq_mqgroup": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "rq_topic": {
                                "description": "Topic name for output",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_topic_string": {
                                "description": "Topic string for output",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_queue": {
                                "description": "Queue name for output",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_name": {
                                "description": "Manager name for output",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_hostname": {
                                "description": "MQ connection host",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_port": {
                                "description": "MQ connection port",
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 65535
                              },
                              "rq_channel": {
                                "description": "Connection channel",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_user_id": {
                                "description": "User name",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_payload_charset": {
                                "description": "Payload Charset",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_ssl_cert_store": {
                                "description": "Path to SSL certificate store",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rq_ssl_cipher_suite": {
                                "description": "SSL cipher algorithm",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              }
                            },
                            "required": [
                              "rq_name",
                              "rq_hostname",
                              "rq_port",
                              "rq_channel"
                            ],
                            "allOf": [
                              {
                                "if": {
                                  "type": "object",
                                  "required": [
                                    "rq_queue"
                                  ],
                                  "properties": {
                                    "rq_queue": {}
                                  }
                                },
                                "then": {
                                  "not": {
                                    "required": [
                                      "rq_topic"
                                    ]
                                  }
                                }
                              },
                              {
                                "if": {
                                  "type": "object",
                                  "required": [
                                    "rq_queue"
                                  ],
                                  "properties": {
                                    "rq_queue": {}
                                  }
                                },
                                "then": {
                                  "not": {
                                    "required": [
                                      "rq_topic_string"
                                    ]
                                  }
                                }
                              },
                              {
                                "if": {
                                  "type": "object",
                                  "required": [
                                    "rq_topic"
                                  ],
                                  "properties": {
                                    "rq_topic": {}
                                  }
                                },
                                "then": {
                                  "not": {
                                    "required": [
                                      "rq_queue"
                                    ]
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "rs_queue_access_count": {
                          "description": "rs_queue_access_count",
                          "type": "integer"
                        },
                        "rs_managers_count": {
                          "description": "rs_managers_count",
                          "type": "integer"
                        },
                        "rs_queue": {
                          "description": "Queue name to get response",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_name": {
                          "description": "Manager name to get response",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_hostname": {
                          "description": "MQ connection host",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_port": {
                          "description": "MQ connection port",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "rs_channel": {
                          "description": "MQ connection channel",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_user_id": {
                          "description": "User name",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_ssl_cert_store": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_ssl_cipher_suite": {
                          "description": "SSL cipher algorithm",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "rs_timeout": {
                          "description": "Response timeout",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9999999
                        },
                        "rs_mqgroup": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "rs_queue": {
                                "description": "Queue name to get response",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_name": {
                                "description": "Manager name to get response",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_hostname": {
                                "description": "MQ connection host",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_port": {
                                "description": "MQ connection port",
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 65535
                              },
                              "rs_channel": {
                                "description": "MQ connection channel",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_user_id": {
                                "description": "User name",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_ssl_cert_store": {
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_ssl_cipher_suite": {
                                "description": "SSL cipher algorithm",
                                "type": [
                                  "number",
                                  "string"
                                ]
                              },
                              "rs_timeout": {
                                "description": "Response timeout",
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9999999
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "route_id",
                        "rq_name",
                        "rq_hostname",
                        "rq_port",
                        "rq_channel"
                      ],
                      "allOf": [
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_queue"
                            ],
                            "properties": {
                              "rq_queue": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_topic"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_queue"
                            ],
                            "properties": {
                              "rq_queue": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_topic_string"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_topic"
                            ],
                            "properties": {
                              "rq_topic": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_queue"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "proxy_rfh2_folders"
                            ],
                            "properties": {
                              "proxy_rfh2_folders": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "rq_pass_http_headers"
                              ]
                            }
                          }
                        },
                        {
                          "if": {
                            "type": "object",
                            "required": [
                              "rq_pass_http_headers"
                            ],
                            "properties": {
                              "rq_pass_http_headers": {}
                            }
                          },
                          "then": {
                            "not": {
                              "required": [
                                "proxy_rfh2_folders"
                              ]
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              },
              "mq_usock": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "rq_queue": {
                        "description": "Queue name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_topic": {
                        "description": "Topic name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_topic_string": {
                        "description": "Topic string WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_topic_durability": {
                        "description": "Topic durability",
                        "type": "boolean"
                      },
                      "rq_subscription_name": {
                        "description": "Subscription name WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_rfh_routing_header": {
                        "description": "Name of header which contains service name",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_alternate_user_id": {
                        "description": "Alternate used id WMQ parameter name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_name": {
                        "description": "Manager name for input",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_hostname": {
                        "description": "MQ connection host",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_port": {
                        "description": "MQ connection port",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 65535
                      },
                      "rq_channel": {
                        "description": "MQ connection channel",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_reconnect_delay": {
                        "description": "interval between reconnect",
                        "type": "integer"
                      },
                      "rq_threads": {
                        "description": "number of consumer threads",
                        "type": "integer"
                      },
                      "rq_user_id": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_ssl_cert_store": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rq_reconnect_on_startup": {
                        "description": "enable reconnect on start",
                        "type": "boolean"
                      },
                      "rs_topic": {
                        "description": "Topic name to get response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_queue": {
                        "description": "Queue name to get response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_name": {
                        "description": "Manager name to get response",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_hostname": {
                        "description": "MQ connection host",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_port": {
                        "description": "MQ connection port",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 65535
                      },
                      "rs_channel": {
                        "description": "MQ connection channel",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_user_id": {
                        "description": "User name",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_payload_charset": {
                        "description": "Payload Charset",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_jms_type": {
                        "description": "JMS Type",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_expiry": {
                        "description": "expiration time of mq message,ms",
                        "type": "integer"
                      },
                      "rs_ssl_cert_store": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_ssl_cipher_suite": {
                        "description": "SSL cipher algorithm",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "rs_timeout": {
                        "description": "Response timeout",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9999999
                      }
                    },
                    "required": [
                      "rq_name",
                      "rq_hostname",
                      "rq_port",
                      "rq_channel"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rq_topic"
                          ],
                          "properties": {
                            "rq_topic": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "rq_queue"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rq_queue"
                          ],
                          "properties": {
                            "rq_queue": {}
                          }
                        },
                        "then": {
                          "not": {
                            "required": [
                              "rq_topic"
                            ]
                          }
                        }
                      },
                      {
                        "if": {
                          "type": "object",
                          "required": [
                            "rq_queue"
                          ],
                          "properties": {
                            "rq_queue": {
                              "pattern": ".+"
                            }
                          }
                        },
                        "else": {
                          "not": {
                            "required": [
                              "rq_threads"
                            ]
                          }
                        }
                      }
                    ]
                  },
                  "to": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "route_id": {
                          "description": "Unique route id (also URN)",
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "headers_whitelist": {
                          "description": "list of allowed headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "headers_blacklist": {
                          "description": "list of forbidden headers",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "proxy_rfh2_folders": {
                          "description": "list of proxied mq folders, default - usr",
                          "type": "array",
                          "items": {
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        },
                        "service_id": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "service_type": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "content_type": {
                          "description": "Content-Type header value",
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "route_id",
                        "service_id",
                        "service_type"
                      ]
                    }
                  }
                }
              }
            },
            "required": [
              "id"
            ]
          }
        }
      }
    }
  },
  "required": [
    "version",
    "profile",
    "system",
    "service"
  ],
  "definitions": {
    "log_type": {
      "description": "Specifies logging mode for sowa-nginx. Default mode - file.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "kafka": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "group": {
                "description": "Specifies which group of logs will use current settings.",
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "system",
                    "error",
                    "access"
                  ]
                }
              },
              "id": {
                "description": "Specifies client.id.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "broker": {
                "description": "Initial list of brokers as a host:port separated by comma.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "topic": {
                "description": "Specifies topic name.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^\\S*$"
              },
              "protocol": {
                "description": "Specifies connection protocol. Plaintext by default.",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "plaintext",
                  "ssl"
                ]
              },
              "certificate": {
                "description": "Specifies ssl.certificate.location",
                "type": [
                  "number",
                  "string"
                ]
              },
              "ca": {
                "description": "Specifies ssl.ca.location.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "key": {
                "description": "Specifies ssl.key.location.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "ciphers": {
                "description": "Specifies ssl.cipher.suites. Same as default ssl ciphers.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "compression_codec": {
                "description": "Compression codec to use for compressing message sets.",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "none",
                  "gzip",
                  "snappy",
                  "lz4",
                  "zstd"
                ]
              },
              "compression_level": {
                "description": "Compression level parameter for algorithm selected by configuration property compression.codec. Higher values will result in better compression at the cost of more CPU usage.",
                "type": "integer",
                "minimum": -1,
                "maximum": 12
              },
              "log_level": {
                "description": "Logging level (syslog(3) levels).",
                "type": [
                  "number",
                  "string"
                ]
              },
              "debug": {
                "description": "A comma-separated list of debug contexts to enable.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "max_messages": {
                "description": "Maximum number of messages batched in one MessageSet.",
                "type": "integer",
                "minimum": 1,
                "maximum": 1000000
              },
              "pattern_file": {
                "description": "Template file with custom log structure.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "escape": {
                "description": "Defines if you need to escape variables used in pattern file.",
                "type": "boolean"
              }
            },
            "required": [
              "broker",
              "topic"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "protocol"
                  ],
                  "properties": {
                    "protocol": {
                      "const": "ssl"
                    }
                  }
                },
                "then": {
                  "required": [
                    "certificate"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "protocol"
                  ],
                  "properties": {
                    "protocol": {
                      "const": "ssl"
                    }
                  }
                },
                "then": {
                  "required": [
                    "ca"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "protocol"
                  ],
                  "properties": {
                    "protocol": {
                      "const": "ssl"
                    }
                  }
                },
                "then": {
                  "required": [
                    "key"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "protocol"
                  ],
                  "properties": {
                    "protocol": {
                      "const": "ssl"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "ciphers"
                    ]
                  }
                }
              }
            ]
          }
        },
        "syslog": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "group": {
                "description": "Specifies which group of logs will use current settings.",
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "system",
                    "error",
                    "access"
                  ]
                }
              },
              "log_host": {
                "description": "Specifies host for remote logging to syslog.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "log_port": {
                "description": "Specifies port for remote logging to syslog. Default port - 514.",
                "type": [
                  "number",
                  "string"
                ]
              }
            }
          }
        },
        "file": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "group": {
                "description": "Specifies which group of logs will use current settings.",
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "system",
                    "error",
                    "access"
                  ]
                }
              }
            }
          }
        },
        "security": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "description": "Enables logging security security events (XSD, JSON, WSDL and other validators). False by default.",
              "type": "boolean"
            },
            "threads_count": {
              "description": "Specifies count of threads for thread pool, used for sending security events to syslog. Default is 16",
              "type": "integer"
            },
            "hostname": {
              "description": "Specifies hostname to dispaly in syslog event. Default is current hostname.",
              "type": [
                "number",
                "string"
              ]
            },
            "appname": {
              "description": "Specifies application name to dispaly in syslog event. Default is \"sowa-security\".",
              "type": [
                "number",
                "string"
              ]
            },
            "facility": {
              "description": "Specifies facility for syslog event. Default is USER.",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "KERN",
                "USER",
                "MAIL",
                "DAEMON",
                "AUTH",
                "SYSLOG",
                "LPR",
                "NEWS",
                "UUCP",
                "CRON",
                "AUTHPRIV",
                "FTP",
                "NTP",
                "AUDIT",
                "ALERT",
                "CLOCK",
                "LOCAL0",
                "LOCAL1",
                "LOCAL2",
                "LOCAL3",
                "LOCAL4",
                "LOCAL5",
                "LOCAL6",
                "LOCAL7"
              ]
            },
            "severity": {
              "description": "Specifies severity for syslog event. Default is INFORMATIONAL.",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "EMERGENCY",
                "ALERT",
                "CRITICAL",
                "ERROR",
                "WARNING",
                "NOTICE",
                "INFORMATIONAL",
                "DEBUG"
              ]
            },
            "target_host": {
              "description": "Specifies host to send syslog event. Default is \"127.0.0.1\"",
              "type": [
                "number",
                "string"
              ]
            },
            "target_port": {
              "description": "Specifies port to send syslog event. Default is 514.",
              "type": "integer",
              "minimum": 0,
              "maximum": 65535
            },
            "protocol": {
              "description": "Specifies used protocol to send syslog event. Default is UDP.",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "UDP",
                "TCP"
              ]
            },
            "msg_format": {
              "description": "Specifies message format to send syslog event. Default is RFC_3164",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "RFC_3164",
                "RFC_5424",
                "RFC_5425"
              ]
            }
          }
        }
      }
    },
    "healthcheck_dynamic": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "initial_state_param_file": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "manual_state_var_refresh_interval": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "endpoints": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "url": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "response": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "description": "Specifies an array of error codes by which templates will be generated.",
                    "type": "array",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "pattern_file": {
                    "description": "Specifies pattern file which will be used as response body.",
                    "type": "string",
                    "enum": [
                      "hc_pattern_default.json",
                      "hc_pattern_profile_default.json",
                      "hc_pattern_service_default.json"
                    ]
                  },
                  "custom_pattern_file": {
                    "description": "Specifies rule file which describes how to fill pattern file.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "rules_file": {
                    "description": "Specifies rule file which describes how to fill pattern file. Default - rules file from system resources.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "content_type": {
                    "description": "Specifies content type for response header. Default - none.",
                    "type": "string"
                  }
                }
              },
              "upstream_check_type": {
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "ANY_UPSTREAM_UP",
                  "ALL_UPSTREAM_UP",
                  "ANY_UPSTREAM_UP_OR_DRAIN",
                  "ALL_UPSTREAM_UP_OR_DRAIN"
                ]
              },
              "service_id": {
                "description": "Binded service id",
                "type": [
                  "number",
                  "string"
                ]
              },
              "upstream_filter": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "disable_access_log": {
                "description": "Disable writing access log, by default -false",
                "type": "boolean"
              },
              "disable_error_log": {
                "description": "Disable writing error log, default false",
                "type": "boolean"
              },
              "disable_gathering_stats": {
                "description": "Disable gathering stat, default false",
                "type": "boolean"
              }
            },
            "required": [
              "url",
              "response"
            ]
          }
        }
      }
    },
    "tracing": {
      "description": "Defines parameters of Opentelemetry Tracing",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "mode": {
          "description": "Enable or disable tracing at this level",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "on",
                "off",
                "var_based"
              ]
            },
            "var": {
              "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
              "type": [
                "number",
                "string"
              ]
            }
          },
          "allOf": [
            {
              "if": {
                "type": "object",
                "required": [
                  "enabled"
                ],
                "properties": {
                  "enabled": {
                    "const": "var_based"
                  }
                }
              },
              "then": {
                "required": [
                  "var"
                ]
              }
            }
          ]
        },
        "trace_context": {
          "description": "Specifies how to propagate traceparent/tracestate headers.   Default - ignore",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "extract",
            "inject",
            "propagate",
            "ignore"
          ]
        },
        "span_name": {
          "description": "Defines the name of span. By default - name of location, can be contain variables",
          "type": [
            "number",
            "string"
          ]
        },
        "span_attr": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "name of attribute",
                "type": [
                  "number",
                  "string"
                ]
              },
              "value": {
                "description": "value of attribute, can contain variables",
                "type": [
                  "number",
                  "string"
                ]
              }
            }
          }
        }
      }
    },
    "listen": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "address": {
            "description": "specifies ip/hostname on which the socket will listen.",
            "type": [
              "number",
              "string"
            ]
          },
          "port": {
            "description": "specifies port on which the socket will listen",
            "type": "integer",
            "minimum": 0,
            "maximum": 65535
          },
          "allow_http2": {
            "description": "Allow to accept http2 connection. Default - false",
            "type": "boolean"
          },
          "proxy_protocol": {
            "description": "Accept proxy protocol. Http requests will not be handler with this flag. Default - false",
            "type": "boolean"
          },
          "http2_only": {
            "description": "Allow to pass only http2 protocol connection. Default - off",
            "type": "string",
            "enum": [
              "on",
              "off"
            ]
          },
          "ssl": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "sspi": {
                "description": "Enables GOST TLS mode. Default id false.",
                "type": "boolean"
              },
              "client_verify_local_crl_only": {
                "description": "GOST mode. Specifies whether to check the certificate status locally (otherwise check online). Default is \"off\" (online check).",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "buffer_size": {
                "description": "GOST mode. Specifies payload length in TLS record (min 1024, max 16384). Default is 16384 bytes.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kK]{1})|([0-9]+)$"
              },
              "certificate": {
                "description": "specifies name of the certificate wich will be used. Certificate must be placed in \"resource\" directory.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "certificate_key": {
                "description": "specifies name of the certificate key wich will be used. Certificate key must be placed in \"resource\" directory.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "password_file": {
                "description": "specifies name of the password file with secret keys for \"certificate_key\". Password file must be placed in \"resource\" directory.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "client_certificate": {
                "description": "specifies name of the client certificate wich will be used. Client Certificate must be placed in \"resource\" directory.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "verify_client": {
                "description": "Enables verification of client certificates. Default - no",
                "type": "string"
              },
              "ocsp": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "enabled": {
                    "description": "Enables OCSP validation of the client certificate chain",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "depth": {
                    "description": "Specify depth of certificate validation.",
                    "type": "integer",
                    "minimum": 1
                  },
                  "mode": {
                    "description": "Specify mode. In strict mode request will be blocked in case unsuccessfull certiticate checking, in flexible mode - request will not be blocked. Strict by default.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "strict",
                      "flexible"
                    ]
                  },
                  "cache": {
                    "description": "Sets name and size of the cache that stores client certificates status for OCSP validation. The cache is shared between all worker processes",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "size": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                      },
                      "lifetime": {
                        "description": "Specifies cache lifetime. 3600 seconds by default",
                        "type": [
                          "number",
                          "string"
                        ],
                        "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                      }
                    },
                    "required": [
                      "name",
                      "size"
                    ]
                  },
                  "use_cert_responder": {
                    "description": "Defines use or not responder from certificate(if specified). False by default",
                    "type": "boolean"
                  },
                  "responder_timeout": {
                    "description": "Specifies responder timeout. 60000 milliseconds by default",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                  },
                  "responders": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "regex;(.+)": {
                        "type": "array",
                        "uniqueItems": true,
                        "items": {
                          "description": "Specifies the URL of the OCSP responder specified in the \u201cAuthority Information Access\u201d certificate extension for validation of client certificates. Only http:// OCSP responders are supported",
                          "type": [
                            "number",
                            "string"
                          ],
                          "pattern": "^(?:http:\\/\\/).+$"
                        }
                      }
                    }
                  }
                },
                "required": [
                  "enabled",
                  "depth"
                ]
              },
              "verify_dn_trusted_path": {
                "description": "Turn on verification of client dn. Use this file to match all regex dn from this file with dn of client certificate. In case verification error return \"verify_client_error_code\"(495 default)",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "verify_client_error_code": {
                "description": "Defines the response code if verification client certificate failed. Default value is \"495\"(400)",
                "type": "integer"
              },
              "verify_fingerprint_trusted_path": {
                "description": "Turn on verification of client fingerprint. Use this file to match all fingerprints from file with fingerprint of client certificate. In case verification error return \"verify_client_error_code\"(495 default)",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "verify_depth": {
                "description": "Sets the verification depth in the client certificates chain. Default - 1",
                "type": "integer"
              },
              "protocols": {
                "description": "specifies used ciphers. The default value is \"LSv1 TLSv1.1 TLSv1.2\" for RSA, and \"TLSv1\" for GOST",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string"
                }
              },
              "ciphers": {
                "description": "specifies group of ciphes. The default value is \"HIGH:!aNULL:!MD5\".",
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "prefix": {
                      "type": "string",
                      "enum": [
                        "!",
                        "+",
                        "-"
                      ]
                    },
                    "value": {
                      "type": "array",
                      "uniqueItems": true,
                      "items": {
                        "type": "string",
                        "enum": [
                          "DEFAULT",
                          "COMPLEMENTOFDEFAULT",
                          "ALL",
                          "COMPLEMENTOFALL",
                          "HIGH",
                          "MEDIUM",
                          "LOW",
                          "EXP",
                          "EXPORT",
                          "EXPORT40",
                          "EXPORT56",
                          "eNULL",
                          "NULL",
                          "aNULL",
                          "kRSA",
                          "RSA",
                          "kDHr",
                          "kDHd",
                          "kDH",
                          "kDHE",
                          "kEDH",
                          "DHE",
                          "EDH",
                          "ADH",
                          "DH",
                          "kECDHr",
                          "kECDHe",
                          "kECDH",
                          "kECDHE",
                          "kEECDH",
                          "ECDHE",
                          "EECDH",
                          "AECDH",
                          "ECDH",
                          "aRSA",
                          "aDSS",
                          "DSS",
                          "aDH",
                          "aECDH",
                          "aECDSA",
                          "ECDSA",
                          "kFZA",
                          "aFZA",
                          "eFZA",
                          "FZA",
                          "TLSv1.2",
                          "TLSv1",
                          "SSLv3",
                          "SSLv2",
                          "AES128",
                          "AES256",
                          "AES",
                          "AESGCM",
                          "CAMELLIA128",
                          "CAMELLIA256",
                          "CAMELLIA",
                          "3DES",
                          "DES",
                          "RC4",
                          "RC2",
                          "IDEA",
                          "SEED",
                          "MD5",
                          "SHA1",
                          "SHA",
                          "SHA256",
                          "SHA384",
                          "aGOST",
                          "aGOST01",
                          "aGOST94",
                          "kGOST",
                          "GOST94",
                          "GOST89MAC",
                          "PSK",
                          "SUITEB128",
                          "SUITEB128ONLY",
                          "SUITEB192",
                          "@STRENGTH",
                          "NULL-SHA256"
                        ]
                      }
                    }
                  },
                  "required": [
                    "value"
                  ]
                }
              },
              "ciphers_str": {
                "description": "specifies string of ciphers.",
                "type": "string"
              },
              "dhparam": {
                "description": "Specifies a file with DH parameters for DHE ciphers and enable usage of DHE ciphers.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "session_timeout": {
                "description": "specifies timeout of the ssl session. The default value is \"10m\"",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
              },
              "session_cache": {
                "description": "specifies cache size for ssl session. The default value evaluates automatically.",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "off",
                      "none",
                      "builtin",
                      "shared"
                    ]
                  },
                  "name": {
                    "type": "string"
                  },
                  "size": {
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                  }
                },
                "required": [
                  "type"
                ]
              },
              "reject_handshake": {
                "description": "specifies whether reject all SSL handshake with a different server name (strict SNI check). Default is false.",
                "type": "boolean"
              },
              "stapling": {
                "description": "enables or disables stapling of OCSP responses by the server. Default - false.",
                "type": "boolean"
              },
              "stapling_file": {
                "description": "when set, the stapled OCSP response will be taken from the specified file instead of querying the OCSP responder specified in the server certificate.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "stapling_responder": {
                "description": "overrides the URL of the OCSP responder specified in the \u201cAuthority Information Access\u201d certificate extension.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "stapling_verify": {
                "description": "enables or disables verification of OCSP responses by the server. For verification to work, the certificate of the server certificate issuer, the root certificate, and all intermediate certificates should be configured as trusted using the trusted_certificate directive. Default - false.",
                "type": "boolean"
              },
              "trusted_certificate": {
                "description": "specifies a file with trusted CA certificates in the PEM format used to verify client certificates and OCSP responses if stapling is enabled.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              }
            },
            "required": [
              "certificate"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "stapling_verify"
                  ],
                  "properties": {
                    "stapling_verify": {
                      "pattern": ".+"
                    }
                  }
                },
                "then": {
                  "required": [
                    "trusted_certificate"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "verify_dn_trusted_path"
                  ],
                  "properties": {
                    "verify_dn_trusted_path": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "verify_client_error_code"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "verify_fingerprint_trusted_path"
                  ],
                  "properties": {
                    "verify_fingerprint_trusted_path": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "verify_client_error_code"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "ciphers_str"
                  ],
                  "properties": {
                    "ciphers_str": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "ciphers"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "ciphers"
                  ],
                  "properties": {
                    "ciphers": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "ciphers_str"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "certificate"
                  ],
                  "properties": {
                    "certificate": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "stapling"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "stapling"
                  ],
                  "properties": {
                    "stapling": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "stapling_file"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "stapling"
                  ],
                  "properties": {
                    "stapling": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "stapling_responder"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "stapling"
                  ],
                  "properties": {
                    "stapling": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "stapling_verify"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "stapling_verify"
                  ],
                  "properties": {
                    "stapling_verify": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "trusted_certificate"
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    },
    "upstream_groups": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Specifies the unique id for the upstream group.",
            "type": [
              "number",
              "string"
            ],
            "pattern": "^[^.\\/\\\\()-]+$"
          },
          "ssl": {
            "description": "Specifies the type of connection - http or https. The default value is \"http\"",
            "type": "boolean"
          },
          "rewrite_uri": {
            "description": "Allows you to replace the URL which is going to the backend.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "from": {
                  "description": "Specify a regular expression that matches the URI.",
                  "type": "string"
                },
                "to": {
                  "description": "Specify string to replace URI that matches regular expression in parameter \"from\". You can use substitutions (like this $1, $2, etc.) according your regular expression.",
                  "type": "string"
                }
              },
              "required": [
                "from",
                "to"
              ]
            }
          },
          "bind_context": {
            "description": "Specifies bind context condition pattern. Used when \"use_upstream_groups=True\" in main proxy service.",
            "type": "string",
            "pattern": "^\\^.*\\$$"
          },
          "bind_condition": {
            "description": "Specifies a variable value that will be used as bind condition for this upstream group. If you use this parameter and you have several upstream groups, then one of them should be declared as default.",
            "type": "string"
          },
          "default": {
            "description": "Specifies that this upstream group is default. Used along with bind_condition.",
            "type": "boolean"
          },
          "zone": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "Define the name of upstream zone",
                "type": [
                  "number",
                  "string"
                ]
              },
              "size": {
                "description": "Define the size of upstream zone. Default 1m",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
              }
            },
            "required": [
              "name"
            ]
          },
          "keepalive_conn_count": {
            "description": "Defines maximum count of keepalive connections to upstream group per worker process.",
            "type": "integer"
          },
          "keepalive_requests": {
            "description": "Defines maximum count of requests per connection. 100 by default.",
            "type": "integer"
          },
          "keepalive_timeout": {
            "description": "Defines a timeout during which a connection will stay open. The default value is \"60s\".",
            "type": [
              "number",
              "string"
            ],
            "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
          },
          "health_check": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enabled": {
                "description": "Enable health_check module",
                "type": "boolean"
              },
              "check_interval": {
                "description": "Specifies check request's interval time in milliseconds.",
                "type": "integer"
              },
              "check_interval_down": {
                "description": "Specifies check request's interval time if peer is down.",
                "type": "integer"
              },
              "fail_count": {
                "description": "Specifies number of failed requests to mark server as down.",
                "type": "integer"
              },
              "rise_count": {
                "description": "Specifies number of successful requests to mark server as down.",
                "type": "integer"
              },
              "drain": {
                "description": "Specifies number of failed requests to mark server as drain.",
                "type": "integer"
              },
              "timeout": {
                "description": "Specifies check request's timeout.",
                "type": "integer"
              },
              "default_state": {
                "description": "Specifies default server state.",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "up",
                  "down"
                ]
              },
              "port": {
                "description": "Specifies port to send check requests.",
                "type": "integer"
              },
              "type": {
                "description": "Specifies check request type.",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "tcp",
                  "ssl_hello",
                  "http",
                  "mysql",
                  "ajp",
                  "fastcgi"
                ]
              },
              "http_send_method": {
                "description": "Specifies http method, default POST if http_send_req is defined, GET otherwise",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "GET",
                  "POST"
                ]
              },
              "http_send_url": {
                "description": "Specifies url for health check, default \"/\"",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^\\/.*$"
              },
              "http_send_version": {
                "description": "Specifies http version, default 1.0",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  1.0,
                  1.1,
                  2.0
                ]
              },
              "http_send_headers": {
                "description": "Specifies request header line. For example 'X-MyHeader foo'.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "http_send_req": {
                "description": "Specifies request body. (Deprecated - Specifies which req to send when check type is http)",
                "type": [
                  "number",
                  "string"
                ]
              },
              "fastcgi_param": {
                "description": "Specifies which headers to send with fastcgi req",
                "type": [
                  "number",
                  "string"
                ]
              },
              "http_status_alive": {
                "description": "Specifies which response code is ok",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_shm_size": {
                "description": "Specifies shared memory size for checking large groups of servers",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_response_body": {
                "description": "case insensitive search in resp body",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_response_body_pattern": {
                "description": "case insensitive search in resp body by pattern",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_response_body_drain": {
                "description": "case insensitive search in resp body",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_response_body_drain_pattern": {
                "description": "case insensitive search in resp body by pattern",
                "type": [
                  "number",
                  "string"
                ]
              },
              "check_keepalive_req": {
                "description": "Specifies the number of requests sent on a connection",
                "type": "integer"
              },
              "check_status_type": {
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "html",
                  "csv",
                  "json"
                ]
              },
              "ssl_options": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "ssl_use": {
                    "description": "Enables SSL. Default is 'off'.",
                    "type": "boolean"
                  },
                  "sspi": {
                    "description": "Enables GOST TLS mode. Default id false.",
                    "type": "boolean"
                  },
                  "ssl_verify_local_crl_only": {
                    "description": "GOST mode. Specifies whether to check the certificate status locally (otherwise check online). Default is \"off\" (online check).",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_verify_ignore_cn": {
                    "description": "GOST mode. Specifies whether to skip CN check. Default is \"off\" (do not skip).",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_session_reuse": {
                    "description": "Determines whether SSL sessions can be reused when working with the proxied server. Default is 'on'.",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_protocols": {
                    "description": "Enables the specified protocols for requests to a proxied HTTPS server. The default value is \"TLSv1 TLSv1.1 TLSv1.2\"",
                    "type": "array",
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "enum": [
                        "SSLv2",
                        "SSLv3",
                        "TLSv1",
                        "TLSv1.1",
                        "TLSv1.2",
                        "TLSv1.3"
                      ]
                    }
                  },
                  "ssl_ciphers": {
                    "description": "Specifies the enabled ciphers for requests to a proxied HTTPS server. The default value is \"HIGH:!aNULL:!MD5\".",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "prefix": {
                          "type": "string",
                          "enum": [
                            "!",
                            "+",
                            "-"
                          ]
                        },
                        "value": {
                          "type": "array",
                          "uniqueItems": true,
                          "items": {
                            "type": "string",
                            "enum": [
                              "DEFAULT",
                              "COMPLEMENTOFDEFAULT",
                              "ALL",
                              "COMPLEMENTOFALL",
                              "HIGH",
                              "MEDIUM",
                              "LOW",
                              "EXP",
                              "EXPORT",
                              "EXPORT40",
                              "EXPORT56",
                              "eNULL",
                              "NULL",
                              "aNULL",
                              "kRSA",
                              "RSA",
                              "kDHr",
                              "kDHd",
                              "kDH",
                              "kDHE",
                              "kEDH",
                              "DHE",
                              "EDH",
                              "ADH",
                              "DH",
                              "kECDHr",
                              "kECDHe",
                              "kECDH",
                              "kECDHE",
                              "kEECDH",
                              "ECDHE",
                              "EECDH",
                              "AECDH",
                              "ECDH",
                              "aRSA",
                              "aDSS",
                              "DSS",
                              "aDH",
                              "aECDH",
                              "aECDSA",
                              "ECDSA",
                              "kFZA",
                              "aFZA",
                              "eFZA",
                              "FZA",
                              "TLSv1.2",
                              "TLSv1",
                              "SSLv3",
                              "SSLv2",
                              "AES128",
                              "AES256",
                              "AES",
                              "AESGCM",
                              "CAMELLIA128",
                              "CAMELLIA256",
                              "CAMELLIA",
                              "3DES",
                              "DES",
                              "RC4",
                              "RC2",
                              "IDEA",
                              "SEED",
                              "MD5",
                              "SHA1",
                              "SHA",
                              "SHA256",
                              "SHA384",
                              "aGOST",
                              "aGOST01",
                              "aGOST94",
                              "kGOST",
                              "GOST94",
                              "GOST89MAC",
                              "PSK",
                              "SUITEB128",
                              "SUITEB128ONLY",
                              "SUITEB192",
                              "@STRENGTH",
                              "NULL-SHA256"
                            ]
                          }
                        }
                      },
                      "required": [
                        "value"
                      ]
                    }
                  },
                  "ssl_ciphers_str": {
                    "description": "Specifies the string of enabled ciphers for requests to a proxied HTTPS server.",
                    "type": "string"
                  },
                  "ssl_name": {
                    "description": "Allows overriding the server name used to verify the certificate of the proxied HTTPS server and to be passed through SNI when establishing a connection with the proxied HTTPS server. There is no default value.",
                    "type": "string"
                  },
                  "ssl_name_upstream_host": {
                    "description": "Enables using upstream host to verify the certificate of the proxied HTTPS server when ssl_name isn't specified. Default \"on\".",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_name_verify_off": {
                    "description": "Enable or disable ssl_name verifying",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_server_name": {
                    "description": "Enables or disables passing of the server name through TLS Server Name Indication extension (SNI, RFC 6066) when establishing a connection with the proxied HTTPS server. Default is \"off\".",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_verify": {
                    "description": "Enables or disables verification of the proxied HTTPS server certificate. Default is \"off\"",
                    "type": "string",
                    "enum": [
                      "on",
                      "off"
                    ]
                  },
                  "ssl_verify_depth": {
                    "description": "Sets the verification depth in the proxied HTTPS server certificates chain. Default is \"1\".",
                    "type": "integer",
                    "minimum": 0
                  },
                  "ssl_trusted_certificate": {
                    "description": "Specifies a file with trusted CA certificates in the PEM format used to verify the certificate of the proxied HTTPS server. There is no default value.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_dn_verify_trusted_path": {
                    "description": "Specifies the file with allowed regex of client certificate dn",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_fingerprint_verify_trusted_path": {
                    "description": "Specifies the file with allowed regex of client certificate dn",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_verify_error_code": {
                    "description": "Defines the response code if verification upstream certificate failed.",
                    "type": "integer"
                  },
                  "ssl_crl": {
                    "description": "Specifies a file with revoked certificates (CRL) in the PEM format used to verify the certificate of the proxied HTTPS server. There is no default value.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_certificate": {
                    "description": "Specifies a file with the certificate in the PEM format used for authentication to a proxied HTTPS server. There is no default value.",
                    "type": [
                      "number",
                      "string"
                    ],
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_certificate_key": {
                    "description": "Specifies a file with the secret key in the PEM format used for authentication to a proxied HTTPS server. There is no default value.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "ssl_password_file": {
                    "description": "Specifies a file with passphrases for secret keys where each passphrase is specified on a separate line. There is no default value.",
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_session_reuse"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_protocols"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_server_name"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_verify"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_verify_depth"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_dn_verify_trusted_path"
                      ],
                      "properties": {
                        "ssl_dn_verify_trusted_path": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_verify_error_code"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_fingerprint_verify_trusted_path"
                      ],
                      "properties": {
                        "ssl_fingerprint_verify_trusted_path": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_verify_error_code"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_crl"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_certificate"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_certificate_key"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "ssl_use"
                      ],
                      "properties": {
                        "ssl_use": {
                          "pattern": ".+"
                        }
                      }
                    },
                    "else": {
                      "not": {
                        "required": [
                          "ssl_password_file"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "required": [
              "enabled"
            ]
          },
          "load_balancing": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "type": {
                "description": "Specifies a load balancing type",
                "type": "string",
                "enum": [
                  "hash",
                  "ip_hash",
                  "sticky",
                  "persistence",
                  "least_conn",
                  "random"
                ]
              },
              "random_two": {
                "description": "Selects only two servers by their weights before using least connections balancing.",
                "type": "boolean"
              },
              "hash_consistent": {
                "description": "If the consistent parameter is specified the ketama consistent hashing method will be used instead",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "hash_key": {
                "description": "The client-server mapping is based on the hashed key value",
                "type": "string"
              },
              "name": {
                "description": "The name of the cookies used to track the persistant upstream srv. The default value is route",
                "type": "string"
              },
              "domain": {
                "description": "The domain in which the cookie will be valid. By default browser handle this.",
                "type": "string"
              },
              "path": {
                "description": "The path in which the cookie will be valid. By default browser handle this.",
                "type": "string"
              },
              "expires": {
                "description": "The validity duration of the cookie. By default it's a session cookie",
                "type": "string",
                "pattern": "^([0-9]+[smhdwMy]{1})$"
              },
              "hash": {
                "description": "The hash mechanism to encode upstream server. It can't be used with hmac. Default value is md5",
                "type": "string",
                "enum": [
                  "md5",
                  "sha1",
                  "index"
                ]
              },
              "hmac": {
                "description": "the HMAC hash mechanism to encode upstream server. It's like the hash mechanism but it uses hmac_key to secure the hashing. It can't be used with hash.",
                "type": "string",
                "enum": [
                  "md5",
                  "sha1"
                ]
              },
              "hmac_key": {
                "description": "the key to use with hmac. It's mandatory when hmac is set",
                "type": "string"
              },
              "no_fallback": {
                "description": "when this flag is set, nginx will return a 502 (Bad Gateway or Proxy Error) if a request comes with a cookie and the corresponding backend is unavailable",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "secure": {
                "description": "Enable secure cookies. Transferred only via https. The default value is false",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "httponly": {
                "description": "Enable cookies not to be leaked via js. The default value is false",
                "type": "string",
                "enum": [
                  "on",
                  "off"
                ]
              },
              "persistence_type": {
                "description": "Specifies persistence type.",
                "type": "string",
                "enum": [
                  "insert_cookie",
                  "session_based"
                ]
              },
              "monitor_cookie": {
                "type": "string"
              },
              "always_use_sticky": {
                "type": "boolean"
              },
              "timeout": {
                "description": "Specifies cookie expire time.",
                "type": "integer"
              },
              "reset_uri": {
                "description": "Requesting this uri will result in resetting session cookie.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^\\/.*$"
              },
              "reset_uri_pattern": {
                "description": "Requesting uri which corresponds this regex pattern will result in resetting session cookie.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "reset_cookie": {
                "description": "If active and monitor_cookie is not in request, session cookie will be reset. Default is \"False\".",
                "type": "boolean"
              },
              "max_age": {
                "description": "Sets Max-Age flag for sticky session cookie. Number of seconds until the cookie expires. A zero or negative number will expire the cookie immediately.",
                "type": "integer"
              },
              "tail": {
                "description": "Specifies cookie tail. Search value for specified key within response headers by default. Possible to specify variables also.",
                "type": [
                  "number",
                  "string"
                ]
              },
              "tail_delimiter": {
                "description": "Specifies cookie tail delimiter. Allowed only one character.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^.{1}$"
              }
            },
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "tail"
                  ],
                  "properties": {
                    "tail": {
                      "pattern": ".+"
                    }
                  }
                },
                "then": {
                  "required": [
                    "tail_delimiter"
                  ]
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "tail"
                  ],
                  "properties": {
                    "tail": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "tail_delimiter"
                    ]
                  }
                }
              }
            ]
          },
          "servers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "service_id": {
                  "description": "specifies service id",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "service_type": {
                  "description": "specifies service type",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "server": {
                  "description": "specifies server name or IP address with port. The default port is 80.",
                  "type": "string"
                },
                "weight": {
                  "description": "specifies weight of the server. The default value is \"1\".",
                  "type": "integer"
                },
                "max_conns": {
                  "description": "specifies the maximum number of the concurrent connections to the upstream. The default value is \"0\" that means there are no limits.",
                  "type": "integer"
                },
                "max_fails": {
                  "description": "specifies the maximum number of failures during the \"fail_timeout\" after which this server will be marked as unreachable. The default value is \"1\".",
                  "type": "integer"
                },
                "fail_timeout": {
                  "description": "specifies the time during which failures should occur after which this server will be marked as unreachable. The default value is \"10s\".",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
                },
                "backup": {
                  "description": "marks this server as a backup. If all basic servers are unavailable all request will be redirected to this one.",
                  "type": "boolean"
                },
                "slow_start": {
                  "description": "Sets the time during which the server will recover its weight from zero to a nominal value, when unhealthy server becomes healthy. Applicable when more than one peer is specified.",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^[0-9]+[smhdwMy]{1}$"
                },
                "hash": {
                  "description": "Specifies a hash that will be associated with node during sticky balancing choice",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "enable_dp_hash": {
                  "description": "Enables generating hash from \"IP:port\" by internal DP algorithm",
                  "type": "boolean"
                }
              },
              "allOf": [
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "server"
                    ],
                    "properties": {
                      "server": {}
                    }
                  },
                  "else": {
                    "required": [
                      "service_id"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "service_id"
                    ],
                    "properties": {
                      "service_id": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "service_type"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "service_id"
                    ],
                    "properties": {
                      "service_id": {}
                    }
                  },
                  "else": {
                    "required": [
                      "server"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "server"
                    ],
                    "properties": {
                      "server": {}
                    }
                  },
                  "then": {
                    "not": {
                      "required": [
                        "service_id"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "service_id"
                    ],
                    "properties": {
                      "service_id": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "service_type"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "service_id"
                    ],
                    "properties": {
                      "service_id": {}
                    }
                  },
                  "then": {
                    "not": {
                      "required": [
                        "server"
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        "required": [
          "id",
          "servers"
        ],
        "allOf": [
          {
            "if": {
              "type": "object",
              "required": [
                "bind_condition"
              ],
              "properties": {
                "bind_condition": {
                  "pattern": ".+"
                }
              }
            },
            "else": {
              "not": {
                "required": [
                  "default"
                ]
              }
            }
          }
        ]
      }
    },
    "opentelemetry": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "tracing": {
          "description": "Defines parameters of Opentelemetry Tracing",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mode": {
              "description": "Enable or disable tracing at this level",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "on",
                    "off",
                    "var_based"
                  ]
                },
                "var": {
                  "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "allOf": [
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "enabled"
                    ],
                    "properties": {
                      "enabled": {
                        "const": "var_based"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "var"
                    ]
                  }
                }
              ]
            },
            "trace_context": {
              "description": "Specifies how to propagate traceparent/tracestate headers.   Default - ignore",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "extract",
                "inject",
                "propagate",
                "ignore"
              ]
            },
            "span_name": {
              "description": "Defines the name of span. By default - name of location, can be contain variables",
              "type": [
                "number",
                "string"
              ]
            },
            "span_attr": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "name of attribute",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "value": {
                    "description": "value of attribute, can contain variables",
                    "type": [
                      "number",
                      "string"
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              ""
            ],
            "properties": {
              "": {
                "properties": {
                  "system": {
                    "type": "object",
                    "required": [
                      "system"
                    ],
                    "properties": {
                      "system": {},
                      "optional": {
                        "type": "object",
                        "required": [
                          "opentelemetry"
                        ],
                        "properties": {
                          "opentelemetry": {
                            "pattern": ".+"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "tracing"
              ]
            }
          }
        }
      ]
    },
    "security_headers": {
      "description": "Specifies security response headers.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "referrer_policy": {
          "description": "Specifies which referrer information, sent in the Referer header, should be included with requests made.",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "no-referrer",
            "no-referrer-when-downgrade",
            "origin",
            "origin-when-cross-origin",
            "same-origin",
            "strict-origin",
            "strict-origin-when-cross-origin",
            "unsafe-url"
          ]
        },
        "x_frame_options": {
          "description": "Specifies whether or not a browser should be allowed to render a page in a frame",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "DENY",
            "SAMEORIGIN"
          ]
        },
        "xss_protection": {
          "description": "Use headers for additional xss protection.",
          "type": "boolean"
        },
        "forced_ssl": {
          "description": "Forces SSL connetion.",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "max_age": {
              "description": "Specifies time, in seconds, that the browser should remember that a site is only to be accessed using HTTPS.",
              "type": "integer"
            }
          },
          "required": [
            "max_age"
          ]
        },
        "content_security": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "block_mixed_content": {
              "description": "only SSL content allowed.",
              "type": "boolean"
            },
            "connect_src": {
              "description": "Restricts the URLs which can be loaded using script interfaces.",
              "type": [
                "number",
                "string"
              ]
            },
            "font_src": {
              "description": "Specifies valid sources for fonts loaded using @font-face.",
              "type": [
                "number",
                "string"
              ]
            },
            "script_src": {
              "description": "Specifies valid sources for JavaScript.",
              "type": [
                "number",
                "string"
              ]
            },
            "worker_src": {
              "description": "Specifies valid sources for Worker, SharedWorker, or ServiceWorker scripts.",
              "type": [
                "number",
                "string"
              ]
            },
            "style_src": {
              "description": "Specifies valid sources for stylesheets.",
              "type": [
                "number",
                "string"
              ]
            },
            "frame_ancestors": {
              "description": "Specifies valid parents that may embed a page using <frame>, <iframe>, <object>, <embed>, or <applet>.",
              "type": [
                "number",
                "string"
              ]
            }
          }
        }
      }
    },
    "limit_req": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Enable limit req module",
          "type": "boolean"
        },
        "rate": {
          "description": "The count of requests which will be handled per time interval.",
          "type": "number"
        },
        "rate_interval": {
          "description": "Time interval for request rate measuring. Specify 's' for second and 'm' for minute. By default is 's'. Hint - if you need '0.5r/s', you can specify '30r/m'.",
          "type": "string",
          "enum": [
            "s",
            "m"
          ]
        },
        "size": {
          "description": "Shared memory zone used to store the state of each IP address and how often it has accessed a request limited URL. The default value is \"10m\"",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})$"
        },
        "burst": {
          "description": "Defines how many requests a client can make in excess of the rate. The default value is \"0\"",
          "type": "integer"
        },
        "cpu_limit": {
          "description": "Defines maximum CPU load percentage. After exceeding limit, all incoming connections will be declined.",
          "type": "integer"
        },
        "mem_limit": {
          "description": "Defines maximum memory load percentage. After exceeding limit, all incoming connections will be declined.",
          "type": "integer"
        },
        "target": {
          "description": "Specifies a target for check. You can use predefined values 'src_ip' and 'service' or any nginx variables using prefix '$' (e.g. $server_port).",
          "type": "string",
          "pattern": "^((src_ip)|(service)|(request_method)|(\\$[a-z_]+))$"
        },
        "policy_type": {
          "description": "Specifies the policy type. If 'allow' then action will be executed for ip in 'exclude_ip'. If 'forbid' then action will be executed for all ip, except ip in 'exclude_ip'. Default 'forbid'",
          "type": "string",
          "enum": [
            "allow",
            "forbid"
          ]
        },
        "exclude_ip": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(/\\d{1,2}){0,1}$"
          }
        },
        "nodelay": {
          "description": "default false",
          "type": "boolean"
        },
        "forbid_action": {
          "description": "Specifies location on which will be redirected",
          "type": "string"
        },
        "status_code": {
          "description": "Defines the response code if the limit is exceeded. Default value is \"413\".",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^\\d{3}$"
        },
        "dry_run": {
          "description": "Enables dry run mode. Default is off.",
          "type": "boolean"
        },
        "condition": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "condition_var": {
              "type": "string",
              "pattern": "^\\$.+$"
            },
            "condition_value": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "ifall",
                "ifany",
                "if"
              ]
            },
            "expression": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "variable": {
                    "type": "string",
                    "pattern": "^\\$.+$"
                  },
                  "operation": {
                    "type": "string",
                    "enum": [
                      ">=",
                      "=",
                      ">",
                      "<",
                      "<=",
                      "!=",
                      "~",
                      "~*",
                      "!~",
                      "!~*",
                      "-f",
                      "!-f",
                      "-d",
                      "!-d",
                      "-e",
                      "!-e",
                      "-x",
                      "!-x"
                    ]
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "variable"
                ]
              }
            }
          },
          "required": [
            "condition_var",
            "condition_value",
            "type"
          ]
        }
      },
      "required": [
        "enabled",
        "target"
      ]
    },
    "limit_requests": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Enable limit req module",
          "type": "boolean"
        },
        "status_code": {
          "description": "Defines the response code if the limit is exceeded. Default value is \"413\".",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^\\d{3}$"
        },
        "dry_run": {
          "description": "Enables dry run mode. Default is off.",
          "type": "boolean"
        },
        "limit_req": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "rate": {
                "description": "The count of requests which will be handled per time interval.",
                "type": "number"
              },
              "rate_interval": {
                "description": "Time interval for request rate measuring. Specify 's' for second and 'm' for minute. By default is 's'. Hint - if you need '0.5r/s', you can specify '30r/m'.",
                "type": "string",
                "enum": [
                  "s",
                  "m"
                ]
              },
              "size": {
                "description": "Shared memory zone used to store the state of each IP address and how often it has accessed a request limited URL. The default value is \"10m\"",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kKmM]{1})$"
              },
              "burst": {
                "description": "Defines how many requests a client can make in excess of the rate. The default value is \"0\"",
                "type": "integer"
              },
              "cpu_limit": {
                "description": "Defines maximum CPU load percentage. After exceeding limit, all incoming connections will be declined.",
                "type": "integer"
              },
              "mem_limit": {
                "description": "Defines maximum memory load percentage. After exceeding limit, all incoming connections will be declined.",
                "type": "integer"
              },
              "target": {
                "description": "Specifies a target for check. You can use predefined values 'src_ip' and 'service' or any nginx variables using prefix '$' (e.g. $server_port).",
                "type": "string",
                "pattern": "^((src_ip)|(service)|(request_method)|(\\$[a-z_]+))$"
              },
              "policy_type": {
                "description": "Specifies the policy type. If 'allow' then action will be executed for ip in 'exclude_ip'. If 'forbid' then action will be executed for all ip, except ip in 'exclude_ip'. Default 'forbid'",
                "type": "string",
                "enum": [
                  "allow",
                  "forbid"
                ]
              },
              "exclude_ip": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(/\\d{1,2}){0,1}$"
                }
              },
              "nodelay": {
                "description": "default false",
                "type": "boolean"
              },
              "forbid_action": {
                "description": "Specifies location on which will be redirected",
                "type": "string"
              },
              "condition": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "condition_var": {
                    "type": "string",
                    "pattern": "^\\$.+$"
                  },
                  "condition_value": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "ifall",
                      "ifany",
                      "if"
                    ]
                  },
                  "expression": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "variable": {
                          "type": "string",
                          "pattern": "^\\$.+$"
                        },
                        "operation": {
                          "type": "string",
                          "enum": [
                            ">=",
                            "=",
                            ">",
                            "<",
                            "<=",
                            "!=",
                            "~",
                            "~*",
                            "!~",
                            "!~*",
                            "-f",
                            "!-f",
                            "-d",
                            "!-d",
                            "-e",
                            "!-e",
                            "-x",
                            "!-x"
                          ]
                        },
                        "value": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "variable"
                      ]
                    }
                  }
                },
                "required": [
                  "condition_var",
                  "condition_value",
                  "type"
                ]
              }
            },
            "required": [
              "target"
            ]
          }
        }
      },
      "required": [
        "enabled",
        "limit_req"
      ]
    },
    "robot_mitigation": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Enables defense against HTTP robot attacks.",
          "type": "boolean"
        },
        "blacklist": {
          "description": "Means if a client has failed for N times, this client will be added into blacklist. Default 5",
          "type": "integer"
        },
        "mode": {
          "description": "Robot Mitigation will return a user-defined js code or predefined flash file to the client. Default js",
          "type": "string",
          "enum": [
            "js",
            "swf"
          ]
        },
        "timeout": {
          "description": "Sets the time for the next challenge to be initiated, in seconds. Default 60",
          "type": "integer"
        },
        "ajax": {
          "description": "This directive sets if challenge for ajax requests based on XMLRequest header. Default off",
          "type": "boolean"
        },
        "policy_type": {
          "description": "Specifies the policy type. If 'allow' then action will be executed for ip in 'exclude_ip'. If 'forbid' then action will be executed for all ip, except ip in 'exclude_ip'. Default 'forbid'",
          "type": "string",
          "enum": [
            "allow",
            "forbid"
          ]
        },
        "exclude_ip": {
          "description": "Specifies the IP addresses, which will be excluded from whitelist",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(/\\d{1,2}){0,1}$"
          }
        },
        "ua_whitelist": {
          "description": "This directives specifies the User-Agent whitelist.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "enabled"
      ]
    },
    "cookie_poisoning": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Enables monitoring the Set-Cookies headers and the cookie values in the response from server side.",
          "type": "boolean"
        },
        "action": {
          "description": "This directive specifies the action when cookie values are detected changed.  Default block",
          "type": "string",
          "pattern": "^block|pass|remove|blacklist,[0-9]+$"
        },
        "log": {
          "type": "boolean"
        },
        "policy_type": {
          "description": "Specifies the policy type. If 'allow' then action will be executed for ip in 'exclude_ip'. If 'forbid' then action will be executed for all ip, except ip in 'exclude_ip'. Default 'forbid'",
          "type": "string",
          "enum": [
            "allow",
            "forbid"
          ]
        },
        "exclude_ip": {
          "description": "Specifies the IP addresses, which will be excluded from whitelist",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(/\\d{1,2}){0,1}$"
          }
        },
        "include_ip": {
          "description": "Specifies the IP addresses, which will be included to whitelist",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(/\\d{1,2}){0,1}$"
          }
        },
        "ua_whitelist": {
          "description": "This directives specifies the User-Agent whitelist.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "enabled"
      ]
    },
    "gzip": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Enables response compression by gzip method.",
          "type": "boolean"
        },
        "optional": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "level": {
              "description": "Sets the compression level. The default value is \"5\".",
              "type": "integer",
              "enum": [
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9
              ]
            },
            "types": {
              "description": "Sets the mime-types for which compression is applied. The default value is \"text/html\".",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "buffer_count": {
              "description": "Sets the count of buffers in wich the response will be placed. The default value is \"32\".",
              "type": "integer"
            },
            "buffer_size": {
              "description": "Sets the buffer size in wich the response will be placed. The default value is memory page size.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
            },
            "exclude": {
              "description": "Sets the list of the User-Agent specified by regular expressions for which compression will be disabled.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "min_length": {
              "description": "Sets the minimum length of the response for which compression will be applied. The default value is \"20\".",
              "type": "integer"
            },
            "http_version": {
              "description": "Specifies the minimum version for the request necessary for the response compression. The default value is \"1.0\"",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                1.0,
                1.1
              ]
            },
            "proxied": {
              "description": "Enables or disables gzipping of responses for proxied requests depending on the request and response.",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                false,
                "expired",
                "no-cache",
                "no-store",
                "private",
                "no_last_modified",
                "no_etag",
                "auth",
                "any"
              ]
            },
            "vary": {
              "description": "Enables or disables inserting the 'Vary: Accept-Encoding' response header field if the directives gzip, gzip_static, or gunzip are active.",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                true,
                false
              ]
            },
            "static": {
              "description": "Enables or disables checking the existence of precompressed files. With the \"always\" value, gzipped file is used in all cases, without checking if the client supports it. Default - off",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                true,
                false,
                "always"
              ]
            }
          }
        }
      },
      "required": [
        "enabled"
      ]
    },
    "event_hook": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Allows to enable/disable EVH for service. Default value is \"True\".",
          "type": "boolean"
        },
        "stage": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "Specifies the stage for log.",
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "client_request",
                  "client_response",
                  "upstream_request",
                  "upstream_response"
                ]
              },
              "log_file": {
                "description": "Specifies the log file name. Default is /sowalogs/<profile name>/services/service_http_proxy/service_http_proxy_<id>/<stage>/$request_id.log",
                "type": "string"
              },
              "pattern_file": {
                "description": "Specifies the pattern file.",
                "type": "string"
              },
              "max_size": {
                "description": "Specifies the threshold after exceeding which the event will bw written to temp file in directory specified by \"temp_path\". Default is not specified.",
                "type": [
                  "number",
                  "string"
                ],
                "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
              }
            },
            "required": [
              "name"
            ]
          }
        },
        "logger_service": {
          "description": "Specifies service type to handle event.",
          "type": [
            "number",
            "string"
          ]
        },
        "logger_service_type": {
          "description": "Specifies when loging making synchronous or asynchronous",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "sync",
            "async"
          ]
        },
        "logger_id": {
          "description": "Specifies service id to handle event.",
          "type": [
            "number",
            "string"
          ]
        },
        "logger_read_timeout": {
          "description": "Specifies logger read timeout. Default 1s",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "logger_send_timeout": {
          "description": "Specifies logger send timeout. Default 1s",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "logger_connect_timeout": {
          "description": "Specifies logger connect timeout. Default 1s",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "logger_client_body_timeout": {
          "description": "Specifies logger client body timeout. Default 1s",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(([0-9]+(ms){0,1})|([0-9]+[smhdwMy]{1}))$"
        },
        "logger_buffer_size": {
          "description": "Specifies logger buffer size for writing to service timeout. Default 16k;",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "logger_max_memory": {
          "description": "Specifies async logger max in-memory size for event. Default 2M, if limit exceeded event dumped to temp file;",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "log_in_file": {
          "description": "Specifies log in to the file or not.",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "on",
            "off"
          ]
        },
        "temp_path": {
          "description": "Specifies the path for saving temp data. Default is /sowarun/<profile name>/service_http_proxy/service_http_proxy_<id>",
          "type": "string"
        }
      },
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              "enabled"
            ],
            "properties": {
              "enabled": {
                "const": false
              }
            }
          },
          "then": {
            "required": []
          },
          "else": {
            "required": [
              "stage"
            ]
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "logger_service"
            ],
            "properties": {
              "logger_service": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "logger_read_timeout"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "logger_service"
            ],
            "properties": {
              "logger_service": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "logger_send_timeout"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "logger_service"
            ],
            "properties": {
              "logger_service": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "logger_connect_timeout"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "logger_service"
            ],
            "properties": {
              "logger_service": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "logger_client_body_timeout"
              ]
            }
          }
        }
      ]
    },
    "log_masking_rules": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "log_type": {
            "description": "Which log type will be masked",
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "event",
              "security",
              "all"
            ]
          },
          "object": {
            "description": "Specifies in which part of data masking will be maked",
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "request_header",
              "response_header",
              "request_body",
              "response_body",
              "request_cookie",
              "response_cookie"
            ]
          },
          "cookie": {
            "description": "Individual cookie name wich will be masked",
            "type": [
              "number",
              "string"
            ]
          },
          "header": {
            "description": "Header name which will be masked",
            "type": [
              "number",
              "string"
            ]
          },
          "mask_symbol": {
            "description": "Specifies which symbol will be used on replacement",
            "type": [
              "number",
              "string"
            ],
            "pattern": "."
          },
          "expression": {
            "description": "Search pattern",
            "type": [
              "number",
              "string"
            ]
          },
          "replace_group": {
            "description": "Specifies group number in expression which will be used for replacement for request or response body. If 0 - replacing full match string",
            "type": [
              "number",
              "string"
            ],
            "pattern": "^[0-9]*$"
          },
          "replace_all": {
            "description": "Replace all occurences or first. By default only first occurence replacing",
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "on",
              "off"
            ]
          },
          "exclusion": {
            "description": "Define exlcusion from masking in all object with this type, default false",
            "type": "boolean"
          }
        },
        "required": [
          "object"
        ]
      }
    },
    "http2": {
      "description": "Define http2 specific parameters",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "body_preread_size": {
          "description": "Sets the size of the buffer per each request in which the request body may be saved before it is started to be processed. By default - 64k",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "chunk_size": {
          "description": "Sets the maximum size of chunks into which the response body is sliced. A too low value results in higher overhead. A too high value impairs prioritization due to HOL blocking. By default - 8k",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "max_concurrent_pushes": {
          "description": "Limits the maximum number of concurrent push requests in a connection. By default - 10",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+)$"
        },
        "max_concurrent_streams": {
          "description": "Sets the maximum number of concurrent HTTP/2 streams in a connection. By default - 128",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+)$"
        },
        "push_preload": {
          "description": "Enables automatic conversion of preload links specified in the \u201cLink\u201d response header fields into push requests. By default - off",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "on",
            "off"
          ]
        },
        "pushes": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "push_parent": {
              "description": "Cancels the effect of the push directives inherited from the previous configuration level. By default off",
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "push_list": {
              "description": "List of Pre-emptively sends (pushes) a request to the specified uri along with the response to the original request. Only relative URIs with absolute path will be processed",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "cache": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "zone": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0437\u043e\u043d\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0437\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u0412 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (1.7.9). \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 off \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.",
          "type": [
            "number",
            "string"
          ]
        },
        "background_update": {
          "description": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043a\u044d\u0448\u0430, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0433\u043e \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e.",
          "type": "boolean"
        },
        "bypass": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043a\u044d\u0448\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0435 \u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u201c0\u201d, \u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043a\u044d\u0448\u0430: $cookie_nocache $arg_nocache$arg_comment; $http_pragma    $http_authorization;\n",
          "type": [
            "number",
            "string"
          ]
        },
        "convert_head": {
          "description": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u201cHEAD\u201d \u0432 \u201cGET\u201d \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u044e\u0447 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0432 \u0441\u0435\u0431\u044f $request_method. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.",
          "type": "boolean"
        },
        "key": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"$host$request_uri $cookie_user\". \"$scheme$proxy_host$request_uri\" \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.",
          "type": [
            "number",
            "string"
          ]
        },
        "lock": {
          "description": "\u0415\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u044d\u0448\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 key, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u043b\u0438\u0431\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u043a\u044d\u0448\u0435, \u043b\u0438\u0431\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 lock_timeout. \u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.",
          "type": "boolean"
        },
        "lock_age": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f cache_lock. \u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043d\u0430 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 5 \u0441\u0435\u043a\u0443\u043d\u0434.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[mMsS]{1})$"
        },
        "max_range_offset": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0430\u0439\u0442 (byte-range requests). \u0415\u0441\u043b\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c, range-\u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043d\u0430 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.",
          "type": "integer"
        },
        "methods": {
          "description": "\u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435, \u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d. \u041c\u0435\u0442\u043e\u0434\u044b \u201cGET\u201d \u0438 \u201cHEAD\u201d \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0438\u0445 \u044f\u0432\u043d\u043e.",
          "type": "array",
          "items": {
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "get",
              "head",
              "post"
            ]
          }
        },
        "min_uses": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - 1.",
          "type": "integer"
        },
        "purge": {
          "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u043a\u044d\u0448\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0435 \u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u201c0\u201d, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043a\u044d\u0448\u0435 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c 204 (No Content). \u0415\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u043e\u0439 (\u201c*\u201d), \u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u044d\u0448\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u0435, \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0438\u0437 \u043a\u044d\u0448\u0430. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043b\u0438 \u0434\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f. \n",
          "type": [
            "number",
            "string"
          ]
        },
        "revalidate": {
          "description": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0440\u0435\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u201cIf-Modified-Since\u201d \u0438 \u201cIf-None-Match\u201d. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
          "type": "boolean"
        },
        "use_stale": {
          "description": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b next_upstream.",
          "type": "array",
          "items": {
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "error",
              "timeout",
              "invalid_header",
              "updating",
              "http_500",
              "http_502",
              "http_503",
              "http_504",
              "http_403",
              "http_404",
              "http_429"
            ]
          }
        },
        "valid": {
          "type": "array",
          "items": {
            "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u0432\u0440\u0435\u043c\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"200 302 10m\";",
            "type": [
              "number",
              "string"
            ]
          }
        }
      },
      "required": [
        "zone"
      ]
    },
    "proxy_ssl": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ssl_use": {
          "description": "Enables SSL. Default is 'off'.",
          "type": "boolean"
        },
        "sspi": {
          "description": "Enables GOST TLS mode. Default id false.",
          "type": "boolean"
        },
        "ssl_verify_local_crl_only": {
          "description": "GOST mode. Specifies whether to check the certificate status locally (otherwise check online). Default is \"off\" (online check).",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_verify_ignore_cn": {
          "description": "GOST mode. Specifies whether to skip CN check. Default is \"off\" (do not skip).",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_session_reuse": {
          "description": "Determines whether SSL sessions can be reused when working with the proxied server. Default is 'on'.",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_protocols": {
          "description": "Enables the specified protocols for requests to a proxied HTTPS server. The default value is \"TLSv1 TLSv1.1 TLSv1.2\"",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string",
            "enum": [
              "SSLv2",
              "SSLv3",
              "TLSv1",
              "TLSv1.1",
              "TLSv1.2",
              "TLSv1.3"
            ]
          }
        },
        "ssl_ciphers": {
          "description": "Specifies the enabled ciphers for requests to a proxied HTTPS server. The default value is \"HIGH:!aNULL:!MD5\".",
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "prefix": {
                "type": "string",
                "enum": [
                  "!",
                  "+",
                  "-"
                ]
              },
              "value": {
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "enum": [
                    "DEFAULT",
                    "COMPLEMENTOFDEFAULT",
                    "ALL",
                    "COMPLEMENTOFALL",
                    "HIGH",
                    "MEDIUM",
                    "LOW",
                    "EXP",
                    "EXPORT",
                    "EXPORT40",
                    "EXPORT56",
                    "eNULL",
                    "NULL",
                    "aNULL",
                    "kRSA",
                    "RSA",
                    "kDHr",
                    "kDHd",
                    "kDH",
                    "kDHE",
                    "kEDH",
                    "DHE",
                    "EDH",
                    "ADH",
                    "DH",
                    "kECDHr",
                    "kECDHe",
                    "kECDH",
                    "kECDHE",
                    "kEECDH",
                    "ECDHE",
                    "EECDH",
                    "AECDH",
                    "ECDH",
                    "aRSA",
                    "aDSS",
                    "DSS",
                    "aDH",
                    "aECDH",
                    "aECDSA",
                    "ECDSA",
                    "kFZA",
                    "aFZA",
                    "eFZA",
                    "FZA",
                    "TLSv1.2",
                    "TLSv1",
                    "SSLv3",
                    "SSLv2",
                    "AES128",
                    "AES256",
                    "AES",
                    "AESGCM",
                    "CAMELLIA128",
                    "CAMELLIA256",
                    "CAMELLIA",
                    "3DES",
                    "DES",
                    "RC4",
                    "RC2",
                    "IDEA",
                    "SEED",
                    "MD5",
                    "SHA1",
                    "SHA",
                    "SHA256",
                    "SHA384",
                    "aGOST",
                    "aGOST01",
                    "aGOST94",
                    "kGOST",
                    "GOST94",
                    "GOST89MAC",
                    "PSK",
                    "SUITEB128",
                    "SUITEB128ONLY",
                    "SUITEB192",
                    "@STRENGTH",
                    "NULL-SHA256"
                  ]
                }
              }
            },
            "required": [
              "value"
            ]
          }
        },
        "ssl_ciphers_str": {
          "description": "Specifies the string of enabled ciphers for requests to a proxied HTTPS server.",
          "type": "string"
        },
        "ssl_name": {
          "description": "Allows overriding the server name used to verify the certificate of the proxied HTTPS server and to be passed through SNI when establishing a connection with the proxied HTTPS server. There is no default value.",
          "type": "string"
        },
        "ssl_name_upstream_host": {
          "description": "Enables using upstream host to verify the certificate of the proxied HTTPS server when ssl_name isn't specified. Default \"on\".",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_name_verify_off": {
          "description": "Enable or disable ssl_name verifying",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_server_name": {
          "description": "Enables or disables passing of the server name through TLS Server Name Indication extension (SNI, RFC 6066) when establishing a connection with the proxied HTTPS server. Default is \"off\".",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_verify": {
          "description": "Enables or disables verification of the proxied HTTPS server certificate. Default is \"off\"",
          "type": "string",
          "enum": [
            "on",
            "off"
          ]
        },
        "ssl_verify_depth": {
          "description": "Sets the verification depth in the proxied HTTPS server certificates chain. Default is \"1\".",
          "type": "integer",
          "minimum": 0
        },
        "ssl_trusted_certificate": {
          "description": "Specifies a file with trusted CA certificates in the PEM format used to verify the certificate of the proxied HTTPS server. There is no default value.",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_dn_verify_trusted_path": {
          "description": "Specifies the file with allowed regex of client certificate dn",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_fingerprint_verify_trusted_path": {
          "description": "Specifies the file with allowed regex of client certificate dn",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_verify_error_code": {
          "description": "Defines the response code if verification upstream certificate failed.",
          "type": "integer"
        },
        "ssl_crl": {
          "description": "Specifies a file with revoked certificates (CRL) in the PEM format used to verify the certificate of the proxied HTTPS server. There is no default value.",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_certificate": {
          "description": "Specifies a file with the certificate in the PEM format used for authentication to a proxied HTTPS server. There is no default value.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_certificate_key": {
          "description": "Specifies a file with the secret key in the PEM format used for authentication to a proxied HTTPS server. There is no default value.",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_password_file": {
          "description": "Specifies a file with passphrases for secret keys where each passphrase is specified on a separate line. There is no default value.",
          "type": "string",
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        }
      },
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_session_reuse"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_protocols"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_server_name"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_verify"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_verify_depth"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_dn_verify_trusted_path"
            ],
            "properties": {
              "ssl_dn_verify_trusted_path": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_verify_error_code"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_fingerprint_verify_trusted_path"
            ],
            "properties": {
              "ssl_fingerprint_verify_trusted_path": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_verify_error_code"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_crl"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_certificate"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_certificate_key"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl_use"
            ],
            "properties": {
              "ssl_use": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_password_file"
              ]
            }
          }
        }
      ]
    },
    "transformations": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "conditions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "check": {
                  "description": "Defines what to check.",
                  "type": "string",
                  "enum": [
                    "method",
                    "request_header",
                    "response_header",
                    "remote_ip_address"
                  ]
                },
                "name": {
                  "description": "Defines header name.",
                  "type": "string"
                },
                "pattern": {
                  "description": "Regex which defines matching condition.",
                  "type": "string"
                },
                "string_match": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "anchor": {
                      "description": "Specifies anchor for string bounding. '\\' by default.",
                      "type": [
                        "number",
                        "string"
                      ],
                      "pattern": "^.{1}$"
                    },
                    "file": {
                      "description": "Specifies path to file with strings.",
                      "type": "string",
                      "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                    },
                    "strings": {
                      "type": "array",
                      "items": {
                        "description": "Specifies string to check.",
                        "type": "string"
                      }
                    }
                  },
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "strings"
                        ],
                        "properties": {
                          "strings": {}
                        }
                      },
                      "else": {
                        "required": [
                          "file"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "file"
                        ],
                        "properties": {
                          "file": {}
                        }
                      },
                      "else": {
                        "required": [
                          "strings"
                        ]
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "strings"
                        ],
                        "properties": {
                          "strings": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "file"
                          ]
                        }
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "file"
                        ],
                        "properties": {
                          "file": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "strings"
                          ]
                        }
                      }
                    }
                  ]
                },
                "contains": {
                  "description": "Specifies does file with strings contain checking value. True by default.",
                  "type": "boolean"
                },
                "skip_unicode_decoding": {
                  "description": "skips utf8tounicode and unicode decoding steps to normalize cyrrilic symbols. False by default.",
                  "type": "boolean"
                },
                "case_sensitive": {
                  "description": "Defines does pattern or string match case sensitive or not.",
                  "type": "boolean"
                }
              },
              "required": [
                "check",
                "case_sensitive"
              ],
              "allOf": [
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "string_match"
                    ],
                    "properties": {
                      "string_match": {}
                    }
                  },
                  "else": {
                    "required": [
                      "pattern"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "string_match"
                    ],
                    "properties": {
                      "string_match": {}
                    }
                  },
                  "then": {
                    "not": {
                      "required": [
                        "pattern"
                      ]
                    }
                  }
                }
              ]
            }
          },
          "default": {
            "description": "Specifies next set of actions as default.",
            "type": "boolean"
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "action": {
                  "description": "Defines what have to be checked.",
                  "type": "string",
                  "enum": [
                    "add_response_header",
                    "add_proxy_header",
                    "remove_response_header",
                    "remove_proxy_header",
                    "return",
                    "pass"
                  ]
                },
                "status_code": {
                  "description": "Specifies status code to return.",
                  "type": "integer"
                },
                "override": {
                  "description": "Specifies override header or not. True by default.",
                  "type": "boolean"
                },
                "name": {
                  "description": "Specifies header to be transformed.",
                  "type": "string"
                },
                "value": {
                  "description": "Specifies value for setting to the header.",
                  "type": "string"
                },
                "value_from_header": {
                  "description": "Specifies request header name for setting it's value to the header.",
                  "type": "string",
                  "pattern": "^.+$"
                },
                "value_from_variable": {
                  "description": "Specifies nginx variable for setting it's value to the header.",
                  "type": "string",
                  "enum": [
                    "remote-address",
                    "ngx-x-forwarded-for"
                  ]
                }
              },
              "required": [
                "action"
              ]
            }
          },
          "description": {
            "description": "Describes condition block log message",
            "type": [
              "number",
              "string"
            ]
          }
        },
        "required": [
          "actions"
        ],
        "allOf": [
          {
            "if": {
              "type": "object",
              "required": [
                "default"
              ],
              "properties": {
                "default": {}
              }
            },
            "else": {
              "required": [
                "conditions"
              ]
            }
          },
          {
            "if": {
              "type": "object",
              "required": [
                "conditions"
              ],
              "properties": {
                "conditions": {}
              }
            },
            "else": {
              "required": [
                "default"
              ]
            }
          },
          {
            "if": {
              "type": "object",
              "required": [
                "default"
              ],
              "properties": {
                "default": {}
              }
            },
            "then": {
              "not": {
                "required": [
                  "conditions"
                ]
              }
            }
          }
        ]
      }
    },
    "filter_mds": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "description": "Specifies to enable or disable MDS. Default is \"True\".",
          "type": "boolean"
        },
        "aio": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "description": "When specified true, dedicated thread will be used for request/response processing when its possible, value inherited from parent and may be overrite in child",
              "type": "boolean"
            },
            "thread_pool_id": {
              "description": "name of thread pool from section system/optional/thread_pools, value inherite from parent and may by override in child. Must be specified when aio is true",
              "type": [
                "number",
                "string"
              ]
            }
          }
        },
        "ignore_parent": {
          "description": "Specifies ignore parent rules and settings or not",
          "type": "boolean"
        },
        "debug": {
          "type": "boolean"
        },
        "config": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "SecRuleEngine": {
              "enum": [
                true,
                false,
                "DetectionOnly"
              ]
            },
            "SecRequestBodyAccess": {
              "type": "boolean"
            },
            "SecRequestBodyLimit": {
              "type": "integer"
            },
            "SecRequestBodyLimitAction": {
              "type": "string"
            },
            "SecPcreMatchLimit": {
              "type": "integer"
            },
            "SecPcreMatchLimitRecursion": {
              "type": "integer"
            },
            "SecResponseBodyAccess": {
              "type": "boolean"
            },
            "SecResponseBodyMimeType": {
              "type": "string"
            },
            "SecResponseBodyLimit": {
              "type": "integer"
            },
            "SecResponseBodyLimitAction": {
              "type": "string"
            },
            "SecStreamOutBodyInspection": {
              "type": "boolean"
            },
            "SecUploadKeepFiles": {
              "type": "boolean"
            },
            "SecAuditEngine": {
              "type": "string"
            },
            "SecAuditLogRelevantStatus": {
              "type": "string"
            },
            "SecAuditLogParts": {
              "type": "string"
            },
            "SecAuditLogType": {
              "type": "string",
              "enum": [
                "Syslog",
                "Serial",
                "Concurrent",
                "Kafka"
              ]
            },
            "SecAuditSyslogHost": {
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditSyslogPort": {
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditSyslogProtocol": {
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "tcp",
                "udp"
              ]
            },
            "SecAuditSyslogConnectTimeout": {
              "type": "integer"
            },
            "SecArgumentSeparator": {
              "type": "string"
            },
            "SecCookieFormat": {
              "type": "integer"
            },
            "SecUnicodeMapFile": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "file": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "code": {
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "required": [
                "file",
                "code"
              ]
            },
            "SecUseTransformCache": {
              "type": "boolean"
            },
            "SecRequestTimeout": {
              "type": "integer"
            },
            "SecPassSlowRequest": {
              "type": "boolean"
            },
            "SecResponseTimeout": {
              "type": "integer"
            },
            "SecPassSlowResponse": {
              "type": "boolean"
            },
            "SecLogFullBodyOnTimeout": {
              "type": "boolean"
            },
            "SecAuditKafkaBrokers": {
              "description": "CSV list of brokers",
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditKafkaTopic": {
              "description": "topic to connect to",
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditKafkaProtocol": {
              "description": "connection protocol",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "plaintext",
                "ssl"
              ]
            },
            "SecAuditKafkaCertificate": {
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditKafkaKey": {
              "type": [
                "number",
                "string"
              ]
            },
            "SecAuditKafkaCa": {
              "type": [
                "number",
                "string"
              ]
            }
          },
          "allOf": [
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestBodyLimitAction"
                ],
                "properties": {
                  "SecRequestBodyLimitAction": {
                    "pattern": ".+"
                  }
                }
              },
              "then": {
                "required": [
                  "SecRequestBodyLimit"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestBodyLimit"
                ],
                "properties": {
                  "SecRequestBodyLimit": {
                    "pattern": ".+"
                  }
                }
              },
              "then": {
                "required": [
                  "SecRequestBodyLimitAction"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseBodyLimitAction"
                ],
                "properties": {
                  "SecResponseBodyLimitAction": {
                    "pattern": ".+"
                  }
                }
              },
              "then": {
                "required": [
                  "SecResponseBodyLimit"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseBodyLimit"
                ],
                "properties": {
                  "SecResponseBodyLimit": {
                    "pattern": ".+"
                  }
                }
              },
              "then": {
                "required": [
                  "SecResponseBodyLimitAction"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecAuditLogType"
                ],
                "properties": {
                  "SecAuditLogType": {
                    "const": "Kafka"
                  }
                }
              },
              "then": {
                "required": [
                  "SecAuditKafkaBrokers"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecAuditLogType"
                ],
                "properties": {
                  "SecAuditLogType": {
                    "const": "Kafka"
                  }
                }
              },
              "then": {
                "required": [
                  "SecAuditKafkaTopic"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecAuditKafkaProtocol"
                ],
                "properties": {
                  "SecAuditKafkaProtocol": {
                    "const": "ssl"
                  }
                }
              },
              "then": {
                "required": [
                  "SecAuditKafkaCertificate"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecAuditKafkaProtocol"
                ],
                "properties": {
                  "SecAuditKafkaProtocol": {
                    "const": "ssl"
                  }
                }
              },
              "then": {
                "required": [
                  "SecAuditKafkaKey"
                ]
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestBodyLimitAction"
                ],
                "properties": {
                  "SecRequestBodyLimitAction": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecRequestBodyLimit"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestBodyLimit"
                ],
                "properties": {
                  "SecRequestBodyLimit": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecRequestBodyLimitAction"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseBodyLimitAction"
                ],
                "properties": {
                  "SecResponseBodyLimitAction": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecResponseBodyLimit"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseBodyLimit"
                ],
                "properties": {
                  "SecResponseBodyLimit": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecResponseBodyLimitAction"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestTimeout"
                ],
                "properties": {
                  "SecRequestTimeout": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecPassSlowRequest"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseTimeout"
                ],
                "properties": {
                  "SecResponseTimeout": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecPassSlowResponse"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecResponseTimeout"
                ],
                "properties": {
                  "SecResponseTimeout": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecLogFullBodyOnTimeout"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecRequestTimeout"
                ],
                "properties": {
                  "SecRequestTimeout": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecLogFullBodyOnTimeout"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "SecAuditKafkaProtocol"
                ],
                "properties": {
                  "SecAuditKafkaProtocol": {
                    "const": "ssl"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "SecAuditKafkaCa"
                  ]
                }
              }
            }
          ]
        },
        "rules": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "base",
              "owasp-crs",
              "comodo",
              "sowa-mq",
              "sowa-http",
              "sowa-ws",
              "sowa-ufs",
              "sowa-kafka",
              "sowa-http-reversed"
            ]
          }
        },
        "custom_rules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "validators": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "validator_json": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "request": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "default": {
                    "description": "Specify the default rule",
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "post",
                      "put",
                      "delete",
                      "patch"
                    ]
                  },
                  "params": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "operator": {
                          "type": "string",
                          "enum": [
                            "=",
                            "!=",
                            "~",
                            "~*",
                            "!~",
                            "!~*"
                          ]
                        },
                        "pattern": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "operator",
                        "pattern"
                      ]
                    }
                  },
                  "allow_empty_body": {
                    "description": "Specifies allow empty bodies or not.",
                    "type": "boolean"
                  },
                  "allow_primitives_in_root": {
                    "description": "Specifies allow primitives(integer/string/boolean/null) in root of json or allowed only JSONObject/JSONArray in root. Default - false",
                    "type": "boolean"
                  },
                  "transforms": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "PostFormDataToFlateJson"
                      ]
                    }
                  },
                  "schema": {
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  }
                },
                "required": [
                  "schema"
                ],
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "url"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "method"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "params"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "allow_empty_body"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "allow_primitives_in_root"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "response": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "default": {
                    "description": "Specify the default rule",
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "get",
                      "post",
                      "put",
                      "delete",
                      "patch"
                    ]
                  },
                  "params": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "operator": {
                          "type": "string",
                          "enum": [
                            "=",
                            "!=",
                            "~",
                            "~*",
                            "!~",
                            "!~*"
                          ]
                        },
                        "pattern": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "operator",
                        "pattern"
                      ]
                    }
                  },
                  "allow_empty_body": {
                    "description": "Specifies allow empty bodies or not.",
                    "type": "boolean"
                  },
                  "allow_primitives_in_root": {
                    "description": "Specifies allow primitives(integer/string/boolean/null) in root of json or allowed only JSONObject/JSONArray in root. Default - false",
                    "type": "boolean"
                  },
                  "transforms": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "PostFormDataToFlateJson"
                      ]
                    }
                  },
                  "schema": {
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "response_code": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "operator": {
                        "type": "string",
                        "enum": [
                          "=",
                          "!=",
                          "~",
                          "~*",
                          "!~",
                          "!~*"
                        ]
                      },
                      "pattern": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "operator",
                      "pattern"
                    ]
                  }
                },
                "required": [
                  "schema"
                ],
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "url"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "method"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "params"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "allow_empty_body"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "allow_primitives_in_root"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "response_code"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "response_proc_options": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "max_inmemory_size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                },
                "response_generation_type": {
                  "description": "Defines how validator generate error response, when internal - using direct generation in java call, when external - native redirect to error page, by default internal",
                  "type": "string",
                  "enum": [
                    "internal",
                    "external"
                  ]
                }
              }
            },
            "request_error_code": {
              "type": "integer"
            },
            "request_error_message": {
              "type": [
                "number",
                "string"
              ]
            },
            "response_error_code": {
              "type": "integer"
            },
            "response_error_message": {
              "type": [
                "number",
                "string"
              ]
            },
            "trailing_garbage_policy": {
              "type": "string",
              "enum": [
                "WEAK",
                "STANDARD",
                "STRONG"
              ]
            },
            "action_when_no_rule": {
              "description": "Defines behavior in case when request or response don't have apropriate rule to validate, if DENY - message blocked, if IGNORE - message processing continue By default - deny",
              "type": "string",
              "enum": [
                "ignore",
                "deny"
              ]
            },
            "action": {
              "description": "Defines behavior in case when request or response validation is failed, ignore - only log error, but request or response not blocked, deny - request/response blocked, by default - deny",
              "type": "string",
              "enum": [
                "ignore",
                "deny"
              ]
            }
          },
          "allOf": [
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_proc_options"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "request": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "request_error_code"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "request": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "request_error_message"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_error_code"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_error_message"
                  ]
                }
              }
            }
          ]
        },
        "validator_xsd": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "request": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "default": {
                    "description": "Specify the default rule",
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "post",
                      "put",
                      "delete",
                      "patch"
                    ]
                  },
                  "params": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "operator": {
                          "type": "string",
                          "enum": [
                            "=",
                            "!=",
                            "~",
                            "~*",
                            "!~",
                            "!~*"
                          ]
                        },
                        "pattern": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "operator",
                        "pattern"
                      ]
                    }
                  },
                  "transforms": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "Base64Decode",
                        "ASN1ContentExtractor"
                      ]
                    }
                  },
                  "schema": {
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "wsdl": {
                    "type": "boolean"
                  },
                  "default_wsdl_style": {
                    "type": "string",
                    "enum": [
                      "document",
                      "rpc"
                    ]
                  }
                },
                "required": [
                  "schema"
                ],
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "url"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "method"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "params"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "wsdl"
                      ],
                      "properties": {
                        "wsdl": {
                          "const": false
                        }
                      }
                    }
                  }
                ]
              }
            },
            "request_limits": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "entityExpansionLimit": {
                  "description": "Limit the number of entity expansions. Default - 64000",
                  "type": "integer"
                },
                "elementAttributeLimit": {
                  "description": "Limit the number of attributes an element can have. Default - 10000",
                  "type": "integer"
                },
                "maxOccurLimit": {
                  "description": "Limit the number of content model nodes that may be created when building a grammar for a W3C XML Schema that contains maxOccurs attributes with values other than \"unbounded\". Default - 5000",
                  "type": "integer"
                },
                "totalEntitySizeLimit": {
                  "description": "Limit the total size of all entities that include general and parameter entities. The size is calculated as an aggregation of all entities. Default - 50000000",
                  "type": "integer"
                },
                "maxGeneralEntitySizeLimit": {
                  "description": "Limit the maximum size of any general entities. Default - 0",
                  "type": "integer"
                },
                "maxParameterEntitySizeLimit": {
                  "description": "Limit the maximum size of any parameter entities, including the result of nesting multiple parameter entities. Default - 1000000",
                  "type": "integer"
                },
                "entityReplacementLimit": {
                  "description": "Limit the total number of nodes in all entity references. Default - 3000000",
                  "type": "integer"
                },
                "maxElementDepth": {
                  "description": "Limit the maximum element depth. Default - 0",
                  "type": "integer"
                },
                "maxXMLNameLimit": {
                  "description": "Limit the maximum size of XML names, including element name, attribute name and namespace prefix and URI. Default - 1000",
                  "type": "integer"
                }
              }
            },
            "response": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "default": {
                    "description": "Specify the default rule",
                    "type": "boolean"
                  },
                  "url": {
                    "type": "string"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "get",
                      "post",
                      "put",
                      "delete",
                      "patch"
                    ]
                  },
                  "params": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": [
                            "number",
                            "string"
                          ]
                        },
                        "operator": {
                          "type": "string",
                          "enum": [
                            "=",
                            "!=",
                            "~",
                            "~*",
                            "!~",
                            "!~*"
                          ]
                        },
                        "pattern": {
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "operator",
                        "pattern"
                      ]
                    }
                  },
                  "transforms": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "Base64Decode",
                        "ASN1ContentExtractor"
                      ]
                    }
                  },
                  "schema": {
                    "type": "string",
                    "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
                  },
                  "wsdl": {
                    "type": "boolean"
                  },
                  "default_wsdl_style": {
                    "type": "string",
                    "enum": [
                      "document",
                      "rpc"
                    ]
                  },
                  "response_code": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "operator": {
                        "type": "string",
                        "enum": [
                          "=",
                          "!=",
                          "~",
                          "~*",
                          "!~",
                          "!~*"
                        ]
                      },
                      "pattern": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "operator",
                      "pattern"
                    ]
                  }
                },
                "required": [
                  "schema"
                ],
                "allOf": [
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "url"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "method"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "params"
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "wsdl"
                      ],
                      "properties": {
                        "wsdl": {
                          "const": false
                        }
                      }
                    }
                  },
                  {
                    "if": {
                      "type": "object",
                      "required": [
                        "default"
                      ],
                      "properties": {
                        "default": {}
                      }
                    },
                    "then": {
                      "not": {
                        "required": [
                          "response_code"
                        ]
                      }
                    }
                  }
                ]
              }
            },
            "response_limits": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "entityExpansionLimit": {
                  "description": "Limit the number of entity expansions. Default - 64000",
                  "type": "integer"
                },
                "elementAttributeLimit": {
                  "description": "Limit the number of attributes an element can have. Default - 10000",
                  "type": "integer"
                },
                "maxOccurLimit": {
                  "description": "Limit the number of content model nodes that may be created when building a grammar for a W3C XML Schema that contains maxOccurs attributes with values other than \"unbounded\". Default - 5000",
                  "type": "integer"
                },
                "totalEntitySizeLimit": {
                  "description": "Limit the total size of all entities that include general and parameter entities. The size is calculated as an aggregation of all entities. Default - 50000000",
                  "type": "integer"
                },
                "maxGeneralEntitySizeLimit": {
                  "description": "Limit the maximum size of any general entities. Default - 0",
                  "type": "integer"
                },
                "maxParameterEntitySizeLimit": {
                  "description": "Limit the maximum size of any parameter entities, including the result of nesting multiple parameter entities. Default - 1000000",
                  "type": "integer"
                },
                "entityReplacementLimit": {
                  "description": "Limit the total number of nodes in all entity references. Default - 3000000",
                  "type": "integer"
                },
                "maxElementDepth": {
                  "description": "Limit the maximum element depth. Default - 0",
                  "type": "integer"
                },
                "maxXMLNameLimit": {
                  "description": "Limit the maximum size of XML names, including element name, attribute name and namespace prefix and URI. Default - 1000",
                  "type": "integer"
                }
              }
            },
            "response_proc_options": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "max_inmemory_size": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
                },
                "response_generation_type": {
                  "description": "Defines how validator generate error response, when internal - using direct generation in java call, when external - native redirect to error page, by default internal",
                  "type": "string",
                  "enum": [
                    "internal",
                    "external"
                  ]
                }
              }
            },
            "request_error_code": {
              "type": "integer"
            },
            "request_error_message": {
              "type": [
                "number",
                "string"
              ]
            },
            "response_error_code": {
              "type": "integer"
            },
            "response_error_message": {
              "type": [
                "number",
                "string"
              ]
            },
            "action_when_no_rule": {
              "description": "Defines behavior in case when request or response don't have apropriate rule to validate, if DENY - message blocked, if IGNORE - message processing continue By default - deny",
              "type": "string",
              "enum": [
                "ignore",
                "deny"
              ]
            },
            "action": {
              "description": "Defines behavior in case when request or response validation is failed, ignore - only log error, but request or response not blocked, deny - request/response blocked, by default - deny",
              "type": "string",
              "enum": [
                "ignore",
                "deny"
              ]
            }
          },
          "allOf": [
            {
              "if": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "request": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "request_limits"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_limits"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_proc_options"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "request": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "request_error_code"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "request"
                ],
                "properties": {
                  "request": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "request_error_message"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_error_code"
                  ]
                }
              }
            },
            {
              "if": {
                "type": "object",
                "required": [
                  "response"
                ],
                "properties": {
                  "response": {
                    "pattern": ".+"
                  }
                }
              },
              "else": {
                "not": {
                  "required": [
                    "response_error_message"
                  ]
                }
              }
            }
          ]
        }
      }
    },
    "modifiers": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "set_header": {
          "description": "Allows to redefine or replace header in client request.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "proxy_host_resolved": {
          "description": "Determines whether the original peer name or its resolved IP representation will be pass to the upstream in header \"Host\". Default is false.",
          "type": "boolean"
        },
        "pass_header": {
          "description": "Allows passing forbidden headers from the upstream to the client.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "proxy_redirect": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sub_filter": {
          "description": "Allows to make replace from one string to another in the upstream response.",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "once": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "last_modified": {
              "type": "string",
              "enum": [
                "on",
                "off"
              ]
            },
            "replace": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "string"
                  },
                  "to": {
                    "type": "string"
                  }
                },
                "required": [
                  "from",
                  "to"
                ]
              }
            }
          },
          "required": [
            "replace"
          ]
        },
        "subs_filter": {
          "description": "Allows to make replace from one string to another in the upstream response using regular expressions.",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mime_types": {
              "description": "Default \"*\"",
              "type": "string"
            },
            "replace": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "from": {
                    "type": "string"
                  },
                  "to": {
                    "type": "string"
                  },
                  "flags": {
                    "description": "Default \"r\"",
                    "type": "array",
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "enum": [
                        "i",
                        "g",
                        "o",
                        "r"
                      ]
                    }
                  }
                },
                "required": [
                  "from",
                  "to"
                ]
              }
            }
          },
          "required": [
            "replace"
          ]
        },
        "cors": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "origin_wl": {
              "description": "Specifies whitelist for the Origin header.",
              "type": "string",
              "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
            },
            "origin_wl_type": {
              "description": "Specifies type for the 'origin_wl' directive. 're' - whitelist with regex values, 'recl' - whitelist with caseless regex values. If not specified, then full match used.",
              "type": "string",
              "enum": [
                "re",
                "recl"
              ]
            },
            "origin_allow_null_wl": {
              "description": "Specifies whitelist of hosts whom allowed 'Origin null'.",
              "type": "string",
              "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
            },
            "origin_allow_null_wl_type": {
              "description": "Specifies type for the 'origin_allow_null_wl' directive. 're' - whitelist with regex values, 'recl' - whitelist with caseless regex values. If not specified, then full match used.",
              "type": "string",
              "enum": [
                "re",
                "recl"
              ]
            },
            "method_wl": {
              "description": "Specifies whitelist for the request method. Used in prefligth request.",
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "get",
                  "head",
                  "post",
                  "put",
                  "connect",
                  "options",
                  "trace",
                  "patch",
                  "delete"
                ]
              }
            },
            "deny_status": {
              "description": "Specifies the deny status when CORS checks is failed. By default is 403.",
              "type": [
                "number",
                "string"
              ],
              "pattern": "^(4|5)[0-9]{2}$"
            }
          },
          "required": [
            "origin_wl",
            "method_wl"
          ]
        },
        "set_output_headers": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "headers": {
                "description": "Specifies header line. For example 'X-MyHeader foo'.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "status_codes": {
                "description": "Specifies status code criteria.",
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^[1-5][0-9]{2}$"
                }
              },
              "content_types": {
                "description": "Specifies content type criteria in response headers. For example 'text/html'.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "conditions": {
                "description": "Specifies the conditions file for the headers.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "conditions_reverse": {
                "type": "boolean"
              },
              "set_var": {
                "description": "Setting variable for use in this headers. For example '$orig_xff $http_x_forwarded_for'.",
                "type": "string"
              },
              "value_regex": {
                "description": "Updates an existing header if it's current value matches the specified regular expression. Example '~*session=.*'",
                "type": [
                  "number",
                  "string"
                ]
              }
            },
            "required": [
              "headers"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "conditions"
                  ],
                  "properties": {
                    "conditions": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "conditions_reverse"
                    ]
                  }
                }
              }
            ]
          }
        },
        "set_input_headers": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "headers": {
                "description": "Specifies header line. For example 'X-MyHeader foo'.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "content_types": {
                "description": "Specifies content type criteria in request headers. For example 'text/html'.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "conditions": {
                "description": "Specifies the conditions file for the headers.",
                "type": "string",
                "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
              },
              "conditions_reverse": {
                "type": "boolean"
              },
              "set_var": {
                "description": "Setting variable for use in this headers. For example '$orig_xff $http_x_forwarded_for'.",
                "type": "string"
              }
            },
            "required": [
              "headers"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "conditions"
                  ],
                  "properties": {
                    "conditions": {
                      "pattern": ".+"
                    }
                  }
                },
                "else": {
                  "not": {
                    "required": [
                      "conditions_reverse"
                    ]
                  }
                }
              }
            ]
          }
        }
      },
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              ".."
            ],
            "properties": {
              "..": {
                "properties": {
                  "optional": {
                    "type": "object",
                    "required": [
                      "http_version"
                    ],
                    "properties": {
                      "http_version": {}
                    }
                  }
                }
              }
            }
          },
          "then": {
            "not": {
              "required": [
                "proxy_redirect"
              ]
            }
          }
        }
      ]
    },
    "postprocessors": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "postprocessor_error": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "code": {
              "description": "Specifies an array of error codes by which templates will be generated.",
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "pattern_file": {
              "description": "Specifies pattern file which will be used as response body.",
              "type": "string",
              "enum": [
                "OSWP_Error_template.json",
                "abo_errors_schema.json",
                "default_json.json",
                "errors_schema.json",
                "errors_schema_v_1.0.json",
                "vrvr_error_template.json",
                "workflow_error_schema.json"
              ]
            },
            "custom_pattern_file": {
              "description": "Specifies rule file which describes how to fill pattern file.",
              "type": "string",
              "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
            },
            "rules_file": {
              "description": "Specifies rule file which describes how to fill pattern file. Default - rules file from system resources.",
              "type": "string",
              "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
            },
            "content_type": {
              "description": "Specifies content type for response header. Default - none.",
              "type": "string"
            },
            "grpc_error_processing": {
              "description": "Specifies whether service is a grpc proxy or not, and enables grpc error processing.",
              "type": "boolean"
            },
            "skip_for_upstream_statuses": {
              "description": "Specifies regex for upstream response status on which response generator will not be used. Default - none.",
              "type": "string"
            },
            "handle_upstream_errors": {
              "description": "Specifies handle upstream errors or not. True by default.",
              "type": "boolean"
            },
            "handle_upstream_errors_status": {
              "type": "array",
              "items": {
                "type": "integer",
                "pattern": "^[3-5]\\d\\d$"
              }
            },
            "redirect": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "code": {
                  "description": "Specifies redirect status code",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    301,
                    302,
                    303,
                    307,
                    308
                  ]
                },
                "url": {
                  "description": "Defines url to redirect - sets Location response header.",
                  "type": [
                    "number",
                    "string"
                  ],
                  "pattern": "^(?:http:\\/\\/|https:\\/\\/|$scheme).+$"
                }
              },
              "required": [
                "code",
                "url"
              ]
            }
          }
        }
      }
    },
    "request_chains": {
      "description": "Specifies chain of actions for the request.",
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "message": {
            "description": "Text for analysis. May contain variables. E.g. $shared_request_body",
            "type": [
              "number",
              "string"
            ]
          },
          "phase": {
            "description": "The phase at which actions form \"action_list\" will be executed. Default is access.",
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "rewrite",
              "access"
            ]
          },
          "trace_config": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enableAllActions": {
                "description": "enable tracing of all actions in chains",
                "type": "boolean"
              },
              "enableAllChains": {
                "description": "enable tracing of all actions in child chains",
                "type": "boolean"
              },
              "mode": {
                "description": "Enable or disable tracing at this level.",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "enabled": {
                    "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "on",
                      "off",
                      "var_based"
                    ]
                  },
                  "var": {
                    "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                    "type": [
                      "number",
                      "string"
                    ]
                  }
                }
              },
              "spanAttributes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "name of attribute",
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "value": {
                      "description": "value of attribute, can contain variables",
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  }
                }
              },
              "spanName": {
                "description": "Specify name of span",
                "type": [
                  "number",
                  "string"
                ]
              },
              "enableSocketsTracing": {
                "description": "Enable or disable socket tracing, by default enabled",
                "type": "boolean"
              }
            }
          },
          "requiredChildOneOf": {
            "description": "Specifies unverifed action check",
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "decision": {
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "BLOCK",
                  "WARN"
                ]
              },
              "onlyCheckers": {
                "type": "boolean"
              },
              "include": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "exclude": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "decision"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "exclude"
                  ],
                  "properties": {
                    "exclude": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "include"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "include"
                  ],
                  "properties": {
                    "include": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "exclude"
                    ]
                  }
                }
              }
            ]
          },
          "actions": {
            "description": "Specifies a list of actions.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "action": {
                  "description": "Specifies an action to perform",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "ASN1ContentExtractor",
                    "Base64Decode",
                    "ConditionChecker",
                    "CheckDataSize",
                    "CheckMimeType",
                    "JsonPathExtract",
                    "JsonPathExtractToVars",
                    "JsonValidation",
                    "XsdValidation",
                    "PostFormDataToFlateJson",
                    "MultipartExtract",
                    "SetMessageFromVar",
                    "SetVarFromMessage",
                    "JwsToJson",
                    "XPathExtract",
                    "XPathExtractToVars",
                    "SharedMapDeleter",
                    "SharedMapRemover",
                    "SharedMapSetter",
                    "SharedMapGetter",
                    "RandomNumberToVar",
                    "VarsToSharedMap",
                    "SharedMapToVars",
                    "AntivirusFileChecker",
                    "MtomExtractor",
                    "JsonTransformer",
                    "SetVar",
                    "GraphQLRequestValidation",
                    "ProtobufValidation",
                    "OpenApiValidation",
                    "DelimiterSplitter",
                    "VarsToFile",
                    "FileToVars",
                    "WsdlValidation",
                    "HttpFilter",
                    "ProtobufToJson",
                    "FilterMds",
                    "OcspSignValidator",
                    "OcspToJson",
                    "ASN1ToJson",
                    "XmlTransformer",
                    "UrlEncode",
                    "UrlDecodeUni",
                    "UrlDecode",
                    "HexDecode",
                    "HexEncode",
                    "ToLowerCase",
                    "ToUpperCase",
                    "Utf8ToUnicode",
                    "Trim",
                    "ICAPFileChecker",
                    "MessageToFile",
                    "MultipartFormGenerateFromVar",
                    "HttpSender",
                    "MessageAccumulator",
                    "MessageFromAccumulator",
                    "MessageFromPattern",
                    "MultipartFormGenerateFromMessage",
                    "JsonPatchMessage",
                    "JsonPatchVar",
                    "DigestFromMessage",
                    "Base64Encode",
                    "HMac",
                    "FileToMessage",
                    "JwtVerifier",
                    "CharsetChecker",
                    "LdapSearch",
                    "MessageMapper",
                    "SimpleRateLimiter",
                    "UnicodeDecode"
                  ]
                },
                "id": {
                  "description": "An identificator of action",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "conditions": {
                  "description": "Specifies the conditions for performina an action.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "var": {
                        "description": "Specifies a variable to check.",
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "operator": {
                        "description": "Specifies an operator.",
                        "type": [
                          "number",
                          "string"
                        ],
                        "enum": [
                          "=",
                          "!=",
                          "<=",
                          ">=",
                          ">",
                          "<",
                          "in",
                          "not_in",
                          "~",
                          "~*",
                          "!~",
                          "!~*",
                          "ip_range",
                          "!ip_range",
                          "dn_mask",
                          "!dn_mask"
                        ]
                      },
                      "val": {
                        "description": "Specifies a value to check.",
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "required": [
                      "var",
                      "operator",
                      "val"
                    ]
                  }
                },
                "trace_config": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "enableAllActions": {
                      "description": "enable tracing of all actions in chains",
                      "type": "boolean"
                    },
                    "enableAllChains": {
                      "description": "enable tracing of all actions in child chains",
                      "type": "boolean"
                    },
                    "mode": {
                      "description": "Enable or disable tracing at this level.",
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "enabled": {
                          "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                          "type": [
                            "number",
                            "string"
                          ],
                          "enum": [
                            "on",
                            "off",
                            "var_based"
                          ]
                        },
                        "var": {
                          "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                          "type": [
                            "number",
                            "string"
                          ]
                        }
                      }
                    },
                    "spanAttributes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "description": "name of attribute",
                            "type": [
                              "number",
                              "string"
                            ]
                          },
                          "value": {
                            "description": "value of attribute, can contain variables",
                            "type": [
                              "number",
                              "string"
                            ]
                          }
                        }
                      }
                    },
                    "spanName": {
                      "description": "Specify name of span",
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "enableSocketsTracing": {
                      "description": "Enable or disable socket tracing, by default enabled",
                      "type": "boolean"
                    }
                  }
                },
                "params": {
                  "description": "Specifies extra parameters for the actions.",
                  "type": "object",
                  "additionalProperties": true
                },
                "requiredChildOneOf": {
                  "description": "Specifies unverifed action check",
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "decision": {
                      "type": [
                        "number",
                        "string"
                      ],
                      "enum": [
                        "BLOCK",
                        "WARN"
                      ]
                    },
                    "onlyCheckers": {
                      "type": "boolean"
                    },
                    "include": {
                      "type": "array",
                      "items": {
                        "type": [
                          "number",
                          "string"
                        ]
                      }
                    },
                    "exclude": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "decision"
                  ],
                  "allOf": [
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "exclude"
                        ],
                        "properties": {
                          "exclude": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "include"
                          ]
                        }
                      }
                    },
                    {
                      "if": {
                        "type": "object",
                        "required": [
                          "include"
                        ],
                        "properties": {
                          "include": {}
                        }
                      },
                      "then": {
                        "not": {
                          "required": [
                            "exclude"
                          ]
                        }
                      }
                    }
                  ]
                },
                "actions": {
                  "$ref": "#/definitions/actions"
                }
              },
              "required": [
                "action"
              ]
            }
          }
        }
      }
    },
    "trace_config": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enableAllActions": {
          "description": "enable tracing of all actions in chains",
          "type": "boolean"
        },
        "enableAllChains": {
          "description": "enable tracing of all actions in child chains",
          "type": "boolean"
        },
        "mode": {
          "description": "Enable or disable tracing at this level.",
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
              "type": [
                "number",
                "string"
              ],
              "enum": [
                "on",
                "off",
                "var_based"
              ]
            },
            "var": {
              "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
              "type": [
                "number",
                "string"
              ]
            }
          }
        },
        "spanAttributes": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "name of attribute",
                "type": [
                  "number",
                  "string"
                ]
              },
              "value": {
                "description": "value of attribute, can contain variables",
                "type": [
                  "number",
                  "string"
                ]
              }
            }
          }
        },
        "spanName": {
          "description": "Specify name of span",
          "type": [
            "number",
            "string"
          ]
        },
        "enableSocketsTracing": {
          "description": "Enable or disable socket tracing, by default enabled",
          "type": "boolean"
        }
      }
    },
    "actions": {
      "description": "Specifies a list of actions.",
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "action": {
            "description": "Specifies an action to perform",
            "type": [
              "number",
              "string"
            ],
            "enum": [
              "ASN1ContentExtractor",
              "Base64Decode",
              "ConditionChecker",
              "CheckDataSize",
              "CheckMimeType",
              "JsonPathExtract",
              "JsonPathExtractToVars",
              "JsonValidation",
              "XsdValidation",
              "PostFormDataToFlateJson",
              "MultipartExtract",
              "SetMessageFromVar",
              "SetVarFromMessage",
              "JwsToJson",
              "XPathExtract",
              "XPathExtractToVars",
              "SharedMapDeleter",
              "SharedMapRemover",
              "SharedMapSetter",
              "SharedMapGetter",
              "RandomNumberToVar",
              "VarsToSharedMap",
              "SharedMapToVars",
              "AntivirusFileChecker",
              "MtomExtractor",
              "JsonTransformer",
              "SetVar",
              "GraphQLRequestValidation",
              "ProtobufValidation",
              "OpenApiValidation",
              "DelimiterSplitter",
              "VarsToFile",
              "FileToVars",
              "WsdlValidation",
              "HttpFilter",
              "ProtobufToJson",
              "FilterMds",
              "OcspSignValidator",
              "OcspToJson",
              "ASN1ToJson",
              "XmlTransformer",
              "UrlEncode",
              "UrlDecodeUni",
              "UrlDecode",
              "HexDecode",
              "HexEncode",
              "ToLowerCase",
              "ToUpperCase",
              "Utf8ToUnicode",
              "Trim",
              "ICAPFileChecker",
              "MessageToFile",
              "MultipartFormGenerateFromVar",
              "HttpSender",
              "MessageAccumulator",
              "MessageFromAccumulator",
              "MessageFromPattern",
              "MultipartFormGenerateFromMessage",
              "JsonPatchMessage",
              "JsonPatchVar",
              "DigestFromMessage",
              "Base64Encode",
              "HMac",
              "FileToMessage",
              "JwtVerifier",
              "CharsetChecker",
              "LdapSearch",
              "MessageMapper",
              "SimpleRateLimiter",
              "UnicodeDecode"
            ]
          },
          "id": {
            "description": "An identificator of action",
            "type": [
              "number",
              "string"
            ]
          },
          "conditions": {
            "description": "Specifies the conditions for performina an action.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "var": {
                  "description": "Specifies a variable to check.",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "operator": {
                  "description": "Specifies an operator.",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "=",
                    "!=",
                    "<=",
                    ">=",
                    ">",
                    "<",
                    "in",
                    "not_in",
                    "~",
                    "~*",
                    "!~",
                    "!~*",
                    "ip_range",
                    "!ip_range",
                    "dn_mask",
                    "!dn_mask"
                  ]
                },
                "val": {
                  "description": "Specifies a value to check.",
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "required": [
                "var",
                "operator",
                "val"
              ]
            }
          },
          "trace_config": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "enableAllActions": {
                "description": "enable tracing of all actions in chains",
                "type": "boolean"
              },
              "enableAllChains": {
                "description": "enable tracing of all actions in child chains",
                "type": "boolean"
              },
              "mode": {
                "description": "Enable or disable tracing at this level.",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "enabled": {
                    "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                    "type": [
                      "number",
                      "string"
                    ],
                    "enum": [
                      "on",
                      "off",
                      "var_based"
                    ]
                  },
                  "var": {
                    "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                    "type": [
                      "number",
                      "string"
                    ]
                  }
                }
              },
              "spanAttributes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "name": {
                      "description": "name of attribute",
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "value": {
                      "description": "value of attribute, can contain variables",
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  }
                }
              },
              "spanName": {
                "description": "Specify name of span",
                "type": [
                  "number",
                  "string"
                ]
              },
              "enableSocketsTracing": {
                "description": "Enable or disable socket tracing, by default enabled",
                "type": "boolean"
              }
            }
          },
          "params": {
            "description": "Specifies extra parameters for the actions.",
            "type": "object",
            "additionalProperties": true
          },
          "requiredChildOneOf": {
            "description": "Specifies unverifed action check",
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "decision": {
                "type": [
                  "number",
                  "string"
                ],
                "enum": [
                  "BLOCK",
                  "WARN"
                ]
              },
              "onlyCheckers": {
                "type": "boolean"
              },
              "include": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "exclude": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "decision"
            ],
            "allOf": [
              {
                "if": {
                  "type": "object",
                  "required": [
                    "exclude"
                  ],
                  "properties": {
                    "exclude": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "include"
                    ]
                  }
                }
              },
              {
                "if": {
                  "type": "object",
                  "required": [
                    "include"
                  ],
                  "properties": {
                    "include": {}
                  }
                },
                "then": {
                  "not": {
                    "required": [
                      "exclude"
                    ]
                  }
                }
              }
            ]
          },
          "actions": {
            "$ref": "#/definitions/actions"
          }
        },
        "required": [
          "action"
        ]
      }
    },
    "request_chain_properties": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "error_state_code": {
          "type": "integer"
        },
        "failed_check_state_code": {
          "type": "integer"
        },
        "max_buffer_size": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "max_inmemory_size": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "output_buffer_size": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "input_buffer_size": {
          "type": [
            "number",
            "string"
          ],
          "pattern": "^([0-9]+[kKmM]{1})|([0-9]+)$"
        },
        "temp_file_path": {
          "description": "Directory to save temp files. Default is /tmp",
          "type": [
            "number",
            "string"
          ]
        },
        "resp_gen_rules_file": {
          "description": "Specifies the YAML rule file which describes how to fill pattern file.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "resp_gen_content_type": {
          "description": "Specifies content type for response header. Default - none.",
          "type": [
            "number",
            "string"
          ]
        },
        "resp_gen_pattern_file": {
          "description": "Specifies pattern file.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "trace_config": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enableAllActions": {
              "description": "enable tracing of all actions in chains",
              "type": "boolean"
            },
            "enableAllChains": {
              "description": "enable tracing of all actions in child chains",
              "type": "boolean"
            },
            "mode": {
              "description": "Enable or disable tracing at this level.",
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "description": "When on - tracing enabled, off - tracing disabled, var_based - if var specified in \"var\" parameter return \"on\", then enabled, else disabled",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "on",
                    "off",
                    "var_based"
                  ]
                },
                "var": {
                  "description": "name of var which will be used, when enabled == var_based. Must return \"on\" or \"off\".",
                  "type": [
                    "number",
                    "string"
                  ]
                }
              }
            },
            "spanAttributes": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "name of attribute",
                    "type": [
                      "number",
                      "string"
                    ]
                  },
                  "value": {
                    "description": "value of attribute, can contain variables",
                    "type": [
                      "number",
                      "string"
                    ]
                  }
                }
              }
            },
            "spanName": {
              "description": "Specify name of span",
              "type": [
                "number",
                "string"
              ]
            },
            "enableSocketsTracing": {
              "description": "Enable or disable socket tracing, by default enabled",
              "type": "boolean"
            }
          }
        },
        "requiredActionOneOf": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "accessPhase": {},
            "rewritePhase": {}
          }
        }
      }
    },
    "filters": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "filter_mds": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "description": "Specifies to enable or disable MDS. Default is \"True\".",
              "type": "boolean"
            },
            "aio": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "enabled": {
                  "description": "When specified true, dedicated thread will be used for request/response processing when its possible, value inherited from parent and may be overrite in child",
                  "type": "boolean"
                },
                "thread_pool_id": {
                  "description": "name of thread pool from section system/optional/thread_pools, value inherite from parent and may by override in child. Must be specified when aio is true",
                  "type": [
                    "number",
                    "string"
                  ]
                }
              }
            },
            "ignore_parent": {
              "description": "Specifies ignore parent rules and settings or not",
              "type": "boolean"
            },
            "debug": {
              "type": "boolean"
            },
            "config": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "SecRuleEngine": {
                  "enum": [
                    true,
                    false,
                    "DetectionOnly"
                  ]
                },
                "SecRequestBodyAccess": {
                  "type": "boolean"
                },
                "SecRequestBodyLimit": {
                  "type": "integer"
                },
                "SecRequestBodyLimitAction": {
                  "type": "string"
                },
                "SecPcreMatchLimit": {
                  "type": "integer"
                },
                "SecPcreMatchLimitRecursion": {
                  "type": "integer"
                },
                "SecResponseBodyAccess": {
                  "type": "boolean"
                },
                "SecResponseBodyMimeType": {
                  "type": "string"
                },
                "SecResponseBodyLimit": {
                  "type": "integer"
                },
                "SecResponseBodyLimitAction": {
                  "type": "string"
                },
                "SecStreamOutBodyInspection": {
                  "type": "boolean"
                },
                "SecUploadKeepFiles": {
                  "type": "boolean"
                },
                "SecAuditEngine": {
                  "type": "string"
                },
                "SecAuditLogRelevantStatus": {
                  "type": "string"
                },
                "SecAuditLogParts": {
                  "type": "string"
                },
                "SecAuditLogType": {
                  "type": "string",
                  "enum": [
                    "Syslog",
                    "Serial",
                    "Concurrent",
                    "Kafka"
                  ]
                },
                "SecAuditSyslogHost": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditSyslogPort": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditSyslogProtocol": {
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "tcp",
                    "udp"
                  ]
                },
                "SecAuditSyslogConnectTimeout": {
                  "type": "integer"
                },
                "SecArgumentSeparator": {
                  "type": "string"
                },
                "SecCookieFormat": {
                  "type": "integer"
                },
                "SecUnicodeMapFile": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "file": {
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "code": {
                      "type": [
                        "number",
                        "string"
                      ]
                    }
                  },
                  "required": [
                    "file",
                    "code"
                  ]
                },
                "SecUseTransformCache": {
                  "type": "boolean"
                },
                "SecRequestTimeout": {
                  "type": "integer"
                },
                "SecPassSlowRequest": {
                  "type": "boolean"
                },
                "SecResponseTimeout": {
                  "type": "integer"
                },
                "SecPassSlowResponse": {
                  "type": "boolean"
                },
                "SecLogFullBodyOnTimeout": {
                  "type": "boolean"
                },
                "SecAuditKafkaBrokers": {
                  "description": "CSV list of brokers",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditKafkaTopic": {
                  "description": "topic to connect to",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditKafkaProtocol": {
                  "description": "connection protocol",
                  "type": [
                    "number",
                    "string"
                  ],
                  "enum": [
                    "plaintext",
                    "ssl"
                  ]
                },
                "SecAuditKafkaCertificate": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditKafkaKey": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "SecAuditKafkaCa": {
                  "type": [
                    "number",
                    "string"
                  ]
                }
              },
              "allOf": [
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestBodyLimitAction"
                    ],
                    "properties": {
                      "SecRequestBodyLimitAction": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecRequestBodyLimit"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestBodyLimit"
                    ],
                    "properties": {
                      "SecRequestBodyLimit": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecRequestBodyLimitAction"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseBodyLimitAction"
                    ],
                    "properties": {
                      "SecResponseBodyLimitAction": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecResponseBodyLimit"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseBodyLimit"
                    ],
                    "properties": {
                      "SecResponseBodyLimit": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecResponseBodyLimitAction"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecAuditLogType"
                    ],
                    "properties": {
                      "SecAuditLogType": {
                        "const": "Kafka"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecAuditKafkaBrokers"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecAuditLogType"
                    ],
                    "properties": {
                      "SecAuditLogType": {
                        "const": "Kafka"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecAuditKafkaTopic"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecAuditKafkaProtocol"
                    ],
                    "properties": {
                      "SecAuditKafkaProtocol": {
                        "const": "ssl"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecAuditKafkaCertificate"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecAuditKafkaProtocol"
                    ],
                    "properties": {
                      "SecAuditKafkaProtocol": {
                        "const": "ssl"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "SecAuditKafkaKey"
                    ]
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestBodyLimitAction"
                    ],
                    "properties": {
                      "SecRequestBodyLimitAction": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecRequestBodyLimit"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestBodyLimit"
                    ],
                    "properties": {
                      "SecRequestBodyLimit": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecRequestBodyLimitAction"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseBodyLimitAction"
                    ],
                    "properties": {
                      "SecResponseBodyLimitAction": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecResponseBodyLimit"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseBodyLimit"
                    ],
                    "properties": {
                      "SecResponseBodyLimit": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecResponseBodyLimitAction"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestTimeout"
                    ],
                    "properties": {
                      "SecRequestTimeout": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecPassSlowRequest"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseTimeout"
                    ],
                    "properties": {
                      "SecResponseTimeout": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecPassSlowResponse"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecResponseTimeout"
                    ],
                    "properties": {
                      "SecResponseTimeout": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecLogFullBodyOnTimeout"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecRequestTimeout"
                    ],
                    "properties": {
                      "SecRequestTimeout": {
                        "pattern": ".+"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecLogFullBodyOnTimeout"
                      ]
                    }
                  }
                },
                {
                  "if": {
                    "type": "object",
                    "required": [
                      "SecAuditKafkaProtocol"
                    ],
                    "properties": {
                      "SecAuditKafkaProtocol": {
                        "const": "ssl"
                      }
                    }
                  },
                  "else": {
                    "not": {
                      "required": [
                        "SecAuditKafkaCa"
                      ]
                    }
                  }
                }
              ]
            },
            "rules": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "base",
                  "owasp-crs",
                  "comodo",
                  "sowa-mq",
                  "sowa-http",
                  "sowa-ws",
                  "sowa-ufs",
                  "sowa-kafka",
                  "sowa-http-reversed"
                ]
              }
            },
            "custom_rules": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "settings": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "brokers": {
          "description": "Specifies the list of bootstrap Kafka brokers, use comma to separate multiple values.",
          "type": [
            "number",
            "string"
          ]
        },
        "client_id": {
          "description": "Specifies kafka client id.",
          "type": [
            "number",
            "string"
          ]
        },
        "compression": {
          "description": "Specifies message compression format. Snappy is a deafult compression method.",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "none",
            "gzip",
            "snappy",
            "lz4",
            "zstd"
          ]
        },
        "partition": {
          "description": "Specifies the topic partition id, the default is to automatically assign a partition according to the message id.",
          "type": [
            "number",
            "string"
          ]
        },
        "partitioner": {
          "description": "Specifies partitioner for message distribution.",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "random",
            "consistent",
            "consistent_random",
            "murmur2",
            "murmur2_random",
            "fnv1a",
            "fnv1a_random"
          ]
        },
        "log_level": {
          "description": "Specifies logging level (syslog(3) levels). Defaul value is 6.",
          "type": "integer",
          "minimum": 0,
          "maximum": 7
        },
        "max_retries": {
          "description": "Specifies how many times to retry sending a failed MessageSet. Retrying may cause reordering.",
          "type": "integer",
          "minimum": 0,
          "maximum": 10000000
        },
        "buffer_max_messages": {
          "description": "Specifies maximum number of message allowed on the producer queue. Default value is 100000.",
          "type": "integer",
          "minimum": 1,
          "maximum": 10000000
        },
        "backoff": {
          "description": "Specifies backoff time in milliseconds. Default value is 100.",
          "type": "integer",
          "minimum": 0,
          "maximum": 3600000
        },
        "compression_level": {
          "type": "integer",
          "minimum": -1,
          "maximum": 12
        },
        "message_max_bytes": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 1000000000
        },
        "message_copy_max_bytes": {
          "type": "integer",
          "minimum": 1000,
          "maximum": 1000000000
        },
        "message_timeout": {
          "description": "Local message timeout. This value is only enforced locally and limits the time a produced message waits for successful delivery.",
          "type": "integer"
        },
        "topic_metadata_refresh_interval": {
          "description": "Period of time in milliseconds at which topic and broker metadata is refreshed",
          "type": "integer"
        },
        "ssl_endpoint_identification_algorithm": {
          "description": "Endpoint identification algorithm to validate broker hostname using broker certificate",
          "type": [
            "number",
            "string"
          ],
          "enum": [
            "none",
            "https"
          ]
        },
        "ssl_certificate_verification": {
          "description": "Enables broker (server) certificate verification. On by default.",
          "type": "boolean"
        },
        "debug": {
          "description": "Turn on debug logs.",
          "type": "boolean"
        },
        "ssl": {
          "description": "Enables or disables ssl.",
          "type": "boolean"
        },
        "ssl_keystore": {
          "description": "Specifies keystorage location.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_keystore_pwd": {
          "description": "Specifies filename with keystorage password.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_cert": {
          "description": "Specifies certificate location.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_ca": {
          "description": "Specifies CA certificate location.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_key": {
          "description": "Specifies CA key location.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_key_pwd": {
          "description": "Ptivate key password.",
          "type": [
            "number",
            "string"
          ],
          "pattern": "^(?!\\/)(?!\\.\\.\\/)(?:(?!\\/\\.\\.\\/).)+?(?<!\\/\\.\\.)$"
        },
        "ssl_ciphers": {
          "description": "Specifies the string of enabled ciphers for requests.",
          "type": "string"
        },
        "ssl_curves": {
          "description": "The supported-curves extension.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_sigalsgs": {
          "description": "Signature_algorithms extension to indicate to the server which signature/hash algorithm pairs may be used in digital signatures.",
          "type": [
            "number",
            "string"
          ]
        },
        "ssl_crl": {
          "description": "Specifies path to CRL for verifying broker's certificate validity.",
          "type": [
            "number",
            "string"
          ]
        }
      },
      "required": [
        "brokers"
      ],
      "allOf": [
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_keystore"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_keystore_pwd"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_cert"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_ca"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_key"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_key_pwd"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_ciphers"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_curves"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_sigalsgs"
              ]
            }
          }
        },
        {
          "if": {
            "type": "object",
            "required": [
              "ssl"
            ],
            "properties": {
              "ssl": {
                "pattern": ".+"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "ssl_crl"
              ]
            }
          }
        }
      ]
    }
  }
}